final,finally,finalize的区别?
final:
定义:表示最终的,最后的,意味着就是不可改变的,一旦获取了初始值就不能被改变,就是不能被重新赋值。
使用方法:可用于修饰变量、方法、类。
1.修饰变量时:
(1)成员变量需要在初始化块或者构造器中或者声明变量时对final修饰的变量进行赋值;
(2)修饰类变量(用static修饰的成员变量为类变量),需要在静态初始化块中或者声明变量时对其初始化;
2.方法:final修饰的方法,子类不能进行重写;
3.类:final修饰的类不能被继承,因为继承的时候。
import test.TestHashCode.Person;
public class TestFinal {
final String a = "wd";//成员变量
final String b; //成员变量
final static int c; //类变量
final char d;
final Person person;
//构造方法
public TestFinal() {
b = "sdw";
//对final引用类型变量赋值
person = new Person(20);
}
//静态初始化块
static {
c= 9;
}
//初始化块
{
d = 'd';
}
public final void fianlStaticTest() {
final String e;
e = "sdw";
}
public void name() {
}
private final void test() {
}
public static void main(String[] args) {
TestFinal testFinal = new TestFinal();
//对final引用类型变量中的属性赋值,看看会不会改变person
testFinal.person.age = 100;
System.out.println(testFinal.a);
System.out.println(testFinal.b);
System.out.println(TestFinal.c);
System.out.println(testFinal.d);
//非法赋值,因为person是final修饰的,不能被重新赋值
// testFinal.person = null;
System.out.println(testFinal.person.age); //结果:100
}
}
class subClass extends TestFinal{
//final修饰的父类,子类不能重写
// public void fianlStaticTest() {
//
// }
//父类虽然已经用final修饰,但是他是private的,所以相当于是子类的的一个新方法
public void test() {
}
@Override
public void name() {
// TODO Auto-generated method stub
super.name();
}
}
finally:
finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),经常被用在需要释放资源的情况下。
finalize: