java中怎样定义回调函数

java中怎样定义回调函数,第1张

程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。目的达到。在C/C++中,要用回调函数,被掉函数需要告诉调用者自己的指针地址,但在JAVA中没有指针,怎么办?我们可以通过接口(interface)来实现定义回调函数。\x0d\x0a假设我是程序员A,以下是我的程序a:\x0d\x0a[java]viewplaincopyprint?\x0d\x0apublicclassCaller\x0d\x0a{\x0d\x0apublicMyCallInterfacemc\x0d\x0a\x0d\x0apublicvoidsetCallfuc(MyCallInterfacemc)\x0d\x0a{\x0d\x0athis.mc=mc\x0d\x0a}\x0d\x0a\x0d\x0apublicvoidcall(){\x0d\x0athis.mc.method()\x0d\x0a}\x0d\x0a}\x0d\x0a还需要定义一个接口,以便程序员B根据我的定义编写程序实现接口。\x0d\x0a\x0d\x0apublicinterfaceMyCallInterface\x0d\x0a{\x0d\x0apublicvoidmethod()\x0d\x0a\x0d\x0a}\x0d\x0a于是,程序员B只需要实现这个接口就能达到回调的目的了:\x0d\x0apublicclassBimplementsMyCallInterface\x0d\x0a{\x0d\x0apublicvoidmethod()\x0d\x0a{\x0d\x0aSystem.out.println("回调")\x0d\x0a}\x0d\x0a\x0d\x0apublicstaticvoidmain(Stringargs[])\x0d\x0a{\x0d\x0aCallercall=newCaller()\x0d\x0acall.setCallfuc(newB())\x0d\x0acall.call()\x0d\x0a}\x0d\x0a}

Java中,我们应该知道最基本的就是定义变量声明变量了,那么定义与声明这两者有没有区别呢?具体的区别又是哪些呢?下面学习啦小编来告诉你定义与声明的区别。

定义和声明的定义区别

1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。

2、另一种是不需要建立存储空间的。 例如:extern int a 其中变量a是在别的文件中定义的。

声明是向编译器介绍名字--标识符。它告诉编译器“这个函数或变量在某处可找到,它的模样象什么”。

而定义是说:“在这里建立变量”或“在这里建立函数”。它为名字分配存储空间。无论定义的是函数还是变量,编译器都要为它们在定义点分配存储空间。

对于变量,编译器确定变量的大小,然后在内存中开辟空间来保存其数据,对于函数,编译器会生成代码,这些代码最终也要占用一定的内存。

总之就是:把建立空间的声明成为“定义”,把不需要建立存储空间的成为“声明”。

基本类型变量的声明和定义(初始化)是同时产生的而对于对象来说,声明和定义是分开的。

下面小编给大家举个例子说明一下。

例如:类A

如果A a就是一个声明,告诉编译器a是A类的一个对象变量,但是不进行初始化

如果以后a=new A()这就是初始化,分配了空间。

需要注意的是我们声明的最终目的是为了提前使用,即在定义之前使用,如果不需要提前使用就没有单独声明的必要,变量是如此,函数也是如此,所以声明不会分配存储空间,只有定义时才会分配存储空间。

用static来声明一个变量的作用有二:

(1)对于局部变量用static声明,则是为该变量分配的空间在整个程序的执行期内都始终存在。

(2)外部变量用static来声明,则该变量的作用只限于本文件模块。

定义和声明的具体区别

所谓定义就是(编译器)创建一个对象,为这个对象分配一块内存,并给它取上一个名字,这个名字就是就是我们经常所说的变量名或对象名。

声明有2重含义:

(1) 告诉编译器,这个名字已经匹配到一块内存上,下面的代码用到变量或者对象是在别的地方定义的。声明可以出现多次。

(2) 告诉编译器,这个名字已经被预定了,别的地方再也不能用它来作为变量名或对象名。

定义和声明最重要区别

定义创建对象并为这个对象分配了内存,声明没有分配内存。

为了帮助网友解决“java创建自定义函数”相关的问题,中国学网通过互联网对“java创建自定义函数”相关的解决方案进行了整理,用户详细问题包括:/.println(arrs.这里是返回最大值

return 8/我想自定义getmax函数的话怎么做

}

public int getMax(){

/.getMax)/,7.outpublic class test{

public static void main(String[] args){

int arrs[] =new int[]{1

}

}

我想java实现javascript 里面 prototype 这样的原型对象,5.,5

System,1},8,4,具体解决方案如下:

解决方案1:

println(getMax(arrs))a) a = arrs[i].lengtharrsi <

}

public static int getMax(int[] arrs){

int a = 0

for (int i = 0,7.outpublic class TEST{

public static void main(String[] args){

int[] arrs =new int[]{1

}

return a,5i++) {

if(arrs[i] >,5

System,1},8,4

解决方案2:

谢谢。。我能不能 .length() 这样的函数自定义创建呢?

解决方案3:

jdk提供一些常用类跟方法方便我们写程序,自己写也一样的

arrs.length Array里面封装好的实例属性

解决方案4:

谢谢!

解决方案5:

7,5

}

public static void main(String[] args){

int arrs[] =new int[]{1:

public static int getMax(int[] arrs){

/.这里是返回最大值

return 8/:

public static void main(String[] args){

int arrs[] =new int[]{1..

System,4,4///,1}.out

System/,5,5,5.,7,8.我想自定义getmax函数的话怎么做

}

改为public int getMax(){

/,1}.out/.getMax),8.这里是返回最大值

return 8

}

改为.println(getMax(arrs)).println(arrs

解决方案6:

方法没有修饰符的例子:

String getName(){ //无修饰符,无参数,有String类型返回值

return "张3"

}

void getName(){ //无修饰符,无参数,无返回值

system.out.println("张3")

}

int add(int a,int b){ //无修饰符,有2个整型参数,有整型返回值

return a+b

}

方法有2种修饰符

1)有public、protected、private三种显示的访问控制修饰符

2)还可以有static 、 final 、abstract 这三个修饰符

方法含有修饰符的例子:

public String getName(){ //public修饰符(公有方法),无参数,有String类型返回值

return "张3"

}

private void getName(){ //无修饰符(私有方法),无参数,无返回值

system.out.println("张3")

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8166834.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存