×

java函数指针

java函数指针(java 中指针是怎么定义的)

admin admin 发表于2024-04-25 18:36:26 浏览24 评论0

抢沙发发表评论

这篇文章给大家聊聊关于java函数指针,以及java 中指针是怎么定义的对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

本文目录

java 中指针是怎么定义的

Java语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用的区别,本文会试图澄清这一概念。并且由于Java不能通过简单的赋值来解决对象复制的问题,在开发过程中,也常常要要应用clone()方法来复制对象。本文会让你了解什么是影子clone与深度clone,认识它们的区别、优点及缺点。 看到这个标题,是不是有点困惑:Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时也会使程序的变得非常复杂难以理解,滥用指针写成的代码不亚于使用早已臭名昭著的GOTO语句。Java放弃指针的概念绝对是极其明智的。但这只是在Java语言中没有明确的指针定义,实质上每一个new语句返回的都是一个指针的引用,只不过在大多时候Java中不用关心如何操作这个指针,更不用象在操作C++的指针那样胆战心惊。唯一要多多关心的是在给函数传递对象的时候。如下例程: package reference; c2.strBuff.append( change strBuff clone); 改成下面这样: c2.str.substring(0,5); c2.strBuff.append( change strBuff clone); 去掉了重新赋值的过程,c2.str也就不能有变化了,我们的把戏也就露馅了。但在编程过程中只调用 c2.str.substring(0,5); 语句是没有任何意义的。 应该知道的是在Java中所有的基本数据类型都有一个相对应的类,象Integer类对应int类型,Double类对应double类型等等,这些类也与String类相同,都是不可以改变的类。也就是说,这些的类中的所有方法都是不能改变其自身的值的。这也让我们在编clone类的时候有了一个更多的选择。同时我们也可以把自己的类编成不可更改的类。

java调用dll,如何传入指针变量

问题解答:

1Java中调用指针类型的参数:需要创建Pointer变量,并为其分配空间

2.整形的数据可以直接传入;

3.JNative对CString类型支持不是很良好,调用CString的方法时,经常会报一些异常,所以我把路径改成的字符指针;

4.输入型参数作为输出:可以参见以上的例子,数组c是如何设置和输出的。

java怎么使用类似c++的函数指针

Java通过函数式接口实现函数式编程。函数式接口也可以简写为lambda表达式。interface FI {void s();}public class Main{public static void main(String args) {FI a = {() -》 System.out.println("s1"),() -》 System.out.println("s2"),() -》 System.out.println("s3"),};for (int i = 0; i 《 3; i++) {a.s();}}}

java打印空指针具体行数

java打印空指针具体行数?打印空置针具体行数应该是五行也就是5排,所以他才会打印出来,因为如果没有分成5排的话,那么它就会形成一个错乱,也就是函数的标准没有设置完成。所以应该把长宽设置于7厘米,把行高设置于5厘米就可以。

java中指针怎么理解

实际上,java力图使程序员忘记指针,这包括2个方面:第一,java限制指针,去除了指针运算。第二,java从语法上努力隐藏指针,让指向某对象的指针看起来更像那个对象本身!是的,所有的java书籍都让人忘记了指针这回事,我们仿佛只跟对象打交道。偶尔,会被迫分清引用和对象的关系。这就是目前的情形。多么好的想法!对象可比那些个不知所以的指针亲和多了!这是一种伟大的抽象!这里,我们也更愿意把引用和对象混淆。是的,为什么不呢?那样,整个世界都是对象,太好理解了!可事实上,为了节省内存,java不能把引用(指针)完全废除。要知道,复制一个引用(指针)要比复制整个对象有效得多!所以我们不得不面对引用和对象共存的事实。下面我就好好分析分析:指针已经被抽象成了引用,现在指针不能够随心所欲的运算,并且看起来就像个对象,完全没有了指针的模样。但它毕竟和对象还是不同的,还要经过一层“转换”(从指向的那个对象里取数据)。如果我们在引用满天飞的时候总想着这样一层转换,真的是很不舒服。比如:String key="name";String value="hyq";HashMap map=new HashMap();map.put(key,value);你得想着:key只是个引用,value也是个引用,map还是个引用,我们刚刚做的是把key和value这2个引用放进了map(也是个HashMap对象的引用)中,到时候我就可以通过map这个引用取得里面的对应于key引用的value引用!你不晕我就服了。一旦你这样想,你每时每刻都要面对这样的绕口令。因为我们对对象的操作全部要通过引用!java没有提供语法让你直接得到对象!(指的是直接寻址)这一点通过比较原始类型很好理解,int i=8,那么i就是8,不是什么指针,要先找到放着8那块内存的地址再把8拿出来。这样多直接,多方便啊!所以,我们对引用最好也这么来理解,就轻松多了。还是上面的例子,key就是个String,value也是个String,map是个HashMap,我们把key和value放进map里,将来可以按key取出value。——多简单!其实,这样的理解是很符合人的思维习惯的,我相信大多数人刚学java时都会自然而然的这么理解,但是我们一定要注意在什么时候不能这么理解。只要记住什么时候不能这么理解,我们就不会因为这种“近似”的理解方式而犯错,而同时从这种理解方式里得到了方便和好处。把引用直接当作对象本身的好处是简单直接,容易理解,而“误差”的地方就在于,假设只有这个引用可以修改此对象。换句话说,当别的引用修改了对象的时候,我们毫不知情并很感费解。比如:String name=null;HashMap map=new HashMap();map.put("name",name);//do a lot of thingsname="hyq";当我们再从map里取出name的时候,发现它已经被赋值为hyq了!放进去的时候明明是啥都没有啊!咋就变了讷?引用到name那个对象的不只你map一个阿!在同一个函数里出现这种情况还不是很常见,我们一般也不必这么写,更多的是出现在函数调用、传参的时候,这样更加隐蔽,不易发现,也让代码可读性下降。比如:String name=null;HashMap map=new HashMap();map.put("name",name);alterName(name);在alterName函数里我们修改了name对象,这会直接影响到函数外的map。所以,当我们把引用和对象故意混淆时,一定要记住什么时候应该分清楚。对象的使用不外乎以下几种情况:1 String name=new String("hyq");然后使用name,引用生命周期一结束,对象失效(无法被取用)了事。这里只有name一个引用指向此对象,随便怎么弄都不会出事。2 String name=new String("hyq");String anotherName=name;这里假设只有name会修改对象,并且在anotherName引用此对象前做完所有修改,anotherName只是取用这个对象调用方法。在这种情况下,也不会出事。这也是我们经常遇到的情况,并且一般都是在函数调用传参时出现。注意传参实际上就是String anotherName=name;这里尤其要注意的是2个引用的生命周期:name修改对象的时候另一个引用还没出世,而等它出世后发现它又不会修改对象,怎一个爽字了得!3String name=new String("hyq");String anotherName=name;代码和上面一样,但是这里要么2个引用都会修改对象,要么只有一个修改但会影响到另一个。这个时候无论如何你不能再把引用当对象了,你必须分清楚它们。你必须小心仔细,不能有丝毫疏忽。当然,这种写法和风格无论如何是不值得提倡的,若非必要(没办法)请勿模仿!因为必然有一个引用在不知情的情况下被人修改了对象,等它用的时候会大吃一惊,而这个对象是在什么时候被什么人修改的,极难排查。(上面例子举得不好,String类是不变类,汗!)StringBuffer name=new StringBuffer("hyq");StringBuffer anotherName=name;//do a lot of thingsanotherName.append("is my gf");你可能写得爽,一时痛快就这么写了,你也知道是什么人在什么时候修改了对象,但是别人呢?要知道,这里可能不是相隔几行代码这么简单,可能是嵌套了好几层函数调用!你把那个anotherName传到第5层函数里面,然后丧心病狂的修改了那个对象,除了天知地知你知,鬼都看不出来!

在java中没有指针,如何修改函数中参数的值

想通过函数改变参数的值,这点好像不可能,因为java的函数传参是值传递,没有C语言中的重命名和指针传参方法。不过也有方法:在函数中通过return值将结果返回,在通过用要改变的参数接收返回值就可以了,不过这点好像和直接赋值没多大区别,但如果函数体中赋值过程比较复杂,这个方法还是可行的。

java可以调用带有指针参数的C函数吗

VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!“学习用汇编语言写程序”和“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)想要从本质上理解C指针,必须学习C和汇编的对应关系。”不是一回事!

求教:Java支持函数指针吗

java 不支持函数指针

java可以用接口实现类似函数指针的用法,这种方法叫做代理模式,最简单的代理模式就可以实现类似的在这种用法,本质使用接口实例来代替函数对象。

interface Do {    void doSomething();}class MyDo implements Do {    @Override    public void doSomething() {        System.out.println("i’m doing");    }}class YouDo implements Do {    @Override    public void doSomething() {        System.out.println("you’re doing");    }}class ItDo implements Do {    @Override    public void doSomething() {        System.out.println("it’s doing");    }}public class Demo {    public static void main(String args) throws IOException {        Do{new MyDo(), new YouDo(), new ItDo()};        for (Do nowDo : annyDo) {            nowDo.doSomething();        }    }}

代理模式相关资料:网页链接

JAVA中怎么处理指针参数

用JNI技术,就是把那个函数再经过Java JNI规范包裹一下,让Java可以调用包裹的函数。比如:/* C++ */ void foo(void* address) { printf("%ld", address); }要调用这样的函数/* C++ */ jobject com_test_Klass_foo(jobject arr) { foo(convertToVoidP(arr)); }把这个函数编译成Windows DLL或者Linux so:在Java里:/* Java */ package com.test; class Klass { public native foo(ArrayList《?》 arr); static {System.loadLibrary(’dll/or/so/path’);}}

如果你还想了解更多这方面的信息,记得收藏关注本站。