外部类:只能用public,default修饰符
内部类:可以用所有修饰符,此时内部类相当于外部类的一个成员变量
局部内部类:即方法中定义的类,只能用abstract,final,default修饰符,相当于一个局部变量。
代码示例:
public class Main { int MainInt; public static void main(String[] args) { int localInnerInt=0; //局部内部类,与局部变量localInnerInt地位相同 final class FinalLocalInnerClass{ } } //内部类,与成员变量MainInt地位相同 private class PrivateInnerClass{ } }
2.成员变量,局部变量
成员变量有初始值。局部变量没有初始值。
代码示例:
public class Main { //MainInt无须赋值,其初始值为0 int MainInt; public static void main(String[] args) { int localInt=0; //localInt必须赋值,否则代码会无法通过编译 System.out.println(localInt); } }
3.赋值语句也有返回值,详见代码
public static void main(String[] args) { boolean flag=false; if(flag=true){ System.out.println("true"); } else{ System.out.println("false"); } }
猜猜看,代码输出什么结果。编译错误,因为if里面不允许赋值语句?
答案是输出 true。
因为JAVA的赋值语句也有返回值,且其返回值为所赋的值。
我们把true值赋给了flag,所以flag=true也将返回一个boolean类型的值。
4.ThreadLocal
通过线程所持有的ThreadLocalMap类为每个线程提供一个独立的变量副本,解决变量并发访问的冲突问题。
以空间换时间来保证线程安全。