this关键字全面解析

##this关键字详解
关键字this

  • this关键字必须放在非静态方法中,代表自身
  • 1.引用实例变量
  • 2.在自身构造函数内部引用其它构造函数
  • 3.代表自身类的对象
  • 4.引用成员方法
  • 【引用实例变量】
  • this引用实例变量可以用于解决实例变量与局部变量重名的问题。 例如:
 class  point {   
         int  x , y;  
       point(int x, int y ){
           this.x=x;//this.x代表具体对象的实例变量
           this.y=y;
      }  
          } 

*在java中,实例变量的作用域是自身类,而局部变量的作用域是自身方法。
*当实例变量与局部变量重名时,局部变量会屏蔽实例变量。(类似于地方主义)
*【在自身构造函数内部引用其它构造函数】
*在构造函数内部使用this,它用于指代另外一个构造函数,但不能指代非构造函数。例如:

class point {
          int x, y; 
       point( ){ this(-1,-1); } 
       point(int a, int b){  x=a; y=b; }
            } 

*注意事项:this调用构造函数的代码只能出现在构造函数内部的第一行可执行代码。
*这样,构造函数内部使用this调用构造函数最多出现一次。
*【代表自身类的对象】
*在一个类中,可以用this代表自身类的对象。

class IntVector {
int v[ ]; 
boolean equals(IntVector other) {
  if (this == other) return true;
  return false;
     }
}
 class testIntVector {
 public static void main(String args[ ]){
     IntVector   t1=new IntVector( ), 
                 t3=new IntVector( ),   t2=t1; 
System.out.println(t1.equals(t2));  //t1就是 this#true
System.out.println(t3.equals(t2));   //t3就是this #false
     }
} 

*this为调用当前方法的那个对象,即谁调用equals谁就是this。
*【级联调用】

import java.awt.*;
import java.applet.*;
 class time{ 
 private int hour, min, sec;
 time( ) { setHour(0); setMin(0); setSec(0); } 
 time  setHour(int h) { //注意该方法的返回值类型
    hour=((h>=0 && h<24)? h: 0);
    return this ;//将当前对象返回
    // t.setHour(18)中t访问该方法,并返回t
 } 
 time setMin(int m) {
  min=((m>=0 && m<60)? m: 0);
  return this ;
 }
 //t.setHour(18).setMin(30) == t.setMin(30)
 time setSec(int s) {
  sec=((s>=0 && s<60)? s: 0);
  return this ;
 }
 
 String tostring( ){ return hour+":"+min+":"+sec ; }
} 
public class timeToString extends Applet{  //程序的主类
 private time t;
 
 public void init( ){ 
  t=new time( ); 
 }
 public void paint(Graphics g) {
 //典型的级联调用
  t.setHour(18).setMin(30).setSec(20);  
  g.drawString(" time:"+t.tostring( ),25,45);
 }
} #time:18:30:20


例题:实现复数的加减法

package thirty;
class complex{
	int realPart,imagPart;
	public complex(int realPart, int imagPart) {
		this.realPart = realPart;
		this.imagPart = imagPart;
	}
	//(*)
	complex add(complex c) {
	//注意此处的返回值形式
		(1)return new complex(realPart+c.realPart, imagPart+c.imagPart);
	}
	complex sub(complex c) {
		(2)complex complex1 = new complex(realPart-c.realPart, imagPart-c.imagPart);
		(2) return complex1;
		//注意(1)与(2)的虽然形式不同,但效果等价
	}
	void show() {
		if(realPart == 0 && imagPart == 0)
			System.out.println(0);
		
		else if (realPart == 0)
			System.out.println(imagPart+"i");
		else if(imagPart == 0)
			System.out.println(realPart);
		else if(imagPart < 0) {
			int i = -imagPart;
			System.out.println(realPart+"-"+i+"i");
			}
		else
		    System.out.println(realPart+"+" +imagPart+"i");
	}
}

		

public class IntegerSet {
  
	public static void main(String[] args) {
	
		complex c1 = new complex(2,2);
		complex c2 = new complex(2,4);
	//(3)complex c3;
		c3 = c1.add(c2 );
		c3.show();
		//级联调用中每一步返回的必须是【该类的对象】,
		//所以(*)处的返回类型是complex.注意(3)与(4)的差别。虽形式不同,但效果等价
	//(4)c1.sub(c2).show();
	}
}
#
4+6i
-2i

*【引用成员方法】
*在一个类中,成员方法之间的相互调用可以用“this.方法名(参数)“来进行引用。只是所有这样的引用this都可以省略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值