• this关键字


    问题提出

    1.

      class Person{		// 定义Person类
      	private String name ;		// 姓名
      	private int age ;			// 年龄
      	public Person(String name,int age){	// 通过构造方法赋值
      		name = name ;
      		age = age ;
      	}
      	public String getInfo(){	// 取得信息的方法
      		return "姓名:" + name + ",年龄:" + age ;
      	}
      };
      public class ThisDemo01{
      	public static void main(String args[]){
      		Person per1 = new Person("张三",33) ;	// 调用构造实例化对象
      		System.out.println(per1.getInfo()) ;	// 取得信息
      	}
      };

      2.

      class Person{		// 定义Person类
      	private String name ;		// 姓名
      	private int age ;			// 年龄
      	public Person(String name,int age){	// 通过构造方法赋值
      		this.name = name ; // 为类中的name属性赋值
      		this.age = age ;// 为类中的age属性赋值
      	}
      	public String getInfo(){	// 取得信息的方法
      		return "姓名:" + name + ",年龄:" + age ;
      	}
      };
      public class ThisDemo02{
      	public static void main(String args[]){
      		Person per1 = new Person("张三",33) ;	// 调用构造实例化对象
      		System.out.println(per1.getInfo()) ;	// 取得信息
      	}
      };
      对应的运行结果
    image

    3,this表示当前对象

    当前对象,当前正在调用方法的对象,例如审判犯人,不管被告席做的是张三还是李四,只要是坐在被告席的人,就是犯人。

    class Person{		// 定义Person类
    	public String getInfo(){	// 取得信息的方法
    		System.out.println("Person类 --> " + this) ; // 直接打印this
    		return null ; // 为了保证语法正确,返回null
    	}
    };
    public class ThisDemo06{
    	public static void main(String args[]){
    		Person per1 = new Person() ;	// 调用构造实例化对象
    		Person per2 = new Person() ;	// 调用构造实例化对象
    		System.out.println("MAIN方法 --> " + per1) ;	// 直接打印对象
    		per1.getInfo() ;	// 当前调用getInfo()方法的对象是per1
    		System.out.println("MAIN方法 --> " + per2) ;	// 直接打印对象
    		per2.getInfo() ;	// 当前调用getInfo()方法的对象是per2
    	}
    };
    image
    4.可以使用this和引用传递判断两个对象是不是相等
    需要解决两个问题
    • 如何比较,ThisDemo07实现
    • 在哪里比较ThisDemo08实现完全
    class Person{		// 定义Person类
    	private String name ;	// 姓名
    	private int age ;		// 年龄
    	public Person(String name,int age){
    		this.setName(name) ;
    		this.setAge(age) ;
    	}
    	public void setName(String name){	// 设置姓名
    		this.name = name ;
    	}
    	public void setAge(int age){		// 设置年龄
    		this.age = age ;
    	}
    	public String getName(){
    		return this.name ;
    	}
    	public int getAge(){
    		return this.age ;
    	}
    };
    public class ThisDemo07{
    	public static void main(String args[]){
    		Person per1 = new Person("张三",30) ;	// 声明两个对象,内容完全相等
    		Person per2 = new Person("张三",30) ;	// 声明两个对象,内容完全相等
    		// 直接在主方法中依次取得各个属性进行比较
    		if(per1.getName().equals(per2.getName())&&per1.getAge()==per2.getAge()){
    			System.out.println("两个对象相等!") ;
    		}else{
    			System.out.println("两个对象不相等!") ;
    		}
    	}
    };

    以上问题是在主方法中比较,要把比较方法写到Person类中,该怎么办呢?

    class Person{		// 定义Person类
    	private String name ;	// 姓名
    	private int age ;		// 年龄
    	public Person(String name,int age){
    		this.setName(name) ;
    		this.setAge(age) ;
    	}
    	public boolean compare(Person per){
    		// 调用此方法时里面存在两个对象:当前对象、传入的对象
    		Person p1 = this ;	// 当前的对象,就表示per1
    		Person p2 = per ;	// 传递进来的对象,就表示per2
    		if(p1==p2){	// 判断是不是同一个对象,用地址比较
    			return true ;
    		}
    		// 之后分别判断每一个属性是否相等
    		if(p1.name.equals(p2.name)&&p1.age==p2.age){
    			return true ;	// 两个对象相等
    		}else{
    			return false ;	// 两个对象不相等
    		}
    	}
    	public void setName(String name){	// 设置姓名
    		this.name = name ;
    	}
    	public void setAge(int age){		// 设置年龄
    		this.age = age ;
    	}
    	public String getName(){
    		return this.name ;
    	}
    	public int getAge(){
    		return this.age ;
    	}
    };
    public class ThisDemo08{
    	public static void main(String args[]){
    		Person per1 = new Person("张三",30) ;	// 声明两个对象,内容完全相等
    		Person per2 = new Person("张三",30) ;	// 声明两个对象,内容完全相等
    		// 直接在主方法中依次取得各个属性进行比较
    		if(per1.compare(per2)){
    			System.out.println("两个对象相等!") ;
    		}else{
    			System.out.println("两个对象不相等!") ;
    		}
    	}
    };
  • 相关阅读:
    [daily][netcat] 在UNIX socket上使用netcat
    [emacs] emacs设置python code的indent
    [dev][python] 从python2进阶到python3你都需要了解什么
    [strongswan][autoconf][automake][cento] 在CentOS上编译strongswan git源码时遇到的autoconf问题
    [strongswan] strongswan是如何实现与xfrm之间的trap机制的
    对不可描述的软件安装sfbo插件
    [daily] 如何用emacs+xcscope阅读内核源码
    [daily] cscope
    [dev][ipsec] 什么是xfrm
    [dev][ipsec] netlink是什么
  • 原文地址:https://www.cnblogs.com/yuxishua/p/4238202.html
Copyright © 2020-2023  润新知