final finally finalize的区别

final

修饰类

表示类不可被继承

修饰方法

表示方法不可被子类覆盖,但可以重载

修饰变量

表示变量一旦被赋值就不可以更改它的值

修饰成员变量

成员变量:是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
如果final修饰的是成员变量 可以在非静态初始化块声明该变量、声明时赋值或者在构造器中执行初始值
类变量:也声明在类中,方法体之外,但必须声明为static类型。
如果final修饰的是类变量 只能在静态初始化块指定初始值 或者 声明该类变量时指定初始值
如下图:

	final static int a = 0;//再声明的时候就需要赋值 或者静态代码块赋值
	/**
	static{
		a = 0;
	}
	*/
	final int b = 0;//再声明的时候就需要赋值 或者代码块中赋值 或者构造器赋值
	/*{
		b = 0;
	}*/

修饰局部变量

系统不会为局部变量进⾏初始化,局部变量必须由程序员显示初始化。因此使⽤final修饰局部变量时,
即可以在定义时指定默认值(后⾯的代码不能对变量再赋值),也可以不指定默认值,⽽在后⾯的代码中对final变量赋初值(仅⼀次)

public class FinalVar {

	public static void main(String[] args) {
		final int localA; //局部变量只声明没有初始化,不会报错,与final⽆关。
		localA = 0;//在使⽤之前⼀定要赋值
		//localA = 1; 但是不允许第⼆次赋值
	}
}

修饰基本类型和引用数据类型

如果是基本数据类型的变量,则其数值⼀旦在初始化之后便不能更改;
如果是引⽤类型的变量,则在对其初始化之后便不能再让其指向另⼀个对象。但是引⽤的值是可变
的。

public class FinalReferenceTest{
	public static void main(){
		final int[] iArr={1,2,3,4};
		iArr[2]=-3;//合法
		iArr=null;//⾮法,对iArr不能重新赋值
		
		final Person p = new Person(25);
		p.setAge(24);//合法
		p=null;//⾮法
	}
}

finally

就是try catch finally 中 finally修饰的一定会被执行 无论有没有异常

finalize

finalize是java.lang.Object中的方法,也就是每一个对象都有这个方法,一个对象的finalize方法只会调用一次,调用了不一定被回收,因为只有对象被回收的时候才会被回收,就会导致前面调用,后面回收的时候出现问题,不推荐使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值