微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我们在内部类中可以有静态的final成员,却不能有静态的方法?

如何解决为什么我们在内部类中可以有静态的final成员,却不能有静态的方法?

您可以在静态“内部”类中使用静态方法

public class Outer {
    static String world() {
        return "world!";
    }
    static class Inner {
        static String helloWorld() {
            return "Hello " + Outer.world();
        }
    }   
    public static void main(String args[]) {
        System.out.println(Outer.Inner.helloWorld());
        // prints "Hello World!"
    }
}

但是,确切地说,Inner根据JLS术语(8.1.3 )被称为嵌套类:

内部类可以继承不是编译时常量的静态成员,即使它们未声明它们也是如此。根据Java编程语言的通常规则,不是内部类的嵌套类可以自由声明静态成员。

同样,内部类不能具有成员也不是完全正确static final。更精确地说,它们还必须是编译时常量。以下示例说明了区别:

public class InnerStaticFinal {
    class InnerWithConstant {
        static final int n = 0;
        // OKAY! Compile-time constant!
    }
    class InnerWithNotConstant {
        static final Integer n = 0;
        // DOESN'T COMPILE! Not a constant!
    }
}

在这种情况下允许使用编译时常量的原因很明显:它们在编译时内联。

解决方法

为什么我们可以在非静态内部类中具有静态的final成员,却不能具有静态方法?

我们可以在不实例化内部类的情况下访问外部类外部的内部类的静态最终成员变量吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。