Java αυτό: Πού και πώς να το χρησιμοποιήσετε;

Σε αυτό το άρθρο, θα μάθουμε για αυτήν τη λέξη-κλειδί στην Java, πώς και πού να τις χρησιμοποιήσουμε με τη βοήθεια παραδειγμάτων.

αυτή η λέξη-κλειδί

Στην Java, αυτή η λέξη-κλειδί χρησιμοποιείται για να αναφέρεται στο τρέχον αντικείμενο μέσα σε μια μέθοδο ή έναν κατασκευαστή. Για παράδειγμα,

 class Main ( int instVar; Main(int instVar)( this.instVar = instVar; System.out.println("this reference = " + this); ) public static void main(String() args) ( Main obj = new Main(8); System.out.println("object reference = " + obj); ) )

Έξοδος :

 αυτή η αναφορά = Main @ 23fc625e αντικείμενο αναφοράς = Main @ 23fc625e

Στο παραπάνω παράδειγμα, δημιουργήσαμε ένα αντικείμενο που ονομάζεται obj της κλάσης Main. Στη συνέχεια εκτυπώνουμε την αναφορά στο αντικείμενο obj και τη thisλέξη-κλειδί της κλάσης.

Εδώ, μπορούμε να δούμε ότι η αναφορά και των δύο obj και thisείναι η ίδια. Αυτό σημαίνει ότι δεν είναι παρά η αναφορά στο τρέχον αντικείμενο.

Χρήση αυτής της λέξης-κλειδιού

Υπάρχουν διάφορες καταστάσεις όπου η thisλέξη-κλειδί χρησιμοποιείται συνήθως.

Χρησιμοποιώντας το για αμφιλεγόμενα ονόματα μεταβλητών

Στην Java, δεν επιτρέπεται να δηλώνονται δύο ή περισσότερες μεταβλητές με το ίδιο όνομα μέσα σε ένα πεδίο (πεδίο κλάσης ή πεδίο μεθόδου). Ωστόσο, οι μεταβλητές παρουσίας και οι παράμετροι μπορεί να έχουν το ίδιο όνομα. Για παράδειγμα,

 class MyClass ( // instance variable int age; // parameter MyClass(int age)( age = age; ) )

Στο παραπάνω πρόγραμμα, η μεταβλητή παρουσίας και η παράμετρος έχουν το ίδιο όνομα: ηλικία. Εδώ, ο μεταγλωττιστής Java μπερδεύεται λόγω ασάφειας ονόματος

Σε μια τέτοια περίπτωση, χρησιμοποιούμε αυτήν τη λέξη-κλειδί. Για παράδειγμα,

Αρχικά, ας δούμε ένα παράδειγμα χωρίς τη χρήση thisλέξης-κλειδιού:

 class Main ( int age; Main(int age)( age = age; ) public static void main(String() args) ( Main obj = new Main(8); System.out.println("obj.age = " + obj.age); ) )

Έξοδος :

 mc.age = 0

Στο παραπάνω παράδειγμα, έχουμε περάσει 8ως τιμή στον κατασκευαστή. Ωστόσο, έχουμε 0ως αποτέλεσμα. Αυτό συμβαίνει επειδή ο μεταγλωττιστής Java μπερδεύεται λόγω της ασάφειας στα ονόματα μεταξύ της παρουσίας της μεταβλητής και της παραμέτρου.

Τώρα, ας ξαναγράψουμε τον παραπάνω κώδικα χρησιμοποιώντας thisλέξη-κλειδί.

 class Main ( int age; Main(int age)( this.age = age; ) public static void main(String() args) ( Main obj = new Main(8); System.out.println("obj.age = " + obj.age); ) )

Έξοδος :

 obj.age = 8

Τώρα, έχουμε την αναμενόμενη παραγωγή. Είναι επειδή όταν ο κατασκευαστής καλείται, thisμέσα στον κατασκευαστή αντικαθίσταται από το αντικείμενο obj που έχει καλέσει τον κατασκευαστή. Εξ ου και η ηλικιακή μεταβλητή έχει τιμή 8.

Επίσης, εάν το όνομα της παραμέτρου και της μεταβλητής παρουσίας είναι διαφορετικό, ο μεταγλωττιστής προσαρτά αυτόματα αυτήν τη λέξη-κλειδί. Για παράδειγμα, ο κωδικός:

 class Main ( int age; Main(int i) ( age = i; ) )

είναι ισοδύναμο με:

 class Main ( int age; Main(int i) ( this.age = i; ) )

αυτό με τους Getters and Setters

Μια άλλη συνηθισμένη χρήση thisλέξεων-κλειδιών είναι στις μεθόδους setters και getters μιας τάξης. Για παράδειγμα:

 class Main ( String name; // setter method void setName( String name ) ( this.name = name; ) // getter method String getName()( return this.name; ) public static void main( String() args ) ( Main obj = new Main(); // calling the setter and the getter method obj.setName("Toshiba"); System.out.println("obj.name: "+obj.getName()); ) )

Έξοδος :

 obj.name: Toshiba

Εδώ, χρησιμοποιήσαμε τη thisλέξη-κλειδί:

  • για να εκχωρήσετε τιμή μέσα στη μέθοδο ρύθμισης
  • για πρόσβαση στην τιμή μέσα στη μέθοδο λήψης

Χρησιμοποιώντας αυτό στην υπερφόρτωση κατασκευαστή

Ενώ εργαζόμαστε με υπερφόρτωση κατασκευαστή, ίσως χρειαστεί να επικαλεστούμε έναν κατασκευαστή από έναν άλλο κατασκευαστή. Σε μια τέτοια περίπτωση, δεν μπορούμε να καλέσουμε τον κατασκευαστή ρητά. Αντ 'αυτού, πρέπει να χρησιμοποιήσουμε τη thisλέξη-κλειδί.

Εδώ, χρησιμοποιούμε μια διαφορετική μορφή αυτής της λέξης-κλειδιού. Δηλαδή, this(). Ας πάρουμε ένα παράδειγμα,

 class Complex ( private int a, b; // constructor with 2 parameters private Complex( int i, int j )( this.a = i; this.b = j; ) // constructor with single parameter private Complex(int i)( // invokes the constructor with 2 parameters this(i, i); ) // constructor with no parameter private Complex()( // invokes the constructor with single parameter this(0); ) @Override public String toString()( return this.a + " + " + this.b + "i"; ) public static void main( String() args ) ( // creating object of Complex class // calls the constructor with 2 parameters Complex c1 = new Complex(2, 3); // calls the constructor with a single parameter Complex c2 = new Complex(3); // calls the constructor with no parameters Complex c3 = new Complex(); // print objects System.out.println(c1); System.out.println(c2); System.out.println(c3); ) )

Έξοδος :

 2 + 3i 3 + 3i 0 + 0i

Στο παραπάνω παράδειγμα, χρησιμοποιήσαμε thisλέξη-κλειδί,

  • να καλέσετε τον κατασκευαστή Complex(int i, int j)από τον κατασκευαστήComplex(int i)
  • να καλέσετε τον κατασκευαστή Complex(int i)από τον κατασκευαστήComplex()

Παρατηρήστε τη γραμμή,

 System.out.println(c1);

Here, when we print the object c1, the object is converted into a string. In this process, the toString() is called. Since we override the toString() method inside our class, we get the output according to that method.

One of the huge advantages of this() is to reduce the amount of duplicate code. However, we should be always careful while using this().

This is because calling constructor from another constructor adds overhead and it is a slow process. Another huge advantage of using this() is to reduce the amount of duplicate code.

Note: Invoking one constructor from another constructor is called explicit constructor invocation.

Passing this as an Argument

We can use this keyword to pass the current object as an argument to a method. For example,

 class ThisExample ( // declare variables int x; int y; ThisExample(int x, int y) ( // assign values of variables inside constructor this.x = x; this.y = y; // value of x and y before calling add() System.out.println("Before passing this to addTwo() method:"); System.out.println("x = " + this.x + ", y = " + this.y); // call the add() method passing this as argument add(this); // value of x and y after calling add() System.out.println("After passing this to addTwo() method:"); System.out.println("x = " + this.x + ", y = " + this.y); ) void add(ThisExample o)( o.x += 2; o.y += 2; ) ) class Main ( public static void main( String() args ) ( ThisExample obj = new ThisExample(1, -2); ) )

Έξοδος :

 Πριν περάσετε αυτό στη μέθοδο addTwo (): x = 1, y = -2 Αφού περάσετε αυτό στη μέθοδο addTwo (): x = 3, y = 0

Στο παραπάνω παράδειγμα, μέσα στον κατασκευαστή ThisExample(), παρατηρήστε τη γραμμή,

 add(this);

Εδώ, αποκαλούμε τη add()μέθοδο μεταβιβάζοντάς την ως επιχείρημα. Εφόσον αυτή η λέξη-κλειδί περιέχει την αναφορά στο αντικείμενο obj της κλάσης, μπορούμε να αλλάξουμε την τιμή των x και y μέσα στη add()μέθοδο.

ενδιαφέροντα άρθρα...