黑马程序员技术交流社区
标题:
关于构造方法的一个疑问
[打印本页]
作者:
贾文泽
时间:
2013-2-20 15:02
标题:
关于构造方法的一个疑问
和一般方法相比,构造方法有两个显著特征:
1. 构造方法无返回值,不可以为其指定任何类型的返回值,包括void。
2. 构造方法的名称总是和类名保持完全一致。
构造方法没有数值返回类型,也非void返回类型,为何会有一条return指令存在?
这条指令在虚拟机中做了些什么工作?
求解释!
作者:
黑马刘杰
时间:
2013-2-20 15:08
return语句总是用在方法中,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一个是结束方法的执行(仅仅一个return语句)。
你说的大概就是第二种用法吧
作者:
罗海云
时间:
2013-2-20 16:13
用了return的另一种方法.终止.
作者:
偏執旳、靑春
时间:
2013-2-20 17:24
老毕的视频里面说不能写return语句啊!你的怎么能写,建议你测试一下,如果能写就是为了终止程序的,一个对象一建立就终止了
作者:
江华
时间:
2013-2-20 18:05
本帖最后由 江华 于 2013-2-20 18:08 编辑
就我看视频是这样理解构造函数的!
1、初始化
一个类就是一个对象,当一个对象一出现时,就拥有某些属性,某些方法。但是每个属性在出现时是不一样的。
例如:
刚出生的小孩,他们都有鼻子、有手(特殊情况不说,不抬杠!)、有脚、有嘴巴。。。
但是他们的位置,长短,形状可以是不一定的。
同理,类也要初始化,
这个初始化的动作只用执行一次就可以了(如果可以多次,那小孩就太幸福了!),
所以,初始化的代码就要专门存放了。既然是代码块,那总要给这个代码块起个名字,这个名气起什么好呢,所有类都是用一个同一个名字,这样就会占用一个单次,并且类名本身在哪放着,不用白不用,于是就有了这个和类名同名的代码块
2、传递参数-支持初始化
水平有限这个对不对,敬请各位朋友指正
上边的例子来说:
小孩是在出生的时候,就已经接收好了胳膊腿、眼鼻口的参数;而不是,在出生的时候都一样,出生后,给他赋予的参数。
所以类,也要在出生的是的时候,接收参数
构造参数有了以上的使命,它的出现意味着开始,而不是结束。也不用反馈给谁什么信息。
所以,他们是没有返回类型的
同样因为以上两个使用,在构造函数里,也不应该有结束的代码
作者:
冯超
时间:
2013-2-20 18:18
return 是一个关键字,目的是返回指定类型,若该函数没有返回的类型则不需要写return,若写了,表示终止该函数或者程序
作者:
TK13761
时间:
2013-2-20 19:36
我了解到 构造方法跟一般的方法在虚拟机里面的方法签名是不一样的,构造函数的一般是 <init>, 而一般函数是函数的方法名。机根据方法签名,在数据区加载相应的类,构造method结构体,里面有虚拟机指令, 解释器负责解释执行。
每个方法调用,都在栈上push一个frame,在方法返回时pop,
return是 用来告诉解释器,方法解释完毕
,在栈上pop frame。 查了下构造函数的资料 不知道能不能帮到你
作者:
TK13761
时间:
2013-2-21 21:22
今天又看了 下毕老师关于构造函数的那段视频 老师言词说构造韩式中绝没有return语句, return这句只能在一般函数中出现,毕老师应给不会错吧,这样不知道你是不是看错了。
作者:
成吉思汗
时间:
2013-2-21 23:02
构造函数中是不能有return语句的,这个问题建议你测试下.
作者:
qq646742615
时间:
2013-2-22 01:44
return 是终止一个函数的执行,无论是构造函数还是普通的函数
作者:
sun~~
时间:
2013-2-22 08:18
Java中的return语句总是和方法有密切关系,return语句总是用在方法中,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一个是结束方法的执行(仅仅一个return语句)。
以下是无返回值的情况:
?public void test1() {
System.out.println("---------无返回值类型的return语句测试--------");
for (int i = 1; ; i++) {
if (i == 4) return;
System.out.println("i = " + i);
}
}
当i=4时,循环结束..
return有一个特性就是一旦调用return 那么直接结束方法.
有如下例子:
?public int locate(){
while (true)
return 4;
}
以上代码是不会报错的,
?public int locate(){
while (isTrue())
return 4;
}
boolean isTrue(){
return true;
}
这段代码却会报错, 这是因为编译器认为while语句有在任何情况下都能执行的能力,但是只在入参为true的情况下有该能力。JVM不知道当istrue为假的时候该怎么办,所以报错.
在看如下代码:
?public int locate(){
while (isTrue())
return 4;
return 0;
}
boolean isTrue(){
return true;
}
这段代码也不会报错,因为添加了return 0;虽然说JVM不知道当istrue为假的时候该怎么办,但是仍然会返回0值,方法就有了返回值.
作者:
杨建峰
时间:
2013-2-22 19:17
return就是返回函数调用,没什么特殊含义。
这个是构造函数,在你在java内写new时,后面除了一条new指令外,还有个
invokespecial调用这个类的构造函数。
return指的是,回到new指令所在的frame。
!!网上找的
作者:
朱玉玺
时间:
2013-2-23 16:33
我测试了下,构造函数可以有return,其实这里的return相当于直接跳转到函数的 “}”这个位置。二楼正解。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2