在Java中,嵌套类可以是也可以static不是.如果是static,则它们不包含对包含实例的指针的引用(它们也不再被称为内部类,它们被称为嵌套类).
忘记在static不需要该引用时创建嵌套类会导致垃圾收集或转义分析出现问题.
是否有可能创建一个匿名的内部类static?或者编译器是否自动解决这个问题(它可以,因为不能有任何子类)?
例如,如果我创建一个匿名比较器,我几乎不需要对外部的引用:
Collections.sort(list, new Comparator<String>(){
int compare(String a, String b){
return a.toUpperCase().compareTo(b.toUpperCase());
}
}
Run Code Online (Sandbox Code Playgroud) 我从小就知道这final是一个关键字,当应用于变量时,不能将变量重新分配给其他东西."如果一个变量是最终的那么它就是一个常数"总结了许多,虽然我不是那个定义的粉丝,但它可能是一个很好的方法来记住这个概念.我只想说you cannot change the value of the variable(无论"价值"意味着什么).
我的生活很幸福,但有一天我深入了解method local inner classes......
方法内定义的内部类不能访问方法本身定义的变量.为什么?因为当类存在于Heap中并且它可能在方法完成后保持存在(类的有效引用可能被传递并存储在其他地方),这些变量存在于堆栈中并且在方法返回时它们会死亡.我们不希望内部类在以后尝试访问不再存在的变量,因为那时世界将会结束.
完善.这说得通.优秀!然后:除非你声明那些变量最终.....然后你的类可以访问它们,编译器不会把你送到地狱......
WHY???我的意思是,这是什么样的巫术?最终究竟做了什么以及为什么我不得不等待谈论方法本地内部类来解决这个问题?假设最终变量存储在堆中,无论它们在何处定义,除了使方法本地内部类快乐的概念之外,还有其他任何应用吗?