final关键字无非修饰两种变量,一是全局变量,当修饰全局变量的时候,作用域自然是全局,另一种是修饰局部变量,这里要注意,java中不同于c语言中,即时使用final修饰了局部变量,并没有改变该变量的作用域,当这个方法执行完毕之后,就会释放掉这个方法的帧内存。变量就被销毁了,堆里的对象等待gc回收。
第一种情况:作为全局常量来使用,定义的时候就要进行显示初始化,如果定义的时候不进行显示初始化,则必须在构造函数里进行初始化。
class Student {
String name;
int age;
final Teacher tc;
public void study(){
}
public Student(String name,int age){
tc = new Teacher();
}
public Student(){
this(null, 0);
}
}
class Teacher{
int num;
String name;
int age;
}
第二种情况,在函数中使用,
public void startThread(){
final Student stumain = new Student();
final Teacher teacher;
new Thread(new Runnable(){
@Override
public void run() {
stumain.study();
teacher = new Teacher();//这行代码是报错的
}
}).start();
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |