class Demo
{
static Demo d = new Demo();
Demo()
{
System.out.println("demo");
}
}
class DemoDemo
{
public static void main(String[] args)
{
System.out.println(new Demo());
}
}
这段代码打印结果如下:
demo
demo
一个地址值
问题1:为什么不是先打印地址值呢?
问题2:先看下面代码,为了方便,就把前面的代码叫代码1,下面的代码叫代码2吧。。
class Demo
{
Demo()
{
System.out.println("demo");
}
}
class DemoDemo
{
public static void main(String[] args)
{
System.out.println(new Demo());
}
}
代码2打印结果:
demo
地址值
代码一之所以会有两个demo,就因为代码一多了 static Demo d = new Demo();这句话,所以,我想问的是,代码一打印结果demo的打印顺序,到底第一个demo是 static Demo d = new Demo()这句话打印的结果呢?还是System.out.println(new Demo())这句话的结果???
最好画个图作者: 徐军涛 时间: 2012-11-27 14:53
static class Demo
{
static Demo d = new Demo();
Demo()
{
System.out.println("demo"+"---"+d);
}
}
public static void main(String[] args) {
System.out.println(new Demo());
}
}
//demo---null 先打印的是静态变量d的demo ,静态先于对象而存在,所以d=unll
//demo---@6276e1db 创建匿名对象,调用构造方法
//6ae6235d作者: ssx0101 时间: 2012-11-27 15:16
class Demo
{
static Demo d = new Demo();
Demo()//在new对象时构造函数会比给属性d赋值先执行,所以结果中第一个“Demo”是“System.out.println(new Demo())这句话的结果” {
System.out.println("demo");
}
}
class DemoDemo
{
public static void main(String[] args)
{
System.out.println(new Demo());//会先执行new Demo(),等Demo的对象创建完成后再打印地址