`
Читать книги » Книги » Компьютеры и Интернет » Программирование » Java: руководство для начинающих (ЛП) - Шилдт Герберт

Java: руководство для начинающих (ЛП) - Шилдт Герберт

Перейти на страницу:

“Один интерфейс — множество методов” — главный принцип 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 объявляются все исключения, кроме RuntimeException и 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. Ввод-вывод данных

Для чего в Java определены как байтовые, так и символьные потоки?Байтовые потоки с самого начала были определены в Java. Они особенно удобныдля ввода-вывода двоичных данных и поддерживают произвольный доступ к ним вфайлах. А символьные потоки оптимизированы для представления в уникоде.

Как известно, ввод-вывод данных на консоль осуществляется в текстовом виде.Почему же в Java для этой цели используются байтовые потоки?Стандартные потоки ввода-вывода System, in, System.out и System.err былиопределены в Java прежде символьных потоков.

Как открыть файл для чтения байтов?Ниже приведен один из способов открытия файла для ввода данных типа byte.FilelnputStream fin = new FilelnputStream("test");

Как открыть файл для чтения символов?Ниже приведен один из способов открытия файла для ввода символов.FileReader fr = new FileReader("test");

Как открыть файл для ввода-вывода с произвольным доступом?Ниже приведен один из способов открытия файла для ввода-вывода с произвольным доступом.randfile = new RandomAccessFile("test", "rw");

Как преобразовать числовую строку "123.23" в двоичный эквивалент?Для того чтобы преобразовать числовую строку в двоичный эквивалент, следует воспользоваться одним из методов синтаксического анализа, определенных в классахоболочек типов, например Integer или Double.

Напишите программу, которая будет копировать текстовые файлы. Видоизмените еетаким образом, чтобы все пробелы заменялись дефисами. Используйте при написании программы классы, представляющие байтовые потоки, а также традиционныйспособ закрытия файла явным вызовом метода close ()./ Копирование текстового файла с заменой пробелов дефисами.В этой версии программы используются байтовые потоки.Для того чтобы воспользоваться этой программой, укажитев командной строке имена исходного и целевого файлов. Например:java Hyphen source target/import java.io.*;class Hyphen {public static void main(String args[]){int i;FilelnputStream fin = null;FileOutputStream fout = null;Приложение А. Ответы на вопросы для самопроверки 579// проверить сначала, указаны ли оба файлаif(args.length !=2 ) {System.out.println("Usage: Hyphen From To");return;}// скопировать файл и заменить в нем пробелы дефисамиtry {fin = new FilelnputStream(args[0]);fout = new FileOutputStream(args[1]);do {i = fin.read();// преобразовать пробел в дефисif((char)i == ' ') i =if(i != -1) fout.write(i);} while(i != -1);} catch(IOException exc) {System.out.println("I/O Error: " + exc);} finally {try {if (fin != null) fin.closeO;} catch(IOException exc) {System.out.println("Error closing input file.");}try {if(fin != null) fout.close();} catch(IOException exc) {System.out.println("Error closing output file.");}}}}

Перейти на страницу:

Откройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение Java: руководство для начинающих (ЛП) - Шилдт Герберт, относящееся к жанру Программирование. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.

Комментарии (0)