Java中静态内部类

发布时间:2024年01月09日

目录

一、术语解释

二、代码实战

2.1 外部类、静态内部类

2.2 调用测试

三、注意事项


一、术语解释

静态内部类,就是static修饰的内部类

它是内部类中一个比较特殊的情况,Java文档中是这样描述静态内部类的:一旦内部类使用static修饰,那么此时这个内部类就升级为顶级类。

也就是说,除了写在一个类的内部以外,静态内部类具备所有外部类的特性。

静态内部类,又是嵌套类

嵌套类的定义:如果一个类是静态的并定义在另一个类内部,那么它被称为嵌套类。

嵌套类与它的外部类相比,更像是一个独立的实体。它可以被当作一个顶层类来使用,只不过它的命名空间属于它的外部类。

二、代码实战

2.1 外部类、静态内部类

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

    }

}

2.2 调用测试

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:


我是程序员娟娟,

致力将工作中遇到的问题和解决方案记录下来,

分享给更多需要的同行。

如果对你有帮助,不妨点个关注吧!

文章来源:https://blog.csdn.net/djj1015591892/article/details/135475555
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。