Java 为什么我不能以代码中提到的方式为内部类声明对象?

Java 为什么我不能以代码中提到的方式为内部类声明对象?,java,class,nested,Java,Class,Nested,这段代码工作正常。但是,当我试图更改内部类对象的位置时,代码不起作用 class Outer { int outer_x = 100; void test() { for(int i=0; i<10; i++) { class Inner { void display() { System.out.println("display: outer_x = " +

这段代码工作正常。但是,当我试图更改内部类对象的位置时,代码不起作用

class Outer {
    int outer_x = 100;

    void test() {
        for(int i=0; i<10; i++) {
            class Inner {
                void display() {
                    System.out.println("display: outer_x = " + outer_x);
                }
            }

            //when i create oject for Inner class here code is working
            Inner inner = new Inner();
            inner.display();
        }
    }
}

class InnerClassDemo {
    public static void main(String args[]) {
        Outer outer = new Outer();
        outer.test();
    }
}
类外部{
int-outer_x=100;
无效测试(){

对于(int i=0;i,在第二个示例中,在使用
internal
类之后定义它。在执行
new internal()
时,它还不可用


无论如何,我认为在for循环中创建(命名的)类是不好的做法,比如这样(甚至在方法中)。匿名类通常很好。当你需要一个命名类时,你通常想在类的范围内或在它自己的文件中定义它。

这样理解吧……假设你想要新的外观酷炫、时尚的IPhone 7,那么你去商店看到你的IPhone仍在从卡车上卸下。所以你进去了柜台上的那个老人说你想要IPhone 7,但那个人对你说:“对不起,先生,我们没有存货了。”,因为那个人不知道它仍在被卸载。这里也发生了同样的事情,你知道你的代码中有内部类,但编译器不知道它。因此它会抛出错误。

如果你要求人们尝试并阅读它,请一致地缩进你的代码。@t.J.Crowder实际上你可以。第一个例子编译得很好。问题是在第二个示例中,类是在使用后定义的。@marstran:Wow.和…Wow.此外:Wow.@T.J.Crowder当我发现时,我也很惊讶:)谢谢@marstran。谢谢你缩进代码。我是新来的。我如何缩进代码?如果你使用IDE,你通常可以使用一些热键来自动完成(Eclipse中的ctrl-shift-F,或IntelliJ中的ctrl-alt-L)。如果你不这样做,你只需要使用空格键/制表符手动完成:)
class Outer {
    int outer_x = 100;

    void test() {
        for(int i=0; i<10; i++) {
            //now i created object for inner class here
            Inner inner = new Inner();
            inner.display();

            class Inner {
                void display() {
                    System.out.println("display: outer_x = " + outer_x);
                }
            }
        }
    }
}

class InnerClassDemo {
    public static void main(String args[]) {
        Outer outer = new Outer();
        outer.test();
    }
}