目录
静态内部类,就是static修饰的内部类。
它是内部类中一个比较特殊的情况,Java文档中是这样描述静态内部类的:一旦内部类使用static修饰,那么此时这个内部类就升级为顶级类。
也就是说,除了写在一个类的内部以外,静态内部类具备所有外部类的特性。
静态内部类,又是嵌套类。
嵌套类的定义:如果一个类是静态的并定义在另一个类内部,那么它被称为嵌套类。
嵌套类与它的外部类相比,更像是一个独立的实体。它可以被当作一个顶层类来使用,只不过它的命名空间属于它的外部类。
public class Outer1 { private String name; private static int staticField = 20; // 在同一个包内调用,不需要public修饰 // 在不同包内调用,需要public修饰 public static class Inner { public void info(){ System.out.println("static Inner method"); System.out.println(staticField); } } }
public class InnerTest {
public static void main(String[] args) {
// 结果:
// static Inner method
// 20
testStaticInnerClass();
}
// 调用静态内部类
//
private static void testStaticInnerClass() {
// 实例化方式
Outer1.Inner inner = new Outer1.Inner();
inner.info();
}
}
如果使用?JAXB(Java Architecture for XML Binding,Java类与XML结构相互映射) ,在使用内部类的时候,需要使用静态内部类。
我的应用场景中,如果用了内部类,但没有使用静态内部类,在项目启动时,会出现下面的异常:
Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
……Rep$DeliveryData is a non-static inner class, and JAXB can't handle those.
? ? ? ? this problem is related to the following location:
我是程序员娟娟,
致力将工作中遇到的问题和解决方案记录下来,
分享给更多需要的同行。
如果对你有帮助,不妨点个关注吧!