| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1498 人关注过本帖
标题:以下程序执行后,为什么t2调用i的值得到3呢?哪位高手能详解以下吗?感激不 ...
取消只看楼主 加入收藏
notbad301
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2018-2-17
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
以下程序执行后,为什么t2调用i的值得到3呢?哪位高手能详解以下吗?感激不尽!!
public class Transfer {
    static int i=47;
     public void call() {
         for (i=0;i<3;i++) {
             System.out.print(i+" ");
             if(i==2) {
                 System.out.println("\n");
             }
         }
         
         
     }
     public Transfer() {
     }
     
    public static void main(String[] args) {
        Transfer t1=new Transfer();
        Transfer t2=new Transfer();
        System.out.println(t1.i);
        t1.call();
        System.out.println(t2.i);
        t2.call();

    }

}
搜索更多相关主题的帖子: 执行 public Transfer System out 
2018-02-26 21:56
notbad301
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2018-2-17
收藏
得分:0 

如果去掉static后,t2调用i的值就变成47了,那么这个static起到的作用是什么呢?

public class Transfer {
    int i=47;
     public void call() {
         for (i=0;i<3;i++) {
             System.out.print(i+" ");
             if(i==2) {
                 System.out.println("\n");
             }
         }
         
         
     }
     public Transfer() {
     }
     
    public static void main(String[] args) {
        Transfer t1=new Transfer();
        Transfer t2=new Transfer();
        System.out.println(t1.i);
        t1.call();
        System.out.println(t2.i);
        t2.call();

    }

}
2018-02-26 22:49
notbad301
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2018-2-17
收藏
得分:0 
这样变了一下,将输出t2时的命令,改为了:System.out.println(t2.i=80);

整个命令为:


public class Transfer {
    static int i=47;
     public void call() {
         for (i=0;i<3;i++) {
             System.out.print(i+" ");
             if(i==2) {
                 System.out.println("\n");
             }
         }
         
         
     }
     public Transfer() {}
     
    public static void main(String[] args) {
        Transfer t1=new Transfer();
        Transfer t2=new Transfer();
        System.out.println(t1.i);
                t1.call();
                System.out.println(t2.i=80);
                t2.call();

            }

}

得到t2就不是3,而是80了。哪怕是执行t1.call()最后一步将3赋值给i,只要有static存在,到t2调用i的时候,还是可以改变i的值赋给t2(即80)。 这个static是否可以理解为存在时允许对象改变成员变量的值?如没有static,即便在建立某个对象时改变了成员变量的值,在建立下一个对象时,还是能够使用这个成员变量的初始值。
2018-02-26 23:20
notbad301
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2018-2-17
收藏
得分:0 
谢谢您的详细解答!
2018-02-26 23:48
快速回复:以下程序执行后,为什么t2调用i的值得到3呢?哪位高手能详解以下吗?感 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016200 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved