TestStatic ts = new TestStatic();
ts.test();摆脱,你是new一个对象来调用test()方法,你自己看看一样吗?
如果你直接在main的方法调用test(),意义完全不同了
public static void main(String[] args) {
test();  //出错
TestStatic.testStatic();
TestStatic ts = new TestStatic();
ts.test();
}
}

解决方案 »

  1.   

    new过后就是一个实例了,当然可以调用实例中的public方法。这和static无关。
      

  2.   

    哦,那是不是"static方法不能访问非static的方法和变量"这句话有点问题啊?
      

  3.   

    两种都是访问,只是方式不同而已,应该就是"static方法不能访问非static的方法和变量"这句话表达的有问题了吧?
      

  4.   

    没问题,是你理解的有问题public class TestStatic {
    public int a;
    public static int sa; 
    public static void testStatic(){
    System.out.println("static method");
    System.out.println(++sa); 

    public void test(){ 
    System.out.println(++a);
    System.out.println(++sa);

    public static void main(String[] args) {
    TestStatic.testStatic(); 
    TestStatic ts = new TestStatic();
    ts.test(); // OK
    test(); //NG
    }
    }
      

  5.   

    知道了,应该是“static方法不能直接访问非static的方法和变量,要想访问必须用对象名.调用
    ”,谢谢各位了