Spec-Zone .ru
спецификации, руководства, описания, API
|
Вопрос: Что случилось со следующей программой?
public class SomethingIsWrong { public static void main(String[] args) { Rectangle myRect; myRect.width = 40; myRect.height = 50; System.out.println("myRect's area is " + myRect.area()); } }
Ответ: код никогда не создает a Rectangle
объект. С этой простой программой компилятор генерирует ошибку. Однако, в более реалистической ситуации, myRect
мог бы быть инициализирован к null
в одном месте скажите в конструкторе, и используемый позже. В этом случае программа скомпилирует очень хорошо, но генерирует a NullPointerException
во времени выполнения.
Вопрос: следующий код создает один массив и один строковый объект. Сколько ссылок на те объекты существует после того, как код выполняется? Любой - объект, имеющий право на сборку "мусора"?
... String[] students = new String[10]; String studentName = "Peter Smith"; students[0] = studentName; studentName = null; ...
Ответ: есть одна ссылка на students
у массива и того массива есть одна ссылка на строку Peter Smith
. Никакой объект не имеет право на сборку "мусора".
Вопрос: Как программа уничтожает объект, который она создает?
Ответ: программа явно не уничтожает объекты. Программа может установить все ссылки на объект к null
так, чтобы это стало имеющим право на сборку "мусора". Но программа фактически не уничтожает объекты.
Осуществление: Фиксируйте вызванную программу SomethingIsWrong
показанный рассматриваемый 1.
Ответ: См. SomethingIsRight
:
public class SomethingIsRight { public static void main(String[] args) { Rectangle myRect = new Rectangle(); myRect.width = 40; myRect.height = 50; System.out.println("myRect's area is " + myRect.area()); } }
Осуществление: Учитывая следующий class, вызванный NumberHolder
, запишите некоторый код, который создает экземпляр class, инициализирует его две задействованных переменные, и затем выводит на экран значение каждой задействованной переменной.
public class NumberHolder { public int anInt; public float aFloat; }
Ответ: См. NumberHolderDisplay
:
public class NumberHolderDisplay { public static void main(String[] args) { NumberHolder aNumberHolder = new NumberHolder(); aNumberHolder.anInt = 1; aNumberHolder.aFloat = 2.3f; System.out.println(aNumberHolder.anInt); System.out.println(aNumberHolder.aFloat); } }