我一直在研究java中的静态内部类。但我不清楚使用静态内部类或内部类的意义。
class A{
static class B{
}
public static void main(String[] args) {
B b=new B();
}
}
或
class B{}
class A{
public static void main(String[] args) {
B b=new B();
}
}
答案 0 :(得分:3)
非静态内部类具有对其封闭类的自动引用。静态内部类只与它的封闭类有关系,你必须通过封闭类的名称来引用它:EnclosingClass.StaticInnerClass
。
当你想引用父类的一些数据时,非静态内部类很好。
当你只想将内部类与封闭类相关联而不是为了骑行而拖动它时,静态内部类很好。
换句话说,非静态内部类可以防止封闭类被垃圾收集,因为它具有该引用,而静态内部类将永远不会这样做。
答案 1 :(得分:2)
存在技术差异:
class A {
private static int x = 42; //the answer
public static class B {
int showX() {
return x; // only static class can it
}
}
}
但这不是重点。如果类B
仅由类A
使用,那么将其设置为内部是很好的,因为一个包中的某些类可能希望具有相同名称的实用程序类。
答案 2 :(得分:0)
结果是一样的,但是如果B是A使用它的一个小类,那么把它放到A中会更有意义。
答案 3 :(得分:0)
当您的内部类被视为“对象”的一部分时,请使用内部类。 实际上,您可以从包装类访问private,package,protected和public字段。
“缺点”是:如果没有实例化包装类,内部类就不存在,这在逻辑上是由于第一句话。
否则,如果您考虑:
然后选择制作一个静态类。
此外,由于static
(意味着在任何对象的生命周期之外),嵌套类可以在不考虑其包装类/对象的情况下实例化。
答案 4 :(得分:0)
通过使嵌套类可以是静态的,您可以使用嵌套类而不需要外部类的实例。
嵌套类是其封闭类的成员。非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有。静态嵌套类无权访问封闭类的其他成员。 ...
注意:静态嵌套类与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样。实际上,静态嵌套类在行为上是一个顶级类,它已嵌套在另一个顶级类中以方便打包。
请参阅教程here