嵌套静态类Java

问题描述 投票:0回答:1

我是Java的初学者。运行给定的问题时,我正在练习Java嵌套类。Oracle JDK 11.0.5

问题:-

[每当我尝试为以下代码运行编译器时,我都会遇到给定的错误。

public class test {

    public class Outer{
        static int out1;    

        public static void display1() {
            System.out.println("\n\nIn outer one!");
            System.out.println(out1);       
        }

        public static class Inner{
            static int ini;
            static String ins;
            static char inc;
            static float inf;

            static {
                ini = 2;
                ins = "Inner";
                inc = 'I';
                inf = 2.0f;
            }

            public static void display2() {
                System.out.println("In the inner class now!");
                System.out.println(ini);
                System.out.println(ins);
                System.out.println(inc);
                System.out.println(inf);
            }

        }
    }

    public static void main(String[] args) {

        Outer o1 = new Outer();
        o1.Inner.display2();
    }
}

Errors.jpeg

但是当我在第1行中添加static关键字以使其成为“ public static class Outer”并且没有其他更改时,代码开始正常工作。为什么?是因为静态成员无法访问非静态数据。请尽快提供帮助。

java class static nested main
1个回答
0
投票
public class test {
    public class Outer{
    }

    public static void main(String[] args) {
        Outer o1 = new Outer();

Outer需要引用test.this。您需要使用高度模糊​​的语法为构造函数提供对test实例的引用,希望您在实际代码中永远不会看到。

对于非静态内部类的静态成员有模糊的限制。这些细节太无聊了,难以记住。就在前几天,mooted对此有所放松,好像Java不允许您在该区域中进行足够愚蠢的事情一样。

        o1.Inner.display2();

由于Inner是静态嵌套类,因此ol不在此处用作实例。令人惊讶的是,它被用于其静态类型,并且可以由Outer代替。

我的建议是尽量避免嵌套/内部/局部类,并且绝对要避免任何可变的静态变量(即全局状态)。

© www.soinside.com 2019 - 2024. All rights reserved.