What is the meaning of “this” in Java?

后端 未结 21 2575
走了就别回头了
走了就别回头了 2020-11-21 05:41

Normally, I use this in constructors only.

I understand that it is used to identify the parameter variable (by using this.something), if i

21条回答
  •  野趣味
    野趣味 (楼主)
    2020-11-21 05:59

    I would like to share what I understood from this keyword. This keyword has 6 usages in java as follows:-

    1. It can be used to refer to the current class variable. Let us understand with a code.*

    Let's understand the problem if we don't use this keyword by the example given below:

    class Employee{  
    int id_no;  
    String name;  
    float salary;  
    Student(int id_no,String name,float salary){  
    id_no = id_no;  
    name=name;  
    salary = salary;  
    }  
    void display(){System.out.println(id_no +" "+name+" "+ salary);}  
    }  
    class TestThis1{  
    public static void main(String args[]){  
    Employee s1=new Employee(111,"ankit",5000f);  
    Employee s2=new Employee(112,"sumit",6000f);  
    s1.display();  
    s2.display();  
    }}  
    

    Output:-

    0 null 0.0
    0 null 0.0
    

    In the above example, parameters (formal arguments) and instance variables are same. So, we are using this keyword to distinguish local variable and instance variable.

    class Employee{  
    int id_no;  
    String name;  
    float salary;  
    Student(int id_no,String name,float salary){  
    this.id_no = id_no;  
    this.name=name;  
    this.salary = salary;  
    }  
    void display(){System.out.println(id_no +" "+name+" "+ salary);}  
    }  
    class TestThis1{  
    public static void main(String args[]){  
    Employee s1=new Employee(111,"ankit",5000f);  
    Employee s2=new Employee(112,"sumit",6000f);  
    s1.display();  
    s2.display();  
    }} 
    

    output:

    111 ankit 5000
    112 sumit 6000
    

    2. To invoke the current class method.

    class A{  
    void m(){System.out.println("hello Mandy");}  
    void n(){  
    System.out.println("hello Natasha");  
    //m();//same as this.m()  
    this.m();  
    }  
    }  
    class TestThis4{  
    public static void main(String args[]){  
    A a=new A();  
    a.n();  
    }}  
    

    Output:

    hello Natasha
    hello Mandy
    

    3. to invoke the current class constructor. It is used to constructor chaining.

    class A{  
    A(){System.out.println("hello ABCD");}  
    A(int x){  
    this();  
    System.out.println(x);  
    }  
    }  
    class TestThis5{  
    public static void main(String args[]){  
    A a=new A(10);  
    }}
    

    Output:

    hello ABCD
    10
    

    4. to pass as an argument in the method.

    class S2{  
      void m(S2 obj){  
      System.out.println("The method is invoked");  
      }  
      void p(){  
      m(this);  
      }  
      public static void main(String args[]){  
      S2 s1 = new S2();  
      s1.p();  
      }  
    }  
    

    Output:

    The method is invoked
    

    5. to pass as an argument in the constructor call

    class B{  
      A4 obj;  
      B(A4 obj){  
        this.obj=obj;  
      }  
      void display(){  
        System.out.println(obj.data);//using data member of A4 class  
      }  
    }  
    
    class A4{  
      int data=10;  
      A4(){  
       B b=new B(this);  
       b.display();  
      }  
      public static void main(String args[]){  
       A4 a=new A4();  
      }  
    } 
    

    Output:-

    10
    

    6. to return current class instance

    class A{  
    A getA(){  
    return this;  
    }  
    void msg(){System.out.println("Hello");}  
    }  
    class Test1{  
    public static void main(String args[]){  
    new A().getA().msg();  
    }  
    }  
    

    Output:-

    Hello
    

    Also, this keyword cannot be used without .(dot) as it's syntax is invalid.

提交回复
热议问题