A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贾文泽 高级黑马   /  2013-2-20 15:02  /  2504 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

和一般方法相比,构造方法有两个显著特征:
1. 构造方法无返回值,不可以为其指定任何类型的返回值,包括void。
2. 构造方法的名称总是和类名保持完全一致。

构造方法没有数值返回类型,也非void返回类型,为何会有一条return指令存在?
这条指令在虚拟机中做了些什么工作?   

求解释!

评分

参与人数 1黑马币 +9 收起 理由
李培根 + 9 赞一个!

查看全部评分

12 个回复

倒序浏览
return语句总是用在方法中,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一个是结束方法的执行(仅仅一个return语句)。
你说的大概就是第二种用法吧

评分

参与人数 1黑马币 +9 收起 理由
李培根 + 9 赞一个!

查看全部评分

回复 使用道具 举报
用了return的另一种方法.终止.
回复 使用道具 举报
老毕的视频里面说不能写return语句啊!你的怎么能写,建议你测试一下,如果能写就是为了终止程序的,一个对象一建立就终止了
回复 使用道具 举报
本帖最后由 江华 于 2013-2-20 18:08 编辑

就我看视频是这样理解构造函数的!
1、初始化
  一个类就是一个对象,当一个对象一出现时,就拥有某些属性,某些方法。但是每个属性在出现时是不一样的。
例如:
刚出生的小孩,他们都有鼻子、有手(特殊情况不说,不抬杠!)、有脚、有嘴巴。。。
但是他们的位置,长短,形状可以是不一定的。
同理,类也要初始化,
这个初始化的动作只用执行一次就可以了(如果可以多次,那小孩就太幸福了!),
所以,初始化的代码就要专门存放了。既然是代码块,那总要给这个代码块起个名字,这个名气起什么好呢,所有类都是用一个同一个名字,这样就会占用一个单次,并且类名本身在哪放着,不用白不用,于是就有了这个和类名同名的代码块
2、传递参数-支持初始化
    水平有限这个对不对,敬请各位朋友指正
    上边的例子来说:
小孩是在出生的时候,就已经接收好了胳膊腿、眼鼻口的参数;而不是,在出生的时候都一样,出生后,给他赋予的参数。
所以类,也要在出生的是的时候,接收参数


构造参数有了以上的使命,它的出现意味着开始,而不是结束。也不用反馈给谁什么信息。
所以,他们是没有返回类型的

同样因为以上两个使用,在构造函数里,也不应该有结束的代码

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

回复 使用道具 举报
return 是一个关键字,目的是返回指定类型,若该函数没有返回的类型则不需要写return,若写了,表示终止该函数或者程序
回复 使用道具 举报
我了解到  构造方法跟一般的方法在虚拟机里面的方法签名是不一样的,构造函数的一般是 <init>, 而一般函数是函数的方法名。机根据方法签名,在数据区加载相应的类,构造method结构体,里面有虚拟机指令, 解释器负责解释执行。
每个方法调用,都在栈上push一个frame,在方法返回时pop,return是 用来告诉解释器,方法解释完毕,在栈上pop frame。  查了下构造函数的资料 不知道能不能帮到你

评分

参与人数 1黑马币 +9 收起 理由
李培根 + 9 赞一个!

查看全部评分

回复 使用道具 举报
今天又看了 下毕老师关于构造函数的那段视频 老师言词说构造韩式中绝没有return语句, return这句只能在一般函数中出现,毕老师应给不会错吧,这样不知道你是不是看错了。
回复 使用道具 举报
构造函数中是不能有return语句的,这个问题建议你测试下.
回复 使用道具 举报
return 是终止一个函数的执行,无论是构造函数还是普通的函数
回复 使用道具 举报
sun~~ 中级黑马 2013-2-22 08:18:50
11#
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值,方法就有了返回值.
回复 使用道具 举报
return就是返回函数调用,没什么特殊含义。
这个是构造函数,在你在java内写new时,后面除了一条new指令外,还有个
invokespecial调用这个类的构造函数。
return指的是,回到new指令所在的frame。
!!网上找的
回复 使用道具 举报
我测试了下,构造函数可以有return,其实这里的return相当于直接跳转到函数的 “}”这个位置。二楼正解。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马