Java: руководство для начинающих
Шрифт:
Какой класс является суперклассом всех остальных классов? Класс Object. П. Класс, который содержит хотя бы один абстрактный метод, должен быть объявлен абстрактным. Верно или не верно? Верно.
Какое ключевое слово следует использовать для создания именованной константы? Ключевое слово final. Глава 8. Пакеты и интерфейсы
Используя код, созданный в примере для опробования 8.1, поместите в пакет qpack интерфейс ICharQ и все три реализующие его класса. Класс IQDemo должен остаться в пакете, используемом по умолчанию. Покажите, как импортировать и использовать классы из пакета qpack. Для того чтобы включить интерфейс ICharQ и реализующие его классы в пакет qpack, следует поместить
Что такое пространство имен? Почему так важна возможность его разделения на отдельные области в Java? Пространство имен — это область объявлений. Разделяя пространство имен на отдельные области, можно предотвратить конфликты имен.
Содержимое пакетов хранится в . каталогах
В чем отличие доступа, определяемого ключевым словом protected, от доступа по умолчанию? Член класса с доступом типа protected может быть использован в пределах текущего пакета, а также в подклассах данного класса, относящихся к любому пакету. А член класса с доступом по умолчанию может быть использован только в пределах текущего пакета.
Допустим, классы, содержащиеся в одном пакете, требуется использовать в другом пакете. Какими двумя способами можно этого добиться? Для того чтобы воспользоваться членом пакета, нужно указать его имя полностью или же импортировать этот член с помощью оператора import.
“Один интерфейс — множество методов” — главный принцип Java. Какое языковое средство лучше всего демонстрирует этот принцип? Этот принцип объектно-ориентированного программирования лучше всего демонстрирует интерфейс.
Сколько классов могут реализовать один и тот же интерфейс? Сколько интерфейсов может реализовать класс? Один интерфейс может быть реализован любым количеством классов. Класс может реализовать произвольное число интерфейсов.
Может ли один интерфейс наследовать другой интерфейс? Да, может. Механизм наследования распространяется и на интерфейсы.
Создайте интерфейс для класса Vehicle, рассмотренного в главе 7, назвав его IVehicle. interface IVehicle { // возвратить дальность действия транспортного средства int range; // рассчитать объем топлива, требующегося // для прохождения заданного пути double fuelneeded(int miles); // Методы доступа к переменным экземпляра. int getPassengers; void setPassengers(int p); int getFuelcap; void setFuelcap(int f); int getMpg; void setMpg(int m); }
Переменные, объявленные в интерфейсе, неявно считаются как static и final. Какие преимущества это дает? Переменные, объявленные в интерфейсе, могут служить в качестве именованных констант, общих для всех файлов программы. Доступ к ним обеспечивается путем импорта того интерфейса, в котором они объявлены.
Пакет, по существу, является контейнером для классов. Верно или не верно? Приложение А. Ответы на вопросы для самопроверки 575 Верно.
Какой стандартный пакет импортируется по умолчанию в любую программу на Java? Пакет java.lang. Глава 9. Обработка исключений
Какой класс находится на вершине иерархии исключений? На вершине иерархии исключений находится класс Throwable.
Объясните вкратце, как пользоваться ключевыми словами try и catch? Ключевые слова try и catch используются совместно. Операторы программы для отслеживания исключений помещаются в блок try. А перехват и обработка исключений осуществляются в блоке catch.
Какая ошибка допущена в приведенном ниже фрагменте кода? II ... vals[18] = 10; catch (ArraylndexOutOfBoundsException exc) { // обработать ошибку } Блоку catch не предшествует блок try.
Что произойдет, если исключение не будет перехвачено? Если исключение не будет перехвачено, произойдет аварийное завершение программы.
Какая ошибка допущена в приведенном ниже фрагменте кода? class A extends Exception { ... class В extends А { ... II ... try { II ... } catch (A exc) { ... } catch (B exc) { ... } В данном фрагменте кода оператор catch для суперкласса предшествует оператору catch для подкласса. А поскольку оператор catch для суперкласса может обработать также исключения, относящиеся к подклассу, то в программе окажется код, недоступный для выполнения.
Может ли внутренний блок catch повторно генерировать исключение, которое будет обработано во внешнем блоке catch? Да, исключения могут генерироваться повторно.
Блок finally — последний фрагмент кода, выполняемый перед завершением программы. Верно или неверно? Обоснуйте свой ответ. Неверно. Блок finally выполняется по завершении блока try.
Исключения какого типа необходимо явно объявлять с помощью оператора throws, включаемого в объявление метода? С помощью оператора throws объявляются все исключения, кроме Runtime Exception и Error.
Какая ошибка допущена в приведенном ниже фрагменте кода? class MyClass { // ... } // ... throw new MyClass; Класс MyClass не является производным от класса Throwable. С помощью оператора throw могут генерироваться лишь те исключения, которые являются подклассами, производными от класса Throwable.
Отвечая на вопрос 3 упражнения для самопроверки по материалу главы 6, вы создали класс Stack. Добавьте в него специальные исключения для реагирования на попытку поместить элемент в переполненный стек и извлечь элемент из пустого стека. // Исключение, возникающее при переполнении стека, class StackFullException extends Exception { int size; StackFullException (int s) { size = s; } public String toString { return "\nStack is full. Maximum size is " + size; } } // Исключение, возникающее при обращении к пустому стеку, class StackEmptyException extends Exception { public String toString { return "\nStack is empty."; } } // Класс, реализующий стек для хранения символов, class Stack { private char stck[]; // Массив для хранения элементов стека private int tos; // Вершина стека // построить пустой стек заданного размера Stack(int size) { stck = new char[size]; // выделить память для стека tos = 0; } // построить один стек из другого стека Stack(Stack ob) { tos = ob.tos; stck = new char[ob.stck.length]; Приложение А. Ответы на вопросы для самопроверки 577 // скопировать элементы for(int i=0; i < tos; i++) stck[i] = ob.stck[i]; } // построить стек с исходными значениями Stack(char а [ ]) { stck = new char[a.length]; for(int i = 0; i < a.length; i++) { try { push (a [i]); } catch(StackFullException exc) { System.out.println(exc); } } } // поместить символы в стек void push(char ch) throws StackFullException { if(tos==stck.length) throw new StackFullException(stck.length); stck[tos] = ch; tos++; } // извлечь символы из стека char pop throws StackEmptyException { if(tos==0) throw new StackEmptyException; tos — ; return stck[tos]; } }
Какими тремя способами можно сгенерировать исключение? Исключение может быть сгенерировано в результате ошибки в виртуальной машине Java, ошибки в программе или явным образом с помощью оператора throw.
Назовите два подкласса, производных непосредственно от класса Throwable. Классы Error и Exception
Что такое многократный перехват? Многократным называется такой перехват, который позволяет перехватывать два и больше исключений одним оператором catch.
Следует ли перехватывать в программе исключения типа Error? Нет, не следует. Глава 10. Ввод-вывод данных