1.finlal是java语言中的一个关键字 2.final表示最终的,不可变的。
3.final可以修饰变量以及方法,还有类等。
4final修饰的类无法继承
5.final修饰的方法无法覆盖
public class finalTest {
/**
*final修饰的变量只能赋一次值(万变不离其宗)
* 引用是不是一个变量呢???是
* final修饰的引用:
* 该引用只能指向一个对象,并且他只能永远指向该对象
*/
public static void main(String[] args) {
/**
* 1.代码不管怎么变化,person也是一个变量
* 2.并且在该方法执行过程中,因为final修饰的对象指向了此对象,引用了此对象,
* 所以被final修饰的对象不会被垃圾回收器回收,直到当前方法结束,才会释放空间。
* 3.被修饰的对象
*/
final Person person = new Person(20);
System.out.println(person.age);
/*
如果给Person添加final关键字,将只能指向一个对象,所以这边会报错
person = new Person(30);
就是是赋值为空也不行
person = null;
*/
/**
* 虽然final修饰的对象A不能指向对象B,但是A对象内部数据可以随便改变
*/
person.age=140;
System.out.println(person.age);
}
static class Person{
int age;
/**
* 1、实例变量在堆中,一个对象一份,100个对象100份;
* 2、实例变量既然使用final修饰了,说明该实例变量值不会随着对象的变化而变化;
* 3、该实例变量前面应该添加static关键字,变为静态的,存储在方法区。
* 4、final修饰的实例变量,变量必须赋值默认值
* 5、常量一般都是公开的,公开安全性不会受到影响,且任何需要的地方都能调用。
*/
public static final int sex = 0;
public Person(int age){
this.age = age;
}
public int getSex() {
return sex;
}
}
}