Java-关键字this

关键字this

一种指针,this表示当前对象本身,确切地说,this代表了当前对象的内存地址,它是对当前对象的引用,也可以理解为当前对象的名字。

class Cat{
  ……
  f1(){
	……
	x=f2();
	return x;
  }
  f2(){……}
}
public class TestCat{
  Cat cat1=new Cat();
   ……
  void b1(int x){……}
  void b2(int n){
     ……
   cat1.f1();
   c=b1(x);
  }
}

非静态方法,对象方法,谁在执行,f2没前缀,方法主体是谁,其实就是所谓当前对象,f1也是非静态,cat1中谁在执行f1,谁就在执行f2。Cat并不知道f1的调用者是谁,代词就是this.执行时的对象就是当前对象。
x=f2()——>x=this.f2()
c=b1(x)——>x=this.b1(x)

任何一个非static成员都属于某个具体的实例对象,在引用时必须要以其对象名作为前缀。对象的引用变量实际上存储的是该对象所在存储区域的地址,系统会根据对象引用变量找到对应的存储空间,来访问所需的成员变量或方法。
当前对象的地址是未知的,没有确定的标识符(对象名)可用,为此Java设计了专用关键字this,用来代表当前对象的地址。this代表尚未创建的对象。
this是缺省值,即,当属性或方法的调用未加前缀时,系统会自动指定其前缀为this。
上例中,b1方法的调用语句c=b1(x);也可改为:
c=this.b1(x);

this的三种实例

  • 关键字this的一种常见用法就是引用类的hidden data fields(隐藏数据域)。
    隐藏数据域
class SimpleCircle {
  double radius;数据域变量被屏蔽
  SimpleCircle() {
    radius = 1.0;
  }
//当数据域变量与局部变量同名时,数据域变量被屏蔽。
	......局部变量
  SimpleCircle(double newRadius) {
    radius = newRadius;
  }
	......
  void setRadius(double newRadius) {
    radius = newRadius;
  }
}

应改成:

class SimpleCircle {
  double radius;
  SimpleCircle() {
      radius = 1.0;
  }
	......
  SimpleCircle(double radius) {
      this.radius = radius;
  }
	......
  void setRadius(double radius) {
     this.radius = radius;
  }
}
  • 关键字this的另一种常见用法是让构造方法调用同一个类的另一个构造方法。
    调用重载的构造方法:
class SimpleCircle {
  double radius;

  SimpleCircle() {
    radius = 1.0;
  }

  SimpleCircle(double radius) {
    this.radius = radius;
  }
  	......
}
class SimpleCircle {
  double radius;

  SimpleCircle() {
    this(1.0);
  }

  SimpleCircle(double radius) {
    this.radius = radius;
  }
  	......
}

提高代码利用率:大量出现重复性操作

public class CircleWithPrivateDataFields {

  private double radius ;
  private static int numberOfObjects = 0;


  public CircleWithPrivateDataFields(double radius) {
    this.radius =  (radius >= 0) ? radius : 0;
    numberOfObjects++;
  }  
//public CircleWithPrivateDataFields() {
 //   radius=1.0;
 //   numberOfObjects++;
 //  }  
  public CircleWithPrivateDataFields() {
    this(1.0);//转调
   
  }

		...... ......
}

存在可能重复的操作,使用this转调

  • 关键字this是指向调用对象本身的引用名。
    引用当前对象
import javax.swing.JFrame;//窗口类
import javax.swing.JOptionPane;

class MyFrame extends JFrame{
    public MyFrame(){
        setTitle("Window 1");
        setSize(200, 150);
        setLocation(200, 100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
	......
        JOptionPane.showMessageDialog(this,"测试窗口");//弹出窗口
	......
    }    
}

弹出窗口showMessageDialog(小窗口的附窗口引用,内容)
谁传出来的,数据带回给谁,MyFram为当前主窗口
实验结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值