黑马程序员技术交流社区
标题:
为什么会输出这个结果??(关于构造函数)
[打印本页]
作者:
乔栋
时间:
2015-7-3 17:36
标题:
为什么会输出这个结果??(关于构造函数)
package test2;
class X {
X() {
System.out.print("X");
}
Y b = new Y();
}
class Y {
Y() {
System.out.print("Y");
}
}
public class Test {
public static void main(String[] args) {
new X();
}
}
//输出结果YX
//不是X类的构造函数先执行么?我理解的输出结果XY
复制代码
作者:
Boss星月
时间:
2015-7-3 17:41
本帖最后由 Boss星月 于 2015-7-3 17:47 编辑
class X { //加载类时已经写执行了new
X() {
System.out.print("X");
}
Y b = new Y();//掉了 Y的构造
}
class Y {
Y() {
System.out.print("Y");
}
}
public class Test {
public static void main(String[] args) {
new X();//掉X的时候先掉了Y b = new Y()
}
}
作者:
乔栋
时间:
2015-7-3 18:07
Boss星月 发表于 2015-7-3 17:41
class X { //加载类时已经写执行了new
X() {
System.out.print("X");
我就想知道为什么先调Y b = new Y();
作者:
慕容旺财
时间:
2015-7-4 12:37
不是 当构造函数初始化的时候 先初始化更加细节的部分 在这里 对于一个类内部新建类来说 内部新建的那个类会先存在 然后再初始化本类的构造函数 跟this必须在构造函数第一行的原因一样
作者:
Boss星月
时间:
2015-7-10 14:42
你要搞清楚这个问题,需要了解java类成员的初始化顺序
成员变量会在构造方法之前初始化
作者:
zhhrai
时间:
2015-7-10 15:07
受教了..记住初始化顺序
作者:
心在左边跳
时间:
2015-7-10 15:08
Y b = new Y();成员变量类加载的时候就初始化了,构造函数,你不new对象就不会被执行。
作者:
冷雨敲窗被未温
时间:
2015-7-10 22:10
不错
嗯
作者:
曲终烟尽
时间:
2015-7-10 22:27
你再加一个 static 方法,一个static 代码块,一个 空名称代码块
然后再看看初始化顺序。
class T
{
{System.out.println("空代码块");}
static {System.out.println("static代码块");}
T()
{
System.out.println("构造函数");
}
public static void t()
{
System.out.println("static函数");
}
}
class Test1c
{
public static void main(String[] args)
{
T.t();
System.out.println("-----------");
new T();
byte b1=3,b2=4,b;
//b=b1+b2;
b=127;
int i;
i=b1+b2;
//i=3.3+2.2;
float f;
f=2.2f+3;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2