Java基础——对象的生命周期

在Java虚拟机的生命周期中,一个个对象被陆续地创建,又一个个被销毁。在对象生命周期的开始阶段,需要为对象分配内存,并且初始化它的实例变量。当程序不再使用某个对象时,它就会结束生命周期,它的内存可以被Java虚拟机的垃圾回收器回收。

创建对象的4种方法:

1.用new语句创建对象。

class RunoobTest {

	// 声明变量
	String name;
	int likes;

	public static void main(String[] args) {

		// 创建对象
		RunoobTest obj1 = new RunoobTest();

		// 初始化变量
		obj1.name = "Runoob";
		obj1.likes = 111;

		// 打印输出
		System.out.println(obj1.name); // Runoob
		System.out.println(obj1.likes); // 111

2.用反射手段,调用newInstance()实例方法。

public class Test { //类名test

	public int abc() {
		return 1;
	}


	public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {

		
		Test a = (Test) Class.forName("TEST.Test").newInstance(); //TEST是包名
		int value = a.abc();
		System.out.println("value=" + value);

	}
}

3.调用对象的clone()方法。

class RunoobTest implements Cloneable {

	public int abc() {
		return 1;
	}

	
	public static void main(String[] args) throws CloneNotSupportedException {

		// 创建对象obj1
		RunoobTest obj1 = new RunoobTest();

		System.out.println(obj1.abc());
		
		
		// 克隆对象obj1
		RunoobTest obj2 = (RunoobTest) obj1.clone();
		
		System.out.println(obj2.abc());


	}
}

4.运用反序列化手段,调用readObject()方法。

new语句和newInstance()方法创建对象时,都会执行类的构造方法,而对象的clone()方法创建对象时,不会执行类的构造方法。

垃圾回收

当对象被创建时,就会在Java虚拟机的堆区中拥有一块内存,在Java虚拟机的生命周期中,Java程序会陆续地创建无数个对象,加入所有的对象都永久的占有内存,那么内存有可能很快的被消耗光,最后一发内存空间不足的错误。因此必须采取以中措施来及时回收那些无用对象的内存,以保证内存可以被重复利用。

对象的可触及性

可触及状态:当一个对象被创建后,只要程序中还有引用变量引用它,那么它就始终属于可触及状态。

可复活状态:当程序不再有任何引用变量引用对象时,它就进入可复活状态。在这个状态中,垃圾回收器会准备释放它占用的内存,在释放之前,会调用它及其他处于可复活状态的对象的finalize()方法,这些finalize()方法可能使对象重新变成可触及状态。

不可触及状态:当执行完finalize()方法后,假如这些方法没有使对象变成可触及状态,那么就变成不可触及状态。只有当变成不可触及状态时,才会真正回收它占用的内存。

finalize()方法特点

1.是否执行,何时执行,都是不确定

2.finalize()方法可能使对象复活,变成可触及状态。

3.执行finalize()方法时如果出现异常,不会报告异常,程序继续正常运行。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值