1、学习目标
1、this调用属性,区分成员变量和当前属性;
2、this调用方法;
3、利用this表示当前对象。
2、具体类容
在java里面,利用this关键字可以实现类属性的调用、类方法的调用、表示当前对象。
在以后的程序开发之中,只要是类中的属性前面必须加上“this”,最稳妥的开发方式。
2.1调用方法
所谓的this实际上就是明确标记本类的结构,而在一个类中除了属性之外还含有方法(普通方法、构造方法),利用this可以调用本类的普通方法或构造方法。
class Book{
private String title;
private int price;
public void print(){
System.out.println("***********");
}
public Book(String title,int price){
this.title=title;
this.price=price;
}
public String getInfo(){
print();//调用本类方法
return "书名:"+this.title+"价格:"+this.price;
}
}
public class TestDemo{
public static void main(String args[]){
Book book=new Book("java开发",34);
System.out.println(book.getInfo());
}
}
调用普通方法的时候是否在方法前加“this.”没有一个明确的规定,即使不加this,也表示调用本类方法,加上更严谨,增强代码阅读性。
但是构造方法之间要进行相互调用,就一定要使用this。
形式为:this(参数,参数)
* this处理成员变量和参数重名的情况;
* this调用本类方法;
- this调用构造方法(构造方法无返回值,只能调用一次),多个构造方法互相调用。
需要注意的是使用this()调用构造方法要放在首行,类中构造方法互相调用的时候,一定要保留调用的出口(有可能出现构造方法的递归调用),就是在使用this()关键字的时候请至少保留一个构造方法没有使用this。
下面来说this解决成员变量和参数重名的情况,在构造方法中定义属性,表示将当前属性赋给成员变量,达到供构造方法初始化,this关键字也可以调用构造方法。
class Book
{
private String title;
private double price;
public Book(){
System.out.println("一个新的Book类产生");
}
public Book(String title){
this();//调用本类的无参构造
this.title=title;
System.out.println("一个新的book类对象产生");
}
public Book(String title,double price){
this(title);//调用本类的单参构造方法
this.title=title;
this.price=price;
}
public void print(){
System.out.println("******************");
}
public String getInfo(){
this.print();//this调用本类方法
return "书名"+this.title+","+"价格"+this.price;
}
}
public class ThisTest {
public static void main(String args[]){
Book book=new Book("java开发",65.0);
System.out.println(book.getInfo());
}
}
进行构造方法的互相调用,一定要保留调用的出口。
public Book(){
**this("hello",23);//调用双参构造方法**
System.out.println("一个新的book类产生");
}
public Book(String title){
this();//调用无参的构造方法
this.title=title;
}
public Book(String title,int price){
this(title);
this.price=price;
}
上面**处会陷入递归构造调用,在使用构造方法相互调用的时候请至少保留一个构造没有使用this调用其它构造的情况。
拿出上面代码的一块分析:
当不使用“this”而直接使用“price=price”时只会将形参的初值赋给形参。
2.3 表示当前对象
我是一个兵来自老百姓,这个兵就是当前对象(比如这个兵就是我),所谓的当前对象就是当前正在调用类中方法的对象。new了一个对象会在堆内存中开辟一块空间,在这个对象里可以想象本身有一个this,指向这个对象自己。
范例:this表示当前对象
class Book{
public void print(){
//那个对象调用了print方法,this就自动的与此对象指向同一块堆内存地址
//this就是当前调用方法对象
System.out.println("this="+this);
}
}
public class TestDemo{
public static void main(String args[]){
Book booka=new Book();
System.out.println("booka="+booka);
booka.print();
System.out.println("******");
Book bookb=new Book();
System.out.println("bookb="+bookb);
bookb.print();
}
}
输出的结果:
booka=com.javabase.demo.Book@15db9742
this=com.javabase.demo.Book@15db9742
****** bookb=com.javabase.demo.Book@6d06d69c this=com.javabase.demo.Book@6d06d69c
- 可以看出的是直接输出对象和使用this输出的都是相同的对象内存地址数值,说明this指的是当前对象的地址引用。
那么之前出现的“this.属性”实际上就属于当前对象中的属性,一定是堆内存保存的内容
3、总结
1、类中的属性以后调用建议加上this;
2、类中的构造方法间的互相调用,一定要保留出口;
4、this调用构造方法的时候,要放在首行;
5、this表示当前对象,指的是当前正在调用的类中方法的对象;,this.属性,当前对象的属性,堆内存保存的内容