this关键字初步探索


this关键字

在Java中this关键字是一个比较麻烦的关键字,但是它经常会用到,所以说是一个挺重要的内容。this关键字的本质是指明确进行本类结构的标记,它有三个主要的功能。


  • 调用本类属性
  • 调用本类方法
  • 调用本类对象
1.调用本类属性

在定义的一个类中,方法可以直接访问属性,但是如果出现方法的参数名和属性名重复的情况,程序结果就会出问题。这时就需要this关键字,this.属性表示要明确调用类中的属性而不是调用方法的参数。

class Book{
  private String title;
  private double price;
 
  public Book(String title,double price){
      this.title=title;
      this.price=price;
  }

  public String getInfo(){
      return "书名:"+title+",价格:"+price;
 }
}
public class TestDemo{
  public static void main(String args[]){
     Book book=new Book("Java从入门到精通",85.9);
     System.out.println(book.getInfo());
  }
}

程序执行结果:书名:Java从入门到精通,价格:85.9

如果有参构造方法中的属性没有this关键字,程序的执行结果会出现问题(书名:null,价格:0.0),方法调用的会是方法的参数,所以结果就是属性的默认值。建议在以后编写代码的过程中不管是否出现重名的情况,一定都要加上“this”。

2.调用本类方法
  • 调用本类普通方法:如果要调用本类方法,则可以使用“this.方法()”调用;
  • 调用本类构造方法:在一个构造中要调用其他构造,可以使用“this()”调用。
示例:
class Book{
	private String title;
	private double price;
	
	public Book(){
		this("未知",0.0);
		
	}
	public Book(String title){
		this(title,10.2);
	}
	public Book(String title,double price){
		this.title=title;
		this.price=price;
	}
	public void setTitle(String title){
		this.title=title;
	}
	public void setPrice(double price){
		this.price=price;
	}
	public String getTitle(){
		return title;
	}
	public double getPrice(){
		return price;
	}
	
	public String getInfo(){
		return "书名:"+title+" 价格:"+price;
	}
}

public class ThisDemo{
	public static void main(String srgs[]){
		Book book1=new Book();
		Book book2=new Book("phython开发");
		Book book3=new Book("JAVA开发",89.9);
		System.out.println(book1.getInfo());
		System.out.println(book2.getInfo());
		System.out.println(book3.getInfo());
		
	}
}

注意事项:
  • 使用“this()”调用构造方法的代码只能放在构造方法的首行。
  • 进行构造方法互相调用时,一定要保留调用的出口。
    在使用this()互相调用构造方法时,要至少保留一个构造方法没有使用this()。这么做是为什么呢?是因为如果没有预留出口的话就会出现循环调用。
3.表示当前对象

当前对象就是当前正在调用类中的方法的实例化对象。下面通过一个另类的“Hello World!”程序来说明。

程序示例:
class A{
    private B b;
    private A(){  //2.执行A类的构造
       this.b=new B(this);  //3.为B类对象b实例化(this就是temp)
       this.b.get();        //6.调用B类的get方法
    }
    public void print(){    //9.调用此方法输出
       System.out.println("Hello World!");
    }
}
class B{
   private  A a;
   public BA,a){   //4.参数a就是temp
     this.a=a;        //5.保存a
   }
   public void get(){  //7.调用此方法
      this.a.print();  //8.this.a=temp
   }
}
public class TestDemo{
   public static void main(String args[]){
     A temp =new A();   //1.实例化A类对象,要调用A类的无参构造
   }
}

程序执行结果:Hello World!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值