zoukankan      html  css  js  c++  java
  • 《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());
    	}
    }
    
    
    

    加入内存图片帮助理解:


  • 相关阅读:
    数位dp模板
    HDU
    hdu 2586 How far away ? ( 离线 LCA , tarjan )
    POJ 1655 Balancing Act( 树的重心 )
    HDU 2196 Computer( 树上节点的最远距离 )
    HDU 5266 pog loves szh III ( LCA + SegTree||RMQ )
    HDU 5265 pog loves szh II
    2015区域赛起航
    2015GDCPC广东省赛总结
    SGU 521 North-East ( 二维LIS 线段树优化 )
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299882.html
Copyright © 2011-2022 走看看