public class TestMethod {
int i1 = 0;
static int i2 = 0;
    public void test1(){
     i1 = 0;
     i2 = 0;
     System.out.println("no static");
    }
    public static void test2(){
     //i1 = 0;
     i2 = 0;
     System.out.println("static");}
public static void main(String[] args) {
TestMethod.test2();
TestMethod t=new TestMethod();
t.test1();
System.out.println(i1);
                System.out.println(i2);
}
}
为什么不能打印i1,加static了有什么用,
static有哪些作用
望高手详解

解决方案 »

  1.   

    staic是静态标识.
    看你结帖率0%,剩下的不想说了...
      

  2.   

    main是静态方法。怎么能访问在同一个类中的非静态字段?
      

  3.   

    加上static有什么用呢,就是你不用写TestMethod t=new TestMethod(); 就可以直接用TestMethod.test2()
      

  4.   

    public class TestMethod {
    int i1 = 0;
    static int i2 = 0;
        public void test1(){
        i1 = 0;
        i2 = 0;
        System.out.println("no static");
        }
        public static void test2(){
        //i1 = 0;
        i2 = 0;
        System.out.println("static");}
    public static void main(String[] args) {
    TestMethod.test2();
    TestMethod t=new TestMethod();
    t.test1();
    System.out.println(i1);   //此行,错误!原因:i1是非静态的,而你的马main是静态的,can not make a static reference to the non-static field i1
                    System.out.println(i2);
    }
      

  5.   

    can not make a static reference to the non-static field 
    简单的说 在静态域中不能引用非静态变量
      

  6.   

    t.test1();是实例成员,必须实例化类才能调用
    i1、i2即:TestMethod.i1,TestMethod.i2是静态成员(类成员),可以直接由类调用
    生命周期也不一样 非静态成员(包括属性或方法) 是每个对象独有1个。引用的方法为: 对象名.属性名  对象名.方法名
    静态可以理解为本类共享,引用静态属性或方法的方法是  类名.属性名  类名.属性名另外,静态方法中无法引用本类中的非静态成员。所以因为main方法是静态的,所以引用的本类属性也必须是静态的,如果去掉 static 当然会出错。
     
      

  7.   

    main()是静态的,i1是非静态的,静态方法不能调用非静态的东西。
      

  8.   

    静态方法里面不能使用非静态变量!
    加static是属于类的,不加是属于对象的!
    属于类的在类加载后就存在了!而不加static的属性是属于对象的!实例话出对象后才有!
    所以开始的静态方法里面找不到非静态的变量!
    所以不行!新手,说的不对大家批评指教!