代码:
public class OuterMyTest {
private static int a ;
private int b ;
public OuterMyTest(){
a += 1;
b += 1;
//System.out.println( "a = " + a + "; b = " + b );
}
public void getFun(){
System.out.println(b);
}
public static void main(String[] args) {
int c =1;
System.out.println(c);
OuterMyTest a1 = new OuterMyTest();
OuterMyTest a2 = new OuterMyTest();
System.out.println(a);
getFun();//报错
OuterMyTest.getFun();//报错
a1.getFun(); //通过
}
}
编译报错:Cannot make a static reference to the non-static method getFun() from the type OuterMyTest
改进:a1.getFun();
或者public static void getFun(){
System.out.println(b);
}
原因:
静态方法只能访问静态成员,因为非静态方法的调用要先创建对象,在调用静态方法时可能对象并没有被初始化。
OuterMyTest是一个类名,用类名只能调静态方法,getFun是非静态方法,所以要在对象上面调用,先要获取一个
OuterMyTest类的对象 OuterMyTest a1 = new OuterMyTest();然后再调用a1.getFun();
类的对象 OuterMyTest a1 = new OuterMyTest();然后再调用a1.getFun();