Java学习笔记 -关键字final
1.final 是Java语言中的一个关键字
2.final表示最终的,不可变的
3.final修饰的类无法被继承
4.final修饰的方法无法被覆盖
5.final修饰的变量: 只能赋一次值
//final修饰类
final class A{
}
class B extends A{
}
//final修饰方法
class C{
public final void doSome(){
System.out.println("C doSome");
}
}
class D extends C{
public void doSome(){
System.out.println("D doSome");
}
}
public class Test{
public static void main(String[] args){
B b = new B();
D d = new D();
d.doSome();
//final 修饰局部变量
final int i;
i = 10;
final int j = 100;
j = 300;
}
}
6.对于引用,final修饰引用指向对象A后,不能再指向对象B,但是对象A内部的数据可以修改
7.final修饰实例变量必须手动赋值(手动赋值的含义:变量后赋值,构造方法赋值)
- 实例变量如果没有手动赋值的话,系统会赋默认值
- 且final修饰的变量: 只能赋一次值
- 所以final修饰的实例变量,系统不管赋默认值,要求程序员必须手动赋值
- 显然Java设计者不愿意背这个锅。
- 手动赋值:在语法上有直接写出、构造方法两种,但是都是在对象创建的时候赋值
class User{
//final修饰实例变量
//会报错,没有为age赋值
//final int age;
final double height = 1.8;
final double weight;
//在构造方法中为finalx修饰的实例变量赋值会报错吗?
public User(){
weight = 90;
}
}
复习:实例变量在对象创建的时候赋值。
所以无论是height还是weight都是在一个User对象创建的时候赋初值
8.final修饰实例变量,表示这个变量不会随着对象变化而变化,
所以结论:final修饰的实例变量,一般添加static声明为静态变量以节省内存
终极结论:static final联合声明的变量称为”常量“,常量名建议全部大写,每个单词之间采用下划线连接
class Chinese{
String id;
String name;
static final String COUNTRY = "中国";
}