public class Test{
static int a;
int b;
public static void main(String[]args){
Test.a=10;
Test ob1=new Test();
Test ob2=new Test();
System.out.println(ob1.a);
ob1.a=20;
System.out.println(ob2.a);
ob2.a=30;
System.out.println(Test.a);
}

我是刚开始学习JAVA 啊,谁能帮我说说 为什么输出结果 会 是10,20,30 呢,这三个数是竖着排列的,我不懂啊?

解决方案 »

  1.   

    a是静态的,在内存中只有一份,a属于类,a被Test类所有的对象共享
      

  2.   

    谁能帮我说说 为什么输出结果 会 是10,20,30 呢?
    因为这句
    static int a; 
    他不属于类的变量,静态的(楼主可以去看看static的用法)
    所有类共享的
    给你举个简单的例子吧public class testStatic { public static void main(String[] args) {
    System.out.println(test.a); //实例化前
                     test  t = new test();    //实例化
                    System.out.println(t.a);  //实例化后
    }}
    class test {
    static int a = 10;
    }System.out.println(test.a); //实例化前
     test  t = new test();    //实例化
     System.out.println(t.a);  //实例化后
    体会这三句代码
    System.out.println(ob1.a);  是换行
    System.out.print(ob1.a);是不换行,楼主可以试下
    ----------------------------------華麗的個性簽名----------------------------------------
    500人的编程群期待大家的加入,一起交流探讨软件开发
    群名:程序人生大联盟主群
    群号:49282233 
      

  3.   

    因为a是static类型的,所以Test可以直接调用属性a,当然也可以产生对象ob1,ob2后再用其调用属性a,至于三个值换行打印嘛,是因为用了println()
      

  4.   

    因为a是static类型的,所以Test可以直接调用属性a,当然也可以产生对象ob1,ob2后再用其调用属性a,至于三个值换行打印嘛,是因为用了println(),打印后换行。
      

  5.   

    你们说的我都明白,可就是不知道为什么先输出的是10,而最后输出的是30呢,不是先输出的是ob1.a吗?我感觉应该是20,10,30啊,这三个数是竖着排列的这个我知道.
      

  6.   

    这个最后的结果是
    10
    20
    30
    因为  你的a是用static修饰的,所以一开始你可以用Test.a=10,所以a的值变为了10,然后呢  你实例化了一个ob1 调用a  此时a的值仍未10,随后ob1.a=20,此时  你将a的值变为了 20  然后呢用实例化的ob2 调用 a   所以输出的值是20   接着ob2.a=30  将a的值变为了30  你用类直接调用a的值,无所谓了,输出的值当然是30了!