2015-08-14 3 views
1

У меня есть Java-программа, в которой используется параметризованный конструктор с именами параметров, аналогичными именам экземпляров. В таком случае нам нужно использовать это ключевое слово. Но когда я не использую это ключевое слово, он не дает никакой ошибки, вместо этого он инициализирует переменные экземпляра со значениями по умолчанию.Почему эта программа не дает ошибку двусмысленности

class Demo{ 
    int a; 
    Demo(int a) 
    { 
     a = a; 
    } 

    public static void main(String args[]) 
    { 
     Demo d = new Demo(5); 
    } 
} 

Но когда эта программа выполнена, значение a становится 0. Как?

+1

Java инициализирует члены класса известными значениями по умолчанию, в этом случае 'int' по умолчанию считается' 0', так как вы никогда его не изменяете, значение остается неизменным ('0') – MadProgrammer

+0

Фактически, при наличии соответствующих предупреждений , вы можете увидеть тот, который говорит вам, что назначение параметров - это плохо. – Wormbo

ответ

7

Там нет никакой двусмысленности - в a = a;, какa «s однозначно относятся к параметру, потому что это„внутренняя“переменная называется a.

1

Вы переписываете локальную переменную a в свой код, вместо этого присваивая ее значение переменной класса. И переменная класса инициализируется нулем.

ли

Demo(int a) { 
    this.a = a; 
} 
+0

Я знаю, что нам нужно использовать это ключевое слово. Но мой вопрос заключался в том, как значение ценности становится нулевым. – dpaksoni

2

Потому что это вполне допустимо, чтобы назначить одинаковое значение одной переменной. Таким образом, a = a - это действительно действующий код.

Но вы должны назначить значение a (переменная метода) до this.a (переменная экземпляра). Поэтому вам нужно использовать ключевое слово this для ссылки на переменную экземпляра.

Demo(int a) { 
    this.a = a; 
} 

Если вы не хотите использовать this ключевое слово, то вам нужно переименовать переменный метод как

Demo(int b) { 
    a = b; // a will refer to instance variable in this case. 
} 

мой вопрос был как-й значение становится равным нуль.

См: Primitive Data Types

Примитивные переменный типа данных инициализируются значением по умолчанию. И для int - значение по умолчанию.

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