this关键字的使用

    xiaoxiao2023-11-18  135

    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.属性,当前对象的属性,堆内存保存的内容

    最新回复(0)