码迷,mamicode.com
首页 > 其他好文 > 详细

访问对象属性和方法

时间:2016-12-02 21:42:12      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:images   产生   静态成员   变量   new   call   alt   bsp   调用   

例1:

 1 public class Test {
 2   int i = 47;
 3   public void call(){
 4     for (i = 0; i < 3; i++){
 5         System.out.print(i+" ");
 6           if(i == 2){
 7             System.out.println("\n");
 8             }
 9         }
10    }
11     public Test(){
12     }
13     public static void main(String[] args) {
14        Test t1 = new Test();
15        Test t2 = new Test();
16        t2.i = 60;
17        System.out.println(+t1.i);
18        t1.call();
19        System.out.println(+t2.i);
20        t2.call();
21     }
22 
23 }

运行结果:

47
0 1 2

60
0 1 2

分析:

      在上述代码的主方法中首先实例化一个对象,然后使用“.”操作符调用成员变量和成员方法,但是从运行结果可以看到,虽然使用两个对象调用同一个成员变量,结果却不同,因为在打印这个成员变量值之前将该值重新赋值为60,单在赋值使用时的是第二个对象t2对象调用成员变量,所以在第一个对象t1调用成员变量打印该值时仍然是成员变量的初始值。由此可见,两个对象的产生是相互独立的,改变了t2的值,不会影响到t1的 i 的值。在内存中如下图所示:

技术分享

如果希望成员变量不被其中任何一个对象改变,可以使用static关键字,代码如下:

 1 public class Test {
 2   static int i = 47;
 3   public void call(){
 4     for (i = 0; i < 3; i++){
 5         System.out.print(i+" ");
 6           if(i == 2){
 7             System.out.println("\n");
 8             }
 9         }
10    }
11     public Test(){
12     }
13     public static void main(String[] args) {
14        Test t1 = new Test();
15        Test t2 = new Test();
16        t2.i = 60;
17        System.out.println(+t1.i);
18        t1.call();
19        System.out.println(+t2.i);
20        t2.call();
21     }
22 
23 }

 

运行结果:

60
0 1 2

3
0 1 2

 分析:

      从上述运行结果中可以看到,由于使用t2.i=60语句改变了静态成员变量的值,使用对象t1调用成员变量的值也是60,这正是i值被定义为静态成员变量的效果,即使使用两个对象对同一个静态成员变量进行操作,依然可以改变静态成员变量的值,因为在内存条中两个对象指向同一块内存区域,t1.i++语句执行后,i的值变为3,当再次调用call()方法时又被重新赋值为0,做循环打印操作。

 

访问对象属性和方法

标签:images   产生   静态成员   变量   new   call   alt   bsp   调用   

原文地址:http://www.cnblogs.com/xyzyj/p/6127161.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!