Контрольная работа: Программирование на Java
static {
for (int i = 0; i < LIMIT; i++) {
square[i] = i * i;
}
}
Статический блок запрашивается только один раз во время создания класса. Теперь не нужен конструктор, и можно вызывать статическую функцию getSquare() без предшествующего создания класса. Улучшенныйкодвыглядитследующимобразом:
public class SmallSquares {
private static final int LIMIT = 10;
private static final int[] square = new int[LIMIT];
static {
for (int i = 0; i < LIMIT; i++) {
square[i] = i * i;
}
}
public static int getSquare(int i) {
// Нет обработки ошибки, предположим,0<=i<limit
return square[i];
}
public static void main(String[] args) {
System.out.println("3 squared is " + getSquare(3));
}
}
Приведем пример применения блока динамической инициализации. Код в программе, ConstructorExample (пример конструктора), снова инициализирует массив целых чисел. Существует две версии конструктора. Первая - конструктор без аргумента, который по умолчанию определяет значение "Безымянный" ("Anonymous"). Во второй версии есть один аргумент: значение имя пользователя (userName). Конструкторы объединены, так как квадрат должен инициализироваться в каждом случае.
public class ConstructorExample {
private final String userName;
private final static int[] square = new int[10];
public ConstructorExample() {
this("Anonymous");
}