楼上的没明白楼主的意思,我之前跟楼主有同样的疑惑。楼主是说,Test这个类的主方法是静态的,既然静态方法只能调用非静态成员,那T这个类的test()方法是非静态的,main方法为什么可以调用它。楼主可以想一下,如果是那样考虑的话,每个程序运行都得从main开始,那岂不是只要main方法需要用到别的类,那这个类的所有成员都得是静态的了?实际上,只是在main方法所在的类里的方法,才必须是静态,比如上面的代码写成这样就会报静态调用非静态错误了:
public class Demo2{
int a=1;
public static void main(String[] args)
{
test();
}
之所以main方法可以调用其他类的非静态方法,是因为你调用之前你肯定得先在main方法里创建一个那个类的对象,那那个类就被实例化了,也就是说要么调用与被调用两个方法都是静态,要么创建类的对象再用。所以上面的代码改成下面这种形式也不会出现错误:
public class Demo2{
int a=1;
public static void main(String[] args)
{
Demo2 d = new Demo2();//在本类内部创建本类自己的对象,加上这句就可以调用下面那个非静态方法test()了
test();
}