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();
}

java 匿名内部类 赋值 返回 java匿名内部类final_主线程