main()并不是直接调用x.prt(),而是通过abc的对象实例来调用。
"无法在static方法中调用non-static方法"是指无法在main中直接调用prt方法。“无法在static方法中调用non-static方法”是指:
public static void main(String args[]) {
prt();
}
的情形。
"无法在static方法中调用non-static方法"是指无法在main中直接调用prt方法。“无法在static方法中调用non-static方法”是指:
public static void main(String args[]) {
prt();
}
的情形。
public class abc
{
pvivate int i=100;
public static void main(String args[])
{
System.out.println(i);
}
}
那么,上面的代码就不会通过编译,但你可以在non-static函数中调用对象的变量或函数如
public class Test
{
pvivate int i=100;
public void print(){
System.out.println("Test class");
}
public static void main(String args[])
{
Test test=new Test();
System.out.println(test.i);
test.print();
}
}
public class abc
{
void prt()
{System.out.println("dsfsff");}
public static void main(String args[])
{
abc x = new abc();
x.prt(); //此处不是调用了非静态方法吗???
/*
此处是调用了非静态方法但是它是在static方法定义的对象x中的方法,
x是在main方法中定义的x的作用域仅在main方法之内,随main方法的结束
而释放,如果此处直接调用prt()方法则prt()方法不是在main中定义的它
作用域在main方法之外所以就会报无法在static方法中调用non-static方法。
*/
}
}
public class abc
{
void prt()
{System.out.println("dsfsff");} // 此处是非静态方法,在静态中不可以用非静态的东西,没错!!但是你往下看!
public static void main(String args[])
{
abc x = new abc();// 此处你在静态方法中声明了一个对象!此对象引址可是静态的!
x.prt(); //所以你用的东西是静态的,你并没错!!
}
}
如果你不声明一个静态的对象引址,你就得这样了,否则就错了!!看例子:
public class abc
{
static void prt() // 注意,你必须加上static,否则错!
{System.out.println("dsfsff");}
public static void main(String args[])
{
abc.prt(); // 可以了
}
}