对象的创建过程

package com.qhf.day012;

public class ObjectCreateProcess02 {
	public static void main(String[] args) {
		new B();
		System.out.println("-----");
		new B();
	}
}

class A{
	A(){
		System.out.println("A构造");//8,构造方法和成员变量先后
	}
	int a1 = 1;//7,new了对象后执行分配成员变量的内存空间
	
	//2.静态代码块,3.静态变量赋值和静态代码块先后取决于代码先后
	static {
		int aa = 9;//静态代码块执行完就消失
		System.out.println("A的静态代码块"+aa);
	}
	static int a2 = 2;//1,分配父类静态变量空间,还没赋值。
}

class B extends A{
	int b1 = 1;
	static int b2 = 2;//4
	static {
		System.out.println("B的静态代码块");//5,6
	}
	B(){
		System.out.println("B构造");
	}
}

class C {
	int c = 10;//成员变量可以定义在含此变量名的构造代码块前面
	{
		int c = 9;
		System.out.println("构造代码块。。" + c);
	}
	
	public C() {
		System.out.println("C构造方法。。");
		
		//int c1 = 1;//c1变量定义在含声明c1局部代码块前面,报错
		{
			System.out.println("局部代码块。。");
			int c1 = 2;
		}
		int c1 = 3;
	}
}

对于C 类,单独运行发现:

声明成员变量和含声明同名变量的构造代码块执行顺序,new 了类之后先声明成员变量,为成员变量分配空间,然后对成员变量的赋值取决于它与构造代码块的先后顺序。而且构造代码块中也可以声明c变量,这个很神奇。

对于局部代码块来说,执行顺序就是代码的顺序,所以与构造代码块不同,变量声明不能写在含声明同名变量的局部代码前面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值