编译错误提示:No enclosing instance of type demo1_1 is accessible. Must qualify the allocation with an enclosing instance of type demo1_1 (e.g. x.new A() where x is an instance of demo1_1).
注:demo1_1是我的类名
提示信息是,没有可访问的内部类demo1_1的实例,必须分配一个合适的内部类demo1_1的实例(如x.new A(),x必须是demo1_1的实例。)看着这句提示,其实我已经用new实例化了这个类,为什么还不行呢。
问题原因:原来我写的内部类Dog是动态的,也就是开头以public class开头。而主程序是public static class main。在Java中,类中的静态方法不能直接调用动态方法。只有将某个内部类修饰为静态类,然后才能够在静态类中调用该类的成员变量与成员方法。
解决办法:将public class改为public static class.
附上源程序并标注了错误处:希望对大家有用
package Demo1; import java.io.*;
public class demo1_1 {
public static void main(String[] args) throws Exception { Dog dogs[]=new Dog[4]; InputStreamReader isr=new InputStreamReader(System.in); BufferedReader br=new BufferedReader(isr); for(int i=0;i<4;i++) { dogs[i]=new Dog(); System.out.println("请输入第"+(i+1)+"只狗名:"); //从控制台读取狗名 String name=br.readLine();//异常…… //将名字赋给对象 dogs[i].setName(name); System.out.println("请输入第"+(i+1)+"只狗的体重"); String s_weight=br.readLine(); float weight=Float.parseFloat(s_weight);//String转float //将体重赋给对象 dogs[i].setWeight(weight); } //计算总体重 float allWeight=0; for(int i=0;i<4;i++) { allWeight+=dogs[i].getWeight(); } 计算平均体重 float avgWeight=allWeight/dogs.length; System.out.println("总体重:"+allWeight+"平均体重:"+avgWeight); } //定义一个狗类 public class Dog//问题所在;改为: public static class Dog 就可以了 { private String name; private float weight; public String getName() { return name; } public void setName(String name) { this.name = name; } public float getWeight() { return weight; } public void setWeight(float weight) { this.weight = weight; } } }
