Java中final、finally和finalize三者的用法及区别

final的用法

final意为最终的、不可更改的。final是定义Java中类、方法以及变量修饰符的关键字,它有以下使用场景。

  1. 修饰变量
    由于final的不可变特性,所以当final定义变量时,需要赋予初始值,定义完成后这个变量就相当于常量,所以开发时我们一般用它来定义常量,比如π。
  2. 修饰属性
  • 属性是全局变量,存储在堆内存中对象空间内的一个小空间里,虽然一般来说,堆内存的变量如果不赋值的话,会有一个默认值,但是由于final的不可变特性,如果不赋值的话理论上他会将默认值作为自己的值,并且固定不变这对于我们来说是毫无意义的,但其实如果final修饰的属性不赋值,他编译时就会报错。
  • final修饰属性的时候,属性还有一个数据类型,如果属性的数据类型是基本数据类型,那么final修饰后属性值不会发生改变;如果属性的数据类型是引用数据类型,那么final修饰后属性所引用的对象地址不能改变,但是这个对象里面的变化就不归final管了。(针对这一点使用以下代码举例)
public class Person{
	public final char[] name = {'I','T','小','白'}//利用引用类型的char数组来存放名字
	public final int age = 18;//利用基本数据类型的int存放年龄

	public static void main(String[] args){
		Person person = new Person();
		System.out.println("名字是:"+"person.name"+"年龄是:"+"person.age");
		//这时改变name数组中的值
	}
}
  1. 修饰方法
    由于final不可变特性,由final修饰的方法不可以被子类重写。
  2. 修饰类
    当final修饰类本身的时候,很不幸o(╥﹏╥)o,这个类绝后了,成了一个太监类,专业术语叫无法被子类继承,也就没有子类。
    而我们通常常见的“太监类”多数为工具类,例如:Math、Scanner、Integer、String等

finally的用法

finally的出场要伴随着try和catch,finally是他们的一个可有可无的分支来先看一下这个结构,如下:

	try {
		Thread.sleep(200);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}finally{
		System.out.println("或许我可有可无,但是一旦存在就必须执行!");
	}

finalize的用法

finalize()是Object的一个方法,作用在对象被GC回收时,默认调用执行的方法。

protected void finalize() throws Throwable { }

三者的区别

综上所述,三者很容易区分,首先final这个关键字使我们最经常接触的,所以他的用法在上面要好好记住,其次finally是跟try/catch相关的,记的时候跟他们联系起来就好了,最后finalize是Object类的一个方法,把它和GC垃圾回收机制联系起来就好了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值