2016-04-17 9 views
0

Ich habe eine Frage zu Schlüsselwort dies und Variablen Bereich in Methoden. Im Allgemeinen weiß ich, wie man dieses Schlüsselwort verwendet, aber wurde verwirrt, wenn das gleiche Ergebnis für alle 3 Optionen unten in Methode Balance beobachtet wurde. Die Frage ist, was ist die korrekte Implementierung der Option und warum es alle Optionen mit dem gleichen Ergebnis behandelt. Bedeutet dies, dass, wenn keine lokale Variable im Methodensaldo vorhanden ist, dieses Schlüsselwort ignoriert wird?dieses Schlüsselwort und wie es funktioniert

Vielen Dank!

Option # 1

public int balance(int balance) { 
     this.age = this.age + balance; 
     return age; 
    } 

Option # 2

public int balance(int balance) { 
     age = age + balance; 
     return age; 
    } 

Option # 3

public int balance(int balance) { 
     age = age + balance; 
     return this.age; 
    } 

-Code

package com; 
public class Elephant { 

    private String name; 
    private int age; 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setAge(int age) { 
     if (age > 0) { 
      this.age = age; 
     } 
    } 

    public int balance(int balance) { 
     age = age + balance; 
     return age; 
    } 

    public int getAge() { 
     return age; 
    } 

    public Elephant(String name, int age) { 
     this.name = name; 
     if (age > 0) { 
      this.age = age; 
     } 
    } 
} 


package com; 

import java.util.Scanner; 

public class MainClass { 

    public static void main(String arg[]) { 
     Elephant e1 = new Elephant("Elephant1: ", 7); 
     System.out.printf("Elephant name: %s age: %s \n", e1.getName(), e1.getAge()); 
     Scanner sc = new Scanner(System.in); 
     int i = sc.nextInt(); 
     e1.balance(i); 
     System.out.printf("Entered deposit for e1: %d \n", i); 
     System.out.printf("Balance for e1: %s", e1.getAge()); 
    } 
} 

Ergebnis für alle drei Optionen ist der gleiche: Elephant Name: elephant1: Alter: 7 Eingetragen Anzahlung für e1: 11 Saldo e1: 18

+0

2 und 3 haben keinen Unterschied.Bitte überprüfen Sie erneut –

+0

@RamanShrivastava, korrigiert, danke – OKie

Antwort

4

Neben Situationen, wenn Sie von innen einen Verweis auf das Objekt zu übergeben oder speichern müssen Bei seiner Instanzmethode benötigen Sie das Schlüsselwort this, wenn die Auflösung eines nicht qualifizierten Namens die Anwendung von Disambiguierungsregeln erfordert.

Zum Beispiel dieser Code benötigt es:

public void setAge(int age) { 
    if (age > 0) { 
     this.age = age; 
    } 
} 

Identifier age das Mitglied Feld age oder den Parameter age beziehen könnte. Der Compiler wendet die Regel an, dass Parameter und lokale Variablen "Schattenfelder" mit identischen Namen versehen, um Mehrdeutigkeiten zu vermeiden. Deshalb müssen Sie in der Zuordnung age mit this voranstellen; Andernfalls wird das Feld nicht zugewiesen.

Ihre balance Methode, auf der anderen Seite, braucht kein Stichwort this überhaupt, weil es keine mehrdeutigen Namensauflösungen hat.

+0

danke dasblinkenlight – OKie

+0

Obwohl meine Antwort akzeptiert wurde, ist dies definitiv eine bessere Erklärung. – Elias

Verwandte Themen