Java报错‘non-static variable cannot be initialized from a static context’排查
解决"non-static variable cannot be initialized from a static context"错误
嘿,这个问题我太熟了!你遇到的错误根源在于非静态内部类和静态方法的访问规则:
你的Bee、Horse都是Testing类里的非静态内部类,这类内部类是依附于外部类的实例存在的——也就是说,它们的创建必须依赖一个已经初始化的Testing对象。而main方法是静态方法,属于Testing类本身,不属于任何具体的实例,所以在静态方法里直接new Bee()、new Horse(),Java会认为你没有提供必要的外部类实例,就抛出了这个错误。
下面给你两种可行的解决方案:
方案1:将内部类改为静态内部类
给Bee、Horse和holder接口加上static修饰符,让它们变成属于Testing类本身的静态成员,这样静态方法里就能直接创建它们的实例了:
public class Testing { public static void main(String[] args) { Bee a = new Bee(); Horse b = new Horse(); // Apple类你代码里未实现,此处忽略 } private static interface holder { public int getX(); } private static class Bee implements holder { int a = 52; public int getX() { return a; } } private static class Horse implements holder { int a = 62; public int getX() { return a; } } }
方案2:先创建外部类实例,再通过实例创建内部类对象
如果不想把内部类改成静态的,那就在main方法里先初始化一个Testing的实例,然后通过这个实例来创建内部类对象:
public class Testing { public static void main(String[] args) { Testing testInstance = new Testing(); Bee a = testInstance.new Bee(); Horse b = testInstance.new Horse(); // Apple类你代码里未实现,此处忽略 } private interface holder { public int getX(); } private class Bee implements holder { int a = 52; public int getX() { return a; } } private class Horse implements holder { int a = 62; public int getX() { return a; } } }
另外提一句,你代码里的Apple c= new Apple():末尾用了中文冒号,记得改成英文分号;,不然还会触发语法错误哦!
内容的提问来源于stack exchange,提问作者Zara suto
相关产品推荐
相关产品推荐

