final
final修饰变量(成员变量或局部变量):
全局变量。必须初始化,且一旦赋值不能更改。
局部变量。可以只声明不赋值,但是使用之前必须赋值,且一旦赋值不能更改。
final修饰方法:
方法不能被重写。
final修饰类:
该类不能被继承。
final修饰基本数据类型和引用的区别:
引用数据类型还是可以改变的!final修饰基本数据类型时,不能重新赋值,因此基本类型不能被改变。但是引用类型而言,它仅仅是一个引用,final只能保证这个引用变量所引用的地址不会改变,即一直指向这个对象,但是这个对象的内容完全可以改变。
public class Test { static final Dog dog=new Dog("大黄"); public static void main(String[] args) { System.out.println(a); System.out.println(b); dog.bark(); dog.name="小黑"; dog.bark(); } }
大黄在汪汪汪~ 小黑在汪汪汪~
常量池
尤其注意:
String s1="Hello";
String s7="H";
String s8="ello";
String s9=s7+s8;
System.out.println(s1==s9);
false
宏变量
对于一个final变量来说,不管它是类变量、实例变量,还是局部变量。只要该变量满足三个条件,这个final变量就不再是一个变量,而是相当于一个直接量。
1.使用final修饰符
2.在定义该final变量时指定了初始值
3.该初始值可以在编译时被确定下来