黑马程序员技术交流社区
标题:
关于构造函数
[打印本页]
作者:
贾文泽
时间:
2013-4-29 03:14
标题:
关于构造函数
一. 先说一下构造函数的访问修饰符问题
不写不代表不能写,同样,构造函数也有四种访问修饰符,调用默认的构造函数时,是public的,调用自己定义的构造函数
[没写访问修饰符]时,是默认的[比public小,比private大]
。如果把构造函数修饰为private,那么就不能被创建对象,单例设计模式和工厂设计模式中就会私有化构造函数。
二.重点说一下构造函数中是否存在return语句的问题。
构造函数中能不能有return语句 和 我们能不能写return语句,我想这是两个问题,老师经常说构造函数中不能写return语句,我们就理解为,构造函数中不会存在return语句,我曾经做一道选择题的时候,有个选项说构造函数中不可以写return语句,我否认了这个选项,但是结果是我错了,经查证经过反编译的构造函数的字节码中最后一条指令确实是return,这个又怎么理解,
<b><font size="4">public Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 10: 0
</font></b>
复制代码
这个return是返回了一个
函数调用,没什么特殊含义。当
你在java内写new时,后面除了一条new指令外,还有个
invokespecial调用这个类的构造函数。
return指的是,pop构造函数frame,回到new指令所在的frame。
注:pop是Stack中的一个方法,作用移除并返回栈[函数被调用时,jvm都会为其分配一个栈区]顶部的元素,跟peek方法区别于peek方法不会移除,只做返回顶部元素操作
所以说,构造函数中是可以存在return语句的,只是我们定义构造函数的时候不可以在里面写return语句。
三. 再说下构造函数的返回值问题
都晓得构造函数不能写返回值类型,包括void,但是通过调用构造函数确实得到了一个对象,那是不是返回值类型是Object呢? 这是错误的,我们不要认为返回对象是构造函数的功劳,注意构造跟返回不是一回事,别忘了他前面还有个new 呢,new的作用就是 开辟内存空间,分配给对象,并初始化对象,将对象应用返回并赋值给变量。
作者:
海不扬波
时间:
2013-4-29 10:22
支持楼主,分析的很好。
作者:
芦玉明
时间:
2013-4-29 10:31
谢谢楼主,学习了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2