为什么这个java代码显示;非静态变量不能从静态上下文引用此变量;错误?

为什么这个java代码显示;非静态变量不能从静态上下文引用此变量;错误?,java,compiler-errors,non-static,Java,Compiler Errors,Non Static,不管我怎么做,我都有这个问题。我尽力了。 声明State类的对象时,它显示了一个错误“非静态变量不能从静态上下文引用”,尽管我没有得到指定的异常,但它显示了(在eclipse中) 无法访问TTT2类型的封闭实例。必须符合以下条件: 使用TTT2类型的封闭实例进行分配(例如x.new A() 其中x是TTT2的实例) 及 这是创建内部类对象的正确方法。尽管我没有得到指定的异常,但它显示了(在eclipse中) 无法访问TTT2类型的封闭实例。必须符合以下条件: 使用TTT2类型的封闭实例进行分配(

不管我怎么做,我都有这个问题。我尽力了。
声明State类的对象时,它显示了一个错误“非静态变量不能从静态上下文引用”

,尽管我没有得到指定的异常,但它显示了(在eclipse中)

无法访问TTT2类型的封闭实例。必须符合以下条件: 使用TTT2类型的封闭实例进行分配(例如x.new A() 其中x是TTT2的实例)


这是创建内部类对象的正确方法。

尽管我没有得到指定的异常,但它显示了(在eclipse中)

无法访问TTT2类型的封闭实例。必须符合以下条件: 使用TTT2类型的封闭实例进行分配(例如x.new A() 其中x是TTT2的实例)


这是创建innerclass对象创建的正确方法。

没有
状态
类的封闭实例。创建
TTT2的外部实例
或将
状态
声明为
静态

State s=new TTT2().new State(); 

没有
状态
类的封闭实例。创建
TTT2的外部实例
或将
状态
声明为
静态

State s=new TTT2().new State(); 

声明您的状态类为

State state = new TTT2().new State();
你应该被安排好。这是因为没有static修饰符的State类只能通过holding类的实例访问,因此,静态方法不应该能够访问它,因为它不知道要使用哪个实例


使State为static允许它在没有外部类实例的情况下实例化。

将您的State类声明为

State state = new TTT2().new State();
你应该被安排好。这是因为没有static修饰符的State类只能通过holding类的实例访问,因此,静态方法不应该能够访问它,因为它不知道要使用哪个实例


使State为static允许它在没有外部类实例的情况下实例化。

因为
State
TTT2
的嵌套类,对于每个
TTT2
对象,您都会得到一个
State
对象,因此在静态上下文中使用时,您应该将
State
声明为
public static class State
,或者使用
new TT2().new State()实例化它

由于
State
TTT2
的嵌套类,因此每个
TTT2
对象都有一个
State
对象-因此在静态上下文中使用或使用
new TT2().new State()实例化时,您应该将
State
声明为
公共静态类状态

这是因为非静态内部类需要实例化封闭类的实例,而您正试图从静态上下文执行此操作:

public static class State {
    // ...
}
另一种方法是实例化一个新的
TTT2
用作封闭实例,缺点是您已经创建了一个
TTT2
,您可能不会用于其他任何东西(至少在您的示例中):

公共类TTT2{

公共类状态{//这是因为非静态内部类需要实例化封闭类的实例,而您正试图从静态上下文执行此操作:

public static class State {
    // ...
}
另一种方法是实例化一个新的
TTT2
用作封闭实例,缺点是您已经创建了一个
TTT2
,您可能不会用于其他任何东西(至少在您的示例中):

公共类TTT2{

公共阶级国家{//Thanx为解决方案。它很有帮助。@laxmikantevdikar如果你发现这个答案最有帮助,不要忘记接受它。Thanx为解决方案。它很有帮助。@laxmikantevdikar如果你发现这个答案最有帮助,不要忘记接受它。我已经搜索了它的答案,但没有得到…这就是为什么要问它。@laxmikantevdikar卡尔:不用担心。复制状态不是批评。你的特定问题可能很难找到,因为它被无关的原因所掩盖。标记为复制是为了帮助你(你现在可以看到更多的答案)、其他读者(现在可以找到原件)和原件的答复者(他的答案值得称赞)。这也有助于降低网站上的噪音。我已经搜索了它的答案,但没有得到…这就是为什么要问的原因。@LaxmikantRevdikar不用担心。重复状态不是批评。你的特定问题可能很难搜索,因为它被无关的原因所掩盖。标记为重复是为了帮助你(你现在可以看到更多的答案)、其他读者(现在可以找到原文)和原文的回答者(他的答案值得称赞)。这也有助于降低网站上的噪音。
public class TTT2 {
    public class State{ // <- non-static
    }
    public static void main(String[] args) {
        State s=new TTT2().new State(); // <- no problem
    }
}