《java入门第一季》之面向对象this关键字
/* 起名字要做到见名知意。 this:是当前类的对象引用。简单的记,它就代表当前类的一个对象。 注意:谁调用这个方法,在该方法内部的this就代表谁。 this的场景: 解决局部变量隐藏成员变量 */ //定义学生类 class Student { //姓名 private String name; //年龄 private int age; //姓名获取值 public String getName() { return name;//返回一个String类型的成员变量名称为name的值,其实这个值就是给成员变量赋值后的值 } //姓名设置值 public void setName(String name) { //name = "林青霞";见名知意 //name = name; //变量的使用规则:就近原则 //这里的调用只能通过对象名 //这个对象如果存在,它应该代表的是Student的一个对象。 //那么,谁能够代表当前类的对象呢? java就提供了一个关键字 this。代表当前类的对象 //Student.name = name;//报错信息:无法从静态上下文中引用非静态 变量Studen name= name this.name = name;//this.name为成员变量 } //年龄获取值 public int getAge() { return age; } //年龄赋值 public void setAge(int age) { this.age = age;//两个age不是同一个age,=右边是局部变量,左边是成员变量。为了避免局部变量隐藏成员变量 } } //测试类 class StudentTest { public static void main(String[] args) { //创建学生对象 Student s = new Student(); //给成员变量赋值 s.setName("林青霞"); s.setAge(27); //获取数据 System.out.println(s.getName()+"---"+s.getAge()); } }
/* 标准的代码改进版 this:哪个对象调用那个方法,this就代表那个对象 */ class Student{ //姓名 private String name; //年龄 private int age; //获取姓名方法getXxx(); public String getName(){ return name; } //给姓名赋值的方法setXxx(); public void setName(String name){ this.name = name; } //获取年龄的方法 public int getAge(){ return age; } //给年龄赋值的方法 public void setAge(int age){ this.age = age; } } class StudentTest2{ public static void main(String[] args){ //创建第一个对象 Student s1 = new Student(); //给成员变量赋值 s1.setName("杨道龙");//s1调用这个方法,那边的this就代表了对象s1 s1.setAge(24); //输出 System.out.println(s1.getName()+"---"+s1.getAge()); System.out.println("--------------------------"); //创建第二个对象 Student s2 = new Student(); s2.setName("奥巴马"); s2.setAge(12);//s2调用这个方法,那边的this就代表了对象s2 System.out.println(s2.getName()+"---"+s2.getAge()); } }
再用一个手机类加深印象:
/* 作业:请把手机类写成一个标准类,然后创建对象测试功能。 手机类: 成员变量: 品牌:String brand; 价格:int price; 颜色:String color; 功能:string function 成员方法: 针对每一个成员变量给出对应的getXxx()/setXxx()方法。 最后定义测试: 创建一个对象,先通过getXxx()方法输出成员变量的值。这一次的结果是:null---0---null 然后通过setXxx()方法给成员变量赋值。再次输出结果。这一次的结果是:三星---2999---土豪金 */ class Phone{ //品牌 private String brand; //价格: private int price; //颜色: private String color; //功能: private String function; //针对每一个成员变量给出对应的getXxx()/setXxx()方法。 //getBrand方法 public String getBrand(){ return brand; } //setBrand方法 public void setBrand(String brand){ this.brand = brand; } //getPrice方法 public int getPrice(){ return price; } public void setPrice(int price){ this.price = price; } public String getColor(){ return color; } public void setColor(String color){ this.color = color; } public String getFunction(){ return function; } public void setFunction(String function){ this.function = function; } } class PhoneTest{ public static void main(String[] args){ //创建对象 Phone p = new Phone(); //没赋值前输出 System.out.println(p.getBrand()+"--"+p.getPrice()+"--"+p.getColor()+"--"+p.getFunction()); //赋值: p.setBrand("三星");//p对象调用该方法,该方法中的this就代表该对象 p.setPrice(2999); p.setColor("土豪金"); p.setFunction("拍照"); System.out.println(p.getBrand()+"--"+p.getPrice()+"--"+p.getColor()+"--"+p.getFunction()); } }
加入内存图片帮助理解: