【JAVA】this 关键字

this 关键字

什么是this
java虚拟机会给每个对象分配this,代表当前对象。

使用this解决前面变量命名问题

public class ss{
   public static void main(String[] args){
	  Dog p1=new Dog("aaa",9);
	    p1.info();
	  
}
   
}
class Dog {
	String name;
	int age;
//如果我们构造器的形参,能够直接写成属性名,就更好了
//但是出现了一个问题,根据变量的作用域原则
//构造器的name是局部变量,而不是属性
//构造器的age是局部变量,而不是属性
//==>引出this关键字来解决
        public Dog(String name,int age){//构造器
//this.name就是当前对象的属性name
this.name = name;//谁在调用这个构造器,this就是谁的对象
//this.age就是当前对象的属性age
this.age = age;
}
     public void info(){//成员方法,输出属性X信息
System.out.println(name + "\t" + age + "\t");
}
}

简单地说,哪个对象调用,this就代表哪个对象。
通过hashcode来验证

public class ss{
   public static void main(String[] args){
	   Dog dog1 = new Dog("大狗",3);
	   System.out.println("dog1的hashcode=" + dog1.hashCode());
	   //dog1调用了info()方法
	   dog1.info();

}
   
}
class Dog{
public String name;
public int age;
public Dog(String name, int in_age){
	this.name = name;
	this.age = in_age;
	}
public void info() {
System.out.println(this.name + "\t" + this.age
+"\t"+"当前对象的hashCode是:"+ this.hashCode());
}
}//使用hashCode()看看对象的情况


this的注意事项和使用细节

  1. this关键字可以用来访问本类的属性、方法、构造器
  2. this用于区分当前类的属性和局部变量
  3. 访问成员方法的语法:this.方法名(参数列表);
  4. 访问构造器语法:this(参数列表);注意只能在构造器中使用(即只能在构造器中访问另外一个构造器,必须放在第一条语句)
  5. this不能在类定义的外部使用,只能在类定义的方法中使用。
public class ss{
   public static void main(String[] args){
	    T t1 = new T();
	   
	   t1.f2();
	   T t2= new T();
	   t2.f3();
	   

}
   
}
class T{
	
	String name ="Jack";
	int num= 100;
//细节:访问成员方法的语法:this:方法名(参数列表);
//注意只能在构造器中使用(即只能在构造器中访问另外一个构造器)
//注意︰访问构造器语法:this(参数列表);必须放置第一条语句
//4
	public T(){
	//这里去访问 T(String name,int age)构造器
	this("jack",100);
	System.out.println( "T()构造器");
		
		}
		public T(String name,int age){
		System.out.println("T(String name,int age)构造器");
		}
//this关键字可以用来访问本类的属性
		public void f3(){
//传统方式,就近原则  此处访问的是当前局部变量 
//如果 此处添加 String name="smith" 那么此处便会输出Smith
	System.out.println( "name=" + name + " num=" +num);
	//也可以使用this访问属性
	System.out.println("name=" + this.name + " num=" + this.num);
}
//3
public void f1(){
	System.out.println("f1() 方法..");
	}
public void f2() {
System.out.println("f2() 方法..");
   //调用本类的f1
   //第一种方式
  f1();
  //第二种方式
  this.f1();
}
}

定义Person类,里面有name、age属性,并提供compareTo比较方法,
用于判断是否和另一个人相等,提供测试类TestPerson用于测试,
名字和年龄完全一样,就返回true,否则返回false

public class TestPerson{
   public static void main(String[] args){  
	 Person p1 = new Person( "mary",20);
	 Person p2 = new Person( "mary", 0);
	 System.out.println("p1和p2比较的结果="+ p1.compareTo(p2));
	   }
 }

/*定义Person类,里面有name、age属性,并提供compareTo比较方法,
用于判断是否和另一个人相等,提供测试类TestPerson用于测试,
名字和年龄完全一样,就返回true,否则返回false
*/  
class Person{
	String name;
	int age;
	//构造器
	public Person(String name,int age){
	this.name = name;
	this.age = age;
	}
	 //compareTo比较方法
	public boolean compareTo( Person p){//p2传入p
	//名字和年龄完全一样
	// if(this.name.equals(p.name) && this.age == p.age){
	//return true;
	// }else {
	//return false;
	// }
	return this.name.equals(p.name)&& this.age == p.age;
	}
	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值