新人的一个小题求大牛给解释一下,谢谢了
class Dome0
{
int a;
void setA(int a)
{
this.a=a;
}
int getA()
{
return a;
}
public static void main(String[] args)
{
Dome0 ob=new Dome0();
ob.setA(1000);
System.out.println(ob.a);
System.out.println(ob.getA());
}
}
setA()和getA()方法都是非静态的方法 而main方法是静态的为什么可以调用非静态方法?
------解决方案--------------------因为main()方法是程序的入口点。
------解决方案--------------------那些方法是属于某个类的,而类已经实例化微对象了,而且这个对象在这个函数中,所以可以直接访问了
------解决方案--------------------Dome0 ob=new Dome0();
已经创建了一个ob实例,你是调用实例ob的get,set方法的。
------解决方案--------------------main中调用的是dome实例的方法,而不是dome类的方法(实际上demo类的静态方法才可以用类来调用),你new出来的是一个实例。
------解决方案--------------------你是Dome0 ob=new Dome0();new了一个对象,当然可以调用,你又不是直接的调用setA(1000);
------解决方案--------------------因为你已经创建了一个该类的对象ob。
在静态方法中通过对象是可以调用非静态方法的。
如果去掉对象,就会出错。
------解决方案-------------------- 因为你在main方法中创建了该类的对象。调用类的方法就是通过对象来调用的。
如果没不创建类的对象,静态方法就会要找到对应的类。当是因为非静态的方法不能通过类名直接调用。必须要创建对象。所以静态方法调用非静态方法必须在静态方法中声明对象。
------解决方案--------------------
------解决方案--------------------main()函数是整个程序的路口。你在main里面创建了类的对象。当然可以用对象名.方法名
------解决方案--------------------static 不能 调用non-static方法的意思是
public static void main(String[] args) {
Dome0 ob=new Dome0();
ob.setA(1000); // 正确
setA(1); // 错误
}
这就好比main是gov,他说,“要加工资”
这就是一句病句,应当说“给某某加工资”——对不起,伟大光荣正确是不会错的
但是如果说“提高最低工资”,那就不需要前面加上对象。