Другим более простым подходом является создание массива из 100 элементов с восходящими числами и сортировка его случайным образом. Это приводит к действительно короткому и, по моему мнению, простейшему фрагменту.
function randomNumbers() {
const numbers = [ ...Array(100).keys() ].map(num => num + 1);
numbers.sort(() => Math.random() - 0.5);
return numbers.slice(0, 8);
}
Правила для определенного присвоения являются довольно трудными (глава 16 чтения 3-го Ed JLS). Это не практично для осуществления определенного присвоения на полях. В настоящий момент даже возможно наблюдать заключительные поля, прежде чем они будут инициализированы.
Вот соглашение. Когда Вы звоните
TestClass tc = new TestClass();
эти new
, команда выполняет четыре важных задачи:
false
, объекты к null
). , Таким образом, Ваши поля и 'b' и инициируются к null
, и переинициированного в конструкторе. Этот процесс не важен для вызова метода, таким образом, локальная переменная 'c' никогда инициализирована.
HTH
пз: для серьезно страдающего бессонницей, читайте это .
Язык определяет его этот путь.
Переменные экземпляра значения по умолчанию типа объекта к тому, чтобы быть инициализированным к пустому указателю. Локальные переменные типа объекта не инициализируются по умолчанию, и это - ошибка времени компиляции для доступа к неопределенной переменной.
раздел See 4.5.5 в здесь http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5
Компилятор может выяснить, что c никогда не будет устанавливаться. B переменная могла быть установлена кем-то еще после того, как конструктора вызывают, но прежде doSomething (). Сделайте b частный, и компилятор может быть в состоянии помочь.
Компилятор может сказать от кода для doSomething (), что c объявляется там и никогда не инициализируется. Поскольку это локально, нет никакой возможности, что это инициализируется в другом месте.
Это не может сказать, когда или куда Вы собираетесь назвать doSomething (). b является общедоступным участником. Совершенно возможно, что Вы инициализировали бы его в другом коде прежде, чем назвать метод.