Java中对象实例化详解

所谓对象的实例化可以理解为对象的创建过程!对象的创建是通过调用构造器来完成的!例如

public class People{
	private String name;
	private int age;
	
	public People() {
		
	}
	
	public People(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public static void main(String[] args) {
		People person = new People("张三", 18);
		System.out.println("姓名:" + person.name + "\t" + "年龄:" + person.age);
	}
}

我定义了一个People类,里面有name,age两个属性!又写了两个构造器(注意:如果你在类中不写构造器,JVM会默认提供一个无参构造器,如第一个!如果你在类中指明了构造器,JVM不在提供无参构造器,一般都会自己写上)!此处调用第二个有参构造器创建了一个对象,内存图为:


person这个引用指向所创建的People类的对象!

再来看一个复杂点的例子:

public class InstanceDemo {
	public static void main(String[] args) {
		// 调用类SuperDe中的SuperDe()构造器创建对象
		SuperDe superDe = new SuperDe();
		// 调用类SubDe中的SubDe()构造器创建对象
		SubDe subDe = new SubDe();
		System.out.println("superDe.a:" + superDe.a);
		System.out.println(subDe.a + "," + subDe.b);
	}
}

class SuperDe {
	int a = 10;
	public SuperDe() {
		System.out.println("SuperDe():a=" + a);
		a = 20;
		System.out.println("SuperDe():a=" + a);
	}
}

class SubDe extends SuperDe {
	int b = 1;
	public SubDe() {
		// 此处隐含 super();调用父类的无参构造器
		System.out.println("SubDe():b=" + b);
		a = 30;
		b = 2;
	}
}

代码执行过程:

①加载SuperDe类,为属性(a)分配空间,属性初始化,执行无参构造器SuperDe(),输出a,给a赋值,再次输出a!创建引用superDe,使其指向所创建出的对象!

②加载SubDe类,执行相应的构造器SubDe(),子类构造器隐含调用父类构造器,所以再次执行SuperDe()构造器!执行完之后输出b,给SubDe类中的属性a,b赋值

如图:


总结:对象的实例化过程:

main方法中用类构造器创建对象,去类中查找相应的构造器,若此类为子类,则查看构造器中有没有指定父类构造器,若没有指定父类构造器,就默认调用父类的无参构造器,如父类无默认构造器,子类中的每个构造器必须指明调用父类哪个构造器!加载父类,按父类属性分配父类空间,父类属性初始化,执行相应的父类构造器,然后为子类分配属性空间,属性初始化,再执行子类的构造器!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值