2016-04-17 2 views
0

У меня вопрос к ключевому слову this и scope scope в методах. В общем, я знаю, как использовать это ключевое слово, но запутался при наблюдении того же результата для всех трех вариантов ниже в методе баланс. Вопрос в том, какова правильная реализация опции и почему она рассматривает все варианты с тем же результатом. Означает ли это, что если в балансе метода нет локальной переменной, это ключевое слово игнорируется?это ключевое слово и как оно работает

Большое спасибо!

вариант # 1

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

вариант # 2

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

вариант # 3

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

Код

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()); 
    } 
} 

Результат для всех 3-х вариантов тот же: имя Elephant: Elephant1: возраст: 7 Поступил депозит для e1: 11 Весы для e1: 18

+0

2 и 3 не имеет никакой разницы.PLZ снова проверить –

+0

@RamanShrivastava, исправлено, спасибо – OKie

ответ

1

В Java this всегда ссылка на текущий объект , Доступ к объектным свойствам и методам текущего объекта можно получить без явного упоминания this. Какой из них вы хотите использовать (с упоминанием или без упоминания this), часто представляет собой просто руководство по стилю и кодированию.

Также см:

4

Помимо ситуаций, когда вам нужно передать или сохранить ссылку на объект внутри его метод экземпляра, вам понадобится ключевое слово this, когда для решения неквалифицированного имени требуется применение правил устранения неоднозначности.

Например, этот код должен его:

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

Идентификатор age может относиться к области члена age или параметра age. Компилятор применяет правило о том, что параметры и локальные переменные «теневые» поля с одинаковыми именами устраняют неоднозначность. Вот почему вы должны префикс age с this в задании; в противном случае поле не будет назначено.

Ваш метод balance, с другой стороны, не нуждается в ключевом слове this, поскольку он не имеет однозначных разрешений имен.

+0

спасибо dasblinkenlight – OKie

+0

Хотя мой ответ принят, это, безусловно, лучшее объяснение. – Elias

 Смежные вопросы

  • Нет связанных вопросов^_^