/*
起名字要做到见名知意。 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());
}
}
加入内存图片帮助理解: