2015-09-02 4 views
-1

, поэтому я думаю, что чего-то не хватает. Я знаю, чтоНепонятно, как инициализируются мои переменные

  1. Если конструктор не поставляется, java делает его для вас.
  2. Если конструктор определен, стандартный конструктор java не используется.
  3. Конструктор используется для инициализации переменных

Вот несколько простых код:

class a { 

    int f; // a variable with no value 
    int c; // a variable later initialized by the constructor 
    int b = 5; // this will be second question, a less important one 

    a(){ 
     c = 1; // Constructor initiatives C, but not F 
    } 

    public static void main(String[] args){ 
     a var = new a(); 
     System.out.print(var.f); // Please see my comment below 
    } 


} 

Вот что я не понимаю. Почему печатается var.f? Я не инициализировал f в конструкторе, но ошибки компиляции и инициализации значения 0. Я не понимаю, как «0» инициализируется значением «f», несмотря на то, что я не использовал его в конструкторе

Что касается b = 5, я понимаю, что этот код приводит, однако, я не думаю, что я понимаю, что/кто выполняет инициализацию здесь, это новый оператор или что-то еще? Благодарю.

Edit: так как ответы до сих пор не адресация мой вопрос


Я знаю, значения по умолчанию. Я думал, что это был конструктор по умолчанию, который их назначил, не так ли? Если нет, что назначает значения по умолчанию?

+0

Что вы имеете в виду с '' null 'инициализируется' f '?? 'f' должен быть инициализирован до' 0'. –

+0

Прошу прощения, я имел в виду 0. Это опечатка – Sam

ответ

0

Java, как и большинство языков программирования, имеет значения по умолчанию для неинициализированных переменных. Каждый числовой тип переменной инициализируется значением -связанное значение. Boolean - false по умолчанию. Строки и все объекты имеют null в качестве значения по умолчанию.

Проверить документы для получения дополнительной информации: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

0

ИНТА примитивного типа данных. По определению примитивы не могут быть пустыми, поскольку они не являются объектами и будут иметь значение по умолчанию, если не инициализированы. Смотрите здесь: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Если вы хотите быть в состоянии иметь переменную, которая не инициализирована, вы можете использовать объектную эквивалент междунар java.lang.Integer

0

Переменные, объявленные, но не инициализирован являются заданное значение по умолчанию.

Ссылки принять значение по умолчанию null.

Примитивов принимают значения по умолчанию нулевого

В отношении вашего запроса на вашем примитивном Int переменных Ь, новый оператор не требуется, новый оператор используется при создании экземпляра ссылки. Когда создается экземпляр ссылки, объект создается и выделена память для JVM для этого объекта.

Строки являются ссылочной переменной, но может быть реализован с использованием нового ключевого слова, например:

String example = new String("abc"); 
    System.out.println(example); // prints abc. 

Обычно вы бы просто написать:

String example = "abc"; 

В последнем буквальным помещается в к «пул струн» ... Подробнее о пуле пула здесь можно узнать здесь: http://examples.javacodegeeks.com/core-java/lang/string/java-string-pool-example/

0

Если конструктор не поставляется, java делает его для вас.

Исправить.

Если конструктор определен, стандартный конструктор java не используется.

Это не сгенерировано.

Конструктор используется для инициализации переменных

Правильно.

c = 1; // Constructor initiatives C, but not F 

Неверно. Ваш код инициализирует c. Сгенерированный конструктор инициализирует оба.

Я не инициализирует п в конструкторе

Нет, но Java сделал.

Java генерирует следующий код для конструктора:

  1. супер вызов.
  2. Код инициализации по умолчанию для всех переменных, объявленных без инициализаторов. Значения по умолчанию: false, ноль, или null в зависимости от типа.
  3. Звонки на все анонимные блоки инициализатора. (2) и (3) происходят в текстовом порядке и поэтому могут чередоваться друг с другом.

Что касается б = 5, я понимаю, что этот код приводит, однако, я не думаю, что я понимаю, что/кто делает инициализацию здесь, это новый оператор или что-то еще?

См. Выше.

Мне известны значения по умолчанию. Я думал, что это был конструктор по умолчанию, который их назначил, не так ли?

No.

Если нет, что назначает значения по умолчанию?

Конструктор. Любой конструктор.

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