`
天朗java
  • 浏览: 32872 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

对象初始化顺序

阅读更多
不开编译器,不看答案看你是否能看出代码的运行结果:
         
         class A
{
	public A(){
	  System.out.println("A的无参构造方法!");
	}
}

class B
{
	public B(){
	   System.out.println("B的无参构造方法!");
	}
}
class C
{
	public C(){
	   System.out.println("C的无参构造方法!");
	}
}
public class Test extends A
{
	static{
	  System.out.println("Test的静态代码块");
	}
	
	private static B b;
	private C c;
         public Test(){
            System.out.println("Test的无参构造方法");
         }
	public static void main(String args[]){
	Test test = new Test();	
	}

	
}
         
         

运行结果是:
D:\>java Test
Test的静态代码块
A的无参构造方法!
Test的无参构造方法
  

怎么样!?你做对了吗??
我们再修改下代码,看这次你能否做对:
  
   class A
{
	public A(){
	  System.out.println("A的无参构造方法!");
	}
}

class B
{
	public B(){
	   System.out.println("B的无参构造方法!");
	}
}
class C
{
	public C(){
	   System.out.println("C的无参构造方法!");
	}
}
public class Test extends A
{
	static{
	  System.out.println("Test的静态代码块");
	}
	
	private static B b = new B();
	private C c = new C();
	public Test(){
	  System.out.println("Test的无参构造方法!");
	}
	public static void main(String args[]){
	Test test = new Test();
	
	}

	
}
   

执行结果是:
D:\>java Test
Test的静态代码块
B的无参构造方法!
A的无参构造方法!
C的无参构造方法!
Test的无参构造方法!


你做对了吗?细心的你应该已经发现第二次代码和第一次代码执行结果不同是因为在第一代码里我们只是声明了成员变量b,c而没有初始化。

    通过这个例子你是否明白了对象实例化时的执行顺序呢:
实例化静态成员变量执行静态代码块(实例化静态成员变量和执行静态代码块的顺序按代码编写顺序而定)-->实例化父类对象-->实例化非静态成员变量-->执行构造方法 
   欢迎大家修改补充!!! 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics