java里面的匿名类
知识点1:
//匿名内部类是直接用接口名来写类
知识点2:
//匿名内部类的变量必须是final,在JDK1.8以后,你在变量定义前0不写final,但是你只给这个变量赋了一次值,系统会默认为final
//那么,为什么匿名内部类的变量必须是final?
//=>因为匿名内部类是一个子线程,然后main方法是主线程,
//=>那么有可能出现这种情况:主线程结束了,子线程还没结束,
//=>如果不声明为final,变量会随着主线程的结束而消失,当子线程(匿名内部类)要用到的变量的时候,发现没了,这个肯定是不可以的,
//=>所以,匿名内部类的变量必须声明为fianl
//注:匿名内部类是final的这个变量 指的是 :声明在匿名内部类外边的类,
//如果,变量声明在匿名内部类里面,则不必声明为final.
//(因为变量声明在匿名内部类的里面,则这个变量会与匿名内部类共存亡,就不会出现"当子线程(匿名内部类)要用到的变量的时候,发现没了"的情况.)
知识点3:
//调用匿名类里面的方法:直接直接在匿名类最后一个大括号用 .方法名()即可
xxx(//这里写自己创建的包名)
public class NiMing {
public static void main(String[] args) {
int a=10;//匿名内部类的变量必须是final,在JDK1.8以后,你在变量定义前0不写final,但是你只给这个变量赋了一次值,系统会默认为final
//那么,为什么匿名内部类的变量必须是final?
//=>因为匿名内部类是一个子线程,然后main方法是主线程,
//=>那么有可能出现这种情况:主线程结束了,子线程还没结束,
//=>如果不声明为final,变量会随着主线程的结束而消失,当子线程(匿名内部类)要用到的变量的时候,发现没了,这个肯定是不可以的,
//=>所以,匿名内部类的变量必须声明为fianl
//注:匿名内部类是final的这个变量 指的是 :声明在匿名内部类外边的类,
//如果,变量声明在匿名内部类里面,则不必声明为final.
//(因为变量声明在匿名内部类的里面,则这个变量会与匿名内部类共存亡,就不会出现"当子线程(匿名内部类)要用到的变量的时候,发现没了"的情况.)
new A() {//匿名内部类是直接用接口名来写类
int b =100;
public void test() {
System.out.println("a = "+a);
b = 21;//你看如果,变量声明在匿名内部类里面,则不必声明为final.
System.out.println("b = "+b);
}
}.test();//这就是一个匿名类,
//调用匿名类里面的方法:直接直接在匿名类最后一个大括号用 .方法名()即可
}
}
interface A {
public void test();
}