面向对象-this关键字的概述和应用

 1 /*
 2     我们曾经说过:定义名字要做到见名知意。
 3     
 4     this:是当前类的对象引用。简单的记,它就代表当前类的一个对象。
 5     
 6         注意:谁调用这个方法,在该方法内部的this就代表谁。
 7         
 8     this的场景:
 9         解决局部变量隐藏成员变量
10 */
11 //定义学生类
12 class Student {
13     //姓名
14     private String name;
15     //年龄
16     private int age;
17     
18     //姓名获取值
19     public String getName() {
20         return name;
21     }
22     
23     //姓名设置值
24     public void setName(String name) { //String name = "林青霞";
25         //name = name; //zhou:想把林青霞赋值给外面的name,但是变量的使用规则是就近的原则,所以林青霞还是去找最近的参数String name,
26                        //把自己赋给了自己,和外面的private String name没有关系,这叫局部变量隐藏成员变量
27                        //如果可以的话通过Student.name = name就可以,要用静态修饰(private static String name)
28         
29         //刘意:变量的使用规则:就近原则
30         //这里是类名,目前还没有说过类似的用法,所以这个是有问题的
31         //这里的调用只能通过对象名
32         //这个对象如果存在,它应该代表的是Student的一个对象。
33         //那么,谁能够代表当前类的对象呢? java就提供了一个关键字 this
34         //Student.name = name;
35         
36         this.name = name;
37     }
38     
39     //年龄获取值
40     public int getAge() {
41         return age;
42     }
43     
44     //年龄赋值
45     public void setAge(int age) {
46         this.age = age;
47     }
48 }
49 
50 //测试类
51 class StudentTest {
52     public static void main(String[] args) {
53         //创建学生对象
54         Student s = new Student();
55         
56         //给成员变量赋值
57         s.setName("林青霞");
58         s.setAge(27);
59         //获取数据
60         System.out.println(s.getName()+"---"+s.getAge());
61     }
62 }

若把成员变量定义成静态(把main方法放在主类中方便在Eclipse使用Run As——>Java Application):

 1 package cn.itcast;
 2 
 3 public class Student {
 4     //姓名
 5     private static  String name;
 6     //年龄
 7     private int age;
 8 
 9     public static String getName() {
10         return name;
11     }
12 
13     public static void setName(String name) {
14         Student.name = name;
15     }
16 
17     public int getAge() {
18         return age;
19     }
20 
21     public void setAge(int age) {
22         this.age = age;
23     }
24 
25 
26     public static void main(String[] args) {
27         // 创建学生对象
28         Student s = new Student();
29 
30         // 给成员变量赋值
31         s.setName("林青霞");
32         // 推荐用类名调用
33         Student.setName("林青霞");
34         s.setAge(27);
35         // 获取数据
36         System.out.println(s.getName() + "---" + s.getAge());
37         System.out.println(Student.getName() + "---" + s.getAge());
38     }
39 
40 }
41 
42 // 测试类
43 class StudentTest {
44     
45 }

测试也是OK的:

 

posted @ 2017-08-06 13:37  星辰郎周  阅读(254)  评论(0编辑  收藏  举报