Java final、finally、finalize区别

1.final

final是Java中的关键字,可以修饰属性、方法、类。

1.1.属性

对属性进行修饰时,如果是基本数据类型,这个数据的值不能发生变化,如果是引用类型,如对象,他们的引用地址不能发生变化,引用地址指向对象中的内容可以发生变化。在类中使用final关键字修饰属性,必须给它们初始化赋值,如果定义时没有赋值,需要在构造函数中赋值,不然编译不通过,因为对象创建完成后它们是不可变的,引用地址也是不可变的。

class TestFinal{
	//定义时直接赋值
	final int a =1;
	final String b="s";
	final Person p=new Person() ;
	TestFinal(){
	}
}
class TestFinal{
	//定义时没有赋值
	final int a ;
	final String b;
	int c;
	final Person p ;
//构造函数时必须赋值,不然编译报错
	TestFinal(){
		a=1;
		b="s";
		p=new Person();
	}
	TestFinal(int c){
//先调用无参构造函数,将没有赋值的final属性进行赋值,再操作其他属性,不然编译失败
		this();
		this.c = c;
	}
}

1.2.方法、类

final修饰后的方法,不能被子类覆写,private修饰方法默认是final的,也是不能被覆写。

修饰的类不能被继承

2.finally

finally是异常处理try-catch-finally中的一部分,在异常处理中它被设计成一定执行的,一些必须执行的代码,放在finally中

3.finalize

finalize 是object中的一个方法,是jvm在进行垃圾处理前,调用的一个方法。它可以让我们手动的清理一些gc无法处理的存储空间,这些分配的存储空间一般都是native方法调用非Java代码如c、c++进行分配的,和Java的分配不同,gc无法自主处理。我们一般变成中,是不需要进行实现finalize方法的,实现了,也确定什么时候执行。因为Java中对象的销毁,是jvm自主控制的,当它判定我们的内存不足时,才会调用gc销毁无用的对象.如果内存足够,gc可能一直不会执行,直到我们程序运行结束,将内存直接释放给系统。

1.对象可能不被垃圾回收     :

2.垃圾回收不等于析构     

3.垃圾回收至于内存有关 ,只有内存不够才会进行调用gc ,gc操作也占用内存的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值