为什么这个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
}
}