无法从静态上下文引用非静态方法

public class swaptest{
int a1,a2;
public swaptest(int i,int j){
a1=i;
a2=j;
}
public void swap(){
int b;
b=a1;
a1=a2;
a2=b;
System.out.print(a1);
System.out.print(" "+a2);
}
public static void main(String[] args)
{
swaptest a=new swaptest(2,3);
swaptest.swap();
}
}
我编程的时候总是会有这个问题,解决的办法好像都不一样的,有高手给总结总结么

只有静态的方法才能直接用“类名.方法名”调用,而非静态的方法只能用“对像引用.方法名”调用,或者是“new 类名().方法名”调用。
静态方法就是用static关键字修饰的方法,你可能应该知道。
而你写的swap()这个方法没有用static关键字修饰,所以不可以用“类名.方法名”调用,即“swaptest.swap()”是不正确的。您要不就把swaptest换成a,要不把swap()方法声明成静态的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-24
swaptest.swap();改成a.swap();,swaptest类是非静态的,swap方法也是非静态的,所以只能对其实例调用swap方法,例如a追问

能详细讲讲关于这个静态非静态变量的问题么,我好像老是这样

追答

static定义存储类别为静态,静态的方法不需要实例化就可调用,静态的类不能实例化,非静态的类必须实例化才能调用其非静态方法。

本回答被提问者采纳
相似回答