在java中创建内部类的对象时出现问题

在java中创建内部类的对象时出现问题,java,static,static-variables,inner-classes,Java,Static,Static Variables,Inner Classes,这是代码 public class Test { class InnerClass{ } public static void main(String[] args){ InnerClass ic = new InnerClass(); } } 上面写着错误信息 non-static variable this cannot be referenced from a static conte


这是代码

public class Test {
        class InnerClass{

               }

   public static void main(String[] args){
            InnerClass ic = new InnerClass();
        }
    }
上面写着错误信息

non-static variable this cannot be referenced from a static context
after creation of object ic.
有人能告诉我原因吗


谢谢

内部类
需要是
静态的
本身,即

public class Test {

   static class InnerClass{    
   }

   public static void main(String[] args){
      InnerClass ic = new InnerClass();
   }
}
如果
InnerClass
不是
static
,则只能在
Test
的父实例上下文中实例化它。对于这一点,巴洛克式的语法是:

public class Test {

   class InnerClass{    
   }

   public static void main(String[] args){
      Test test = new Test();
      InnerClass ic = test.new InnerClass();
   }
}

您的内部类依赖于
Test
类的实例。main是一个静态方法,因此不能创建
InnerClass
的实例

我认为您希望将内部类声明为
静态

class Test {
    static class InnerClass { }

    public static void main(String[] args){
        InnerClass ic = new InnerClass();
    }
}
有关嵌套类的详细信息:

简短解释 嵌套类主要有两种类型:“静态嵌套类”和“内部类”

静态嵌套类用于对两个类进行逻辑分组,并可用于增加封装。它们可以像任何其他类一样使用,并且除了可见性之外,它们对外部类字段没有任何特定的访问权限。它们可以在静态上下文中进行逻辑实例化

内部类(即非静态)绑定到外部类的特定实例。这意味着您必须有一个外部类的实例来实例化内部类。请看一下Skaffman的第二个代码块,以获得一个实例化示例。由于内部类绑定到外部类的实例,所以它们可以访问与此特定实例相关的每个字段

我希望所有这些现在都更清楚了。

首先,“嵌套”类是静态的,“内部”类不是

静态类在封闭类的所有实例之间共享(因此静态字段在所有实例之间共享),而每个实例都有自己的非静态内部类版本。

非静态内部类与封闭对象(而不是类)一起存储,只能通过实例访问。

请阅读此处。main是一个静态方法,它只能访问外部类的其他静态成员。但我还是不明白为什么。你能解释更多吗?@bunkdeath给出的链接应该足以理解原因,但我会更新一下我的答案@HerbalessSkaffman没有解释任何东西,他只是给出了工作代码。你也可以在一行中完成“InnerClass ic1=new Test().new InnerClass();”