java的this

this

假如说构造器传入的形参和类的成员属性名字一样,则构造器就失去作用,所以引入this,什么是this? java虚拟机给每个对象分配this,代表当前对象

注意:哪个对象调用,this就代表哪个对象

改版前

public  class text{
	public static void main(String[] args) {
		
		
		Person p2 = new Person("jack",20);//调用有参构造器,并初始化对象p2
		System.out.println("p2对象的名字"+p2.name+"p2对象的年龄"+p2.age);//因为作用域的就近原则,则p2.name=null默认值,age=100
	}	
}

class   Person {
	int age=100;
	String name;
	
		
	   public 	Person(String name, int age){//因为构造器与类都定义了相同变量的名字,所以调用采取就近原则
			name=name; //jack=jack
			age=age;//20=20
	   }
}

改版后

 public  class text{
	public static void main(String[] args) {
		
		
		Person p = new Person("jack",20);//调用有参构造器,并初始化对象p
		System.out.println("p对象的名字"+p.name+"p对象的年龄"+p.age);//p.name=jack,age=20
	}	
}

class   Person {
	int age=100;
	String name;
	
		
	   public 	Person(String name, int age){//因为构造器与类都定义了相同变量的名字,所以调用采取就近原则
			this.name = name; //当前对象p的属性name=jack
		     this.age = age;//当前对象p的属性age=20
	   }
}

注意事项

  1. this是一个对象,this可以访问本类的属性和方法,构造器

  2. this用于区分当前类的属性和局部变量

  3. 访问成员方法的语法:` this.方法名(参数列表)

 public  class text{
	public static void main(String[] args) {
				
	}
 }

class T{
	
		public void  f1() {
			System.out.println("Hello,world");
		}	
		public void  f2() {
			//此时调用f1方法有两种			 
			 f1();
			 this.f1();			  
		}
}
  1. 访问构造器语法: this(参数列表),注意只能在构造器中使用

为什么这样写呢,为了区别对象this调用方法this.方法()

而且构造器调用构造器时,才能使用 this(参数)

注意使用thisA构造器调用B构造器,this(参数)语句必须在A构造器的第一句话


 public  class text{
	public static void main(String[] args) {
		T  t =new T();		
	}
 }

class T{
	
		public   T() {  
		this("jack",18);
			System.out.println("Hello,world");
			//在无参构造器T()中调用 T(String name,int age)的构造器		
		}
		
		public T(String name,int age) {			
			System.out.println("public T(String name,int age)的构造器");		  
		}
}
  1. this不能在类定义的外部使用,只能在类定义的方法中使用
  
 public  class text{
	public static void main(String[] args) {
		T  t =new T();	
        t.f1();		
	}
 }

class T{
		
		String name ="jack";
		int age = 20;
			
		public   void  f1() {  	
				String name="Tom";
				System.out.println(name+age); //Tom 20
				System.out.println(this.name+this.age); // jack 20
		}
}

练习

//p判断同类的两个对象人是否相等
 public  class text{
	public static void main(String[] args) {
			
		Person p1 =new Person("jack",10);
		Person p2 =new Person("Tom",15);

		 System.out.println("两人是否相同"+p1.compareTo(p2));
		
	}
 }

class  Person {
		String name;
		int age;
		
		public Person(String name,int age) {
			this.name=name;
			this.age=age;
		}
		
		public boolean compareTo(Person p) {
			
			
			// if(p.name  .equals(this.name) && p.age == this.age ) {
				 // return ture;
			// }
			// else 
				 // return false;
			 return   p.name  .equals(this.name) && p.age == this.age ;
		}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值