《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());
	}
}



加入内存图片帮助理解:


原文地址:https://www.cnblogs.com/wanghang/p/6299882.html