java中this关键字的做用

一、this调用当前属性:其主要做用是当须要给类中的数据进行初始化时,能够经过this来进行赋值,而不用随便定义一个变量来进行赋值,更有利于代码的阅读与理解this

  如:spa

class Book{//定义书的类
    private String name;//书本名字
    private int price;//书本价格
    public Book(String name,int price){ //使用this对类的数据进行初始化
        this.name = name;        
     this.price = price; } /*public Book(String n,int p){ //若不使用this关键字只能这样进行赋值,不利于将变量与属性统一块儿来 name = n; price = p; }*/ public String getInfo(){ return "书籍:" + name + ",价格:" + price; } } public class ThisDemo{ public static void main(String args[]){ System.out.printIn(new Book("Java",89.9).getInfo()) } }

 

二、this调用方法(普通方法、构造方法)code

  (1)普通方法:对象

 1 class Book{//定义书的类
 2     private String name;//书本名字
 3     private int price;//书本价格
 4     public Book(String name,int price){//使用this对类的数据进行初始化
 5         this.name = name; 6         this.price = price;  7         this.print();//调用本类普通方法,虽然能够不用使用this也能够进行本类普通方法的调用,可是好的习惯最好应该加上,目的是能够区分方法的定义来源
 8  }  9     public String getInfo(){ 10         return "书籍:" + name + ",价格:" + price; 11  } 12     public void print(){ 13         System.out.printIn("***********"); 14  } 15 } 16 public class ThisDemo{ 17     public static void main(String args[]){ 18         System.out.printIn(new Book("Java",89.9).getInfo()) 19  } 20 }

  (2)构造方法:普通方法与构造方法的区别是构造方法在建立后只能掉用一次,用来初始化数据,而普通方法在建立后能够调用屡次。blog

     当须要使用构造方法输出同一重复内容时,若不使用this关键字,则只能使用以下代码:递归

class Book{//定义书的类
    private String name;//书本名字
    private int price;//书本价格
    public Book(){//无参构造
        System.out.printIn("*************"); } public Book(String name){//一参构造
        System.out.printIn("*************"); this.name = name; } public Book(String name,int price){//二参构造
        System.out.printIn("*************"); this.name = name; this.price = price; } public String getInfo(){ return "书籍:" + name + ",价格:" + price; } } public class ThisDemo{ public static void main(String args[]){ System.out.printIn(new Book("Java",89.9).getInfo()) } }

   显然,这样大大浪费了代码行数,而应该使用this进行构造方法的调用,方法以下:get

 1 class Book{//定义书的类
 2     private String name;//书本名字
 3     private int price;//书本价格
 4     public Book(){//无参构造
 5         System.out.printIn("*************");  6  }  7     public Book(String name){//一参构造
 8         this();//调用本类中的无参构造
 9         this.name = name; 10  } 11     public Book(String name,int price){//二参构造
12         this(name);//调用本类中的一参构造
13         this.price = price; 14  } 15     public String getInfo(){ 16         return "书籍:" + name + ",价格:" + price; 17  } 18 
19 } 20 public class ThisDemo{ 21     public static void main(String args[]){ 22         System.out.printIn(new Book("Java",89.9).getInfo()) 23  } 24 }

  注:对this调用必须是构造方法中的第一个语句,不然便会出错,固然也不能在普通方法中调用构造方法。class

    最为重要的是,使用this调用不能造成循环,即不能造成递归调用而没有出口。变量

 

三、this表示当前方法书籍

class Book{ public void fun(){ System.out.printIn("FUN方法"+this); } } } public class ThisDemo{ public static void main(String args[]){ Book b1 = new Book(); System.out.printIn("MAIN方法"+b1); b1.fun();//有b1调用fun方法(this = b1) //两个输出结果的地址同样,表明着此时this表明着b1
        System.out.printIn("*************") Book b2 = new Book(); System.out.printIn("MAIN方法"+b2); b2.fun();//此时输出结果和b2同样
 } }

  在整个过程当中,this的定义没有变,只要有某一个对象调用本类中的方法,此时this就表示当前执行的对象。

相关文章
相关标签/搜索