Ответы на контрольные вопросы

Глава 2

A1:

b. label

A2:

Синтаксис определяет правила, по которым программа обрабатывается компилятором. Семантика определяет логику вычислений, выполняемую программой.

A3:

Компьютеры представляют данные в виде набора 1  и 0.

A4:

Тип данных – это обозначение, показывающее использование памяти в компьютере.

A5:

Тип short задается двумя байтами, а целое представлено четырьмя байтами.

A6:

Первые два предложения правильны, а третье – нет, так как при сложении двух чисел short получается автоматически результат типа int; требуется явное преобразование типа:

short result = ( short )( s1 + s2 );

A7:

Численные типы данных автоматически преобразуются в более « широкий» тип во время арифметических операций.

A8:

Можно присвоить byte или short переменной типа short.

A9:

Явное преобразование требуется при преобразовании в более «узкий» тип. Например:

int integer = 50;

short s = ( short ) integer;

A10:

Константа определяется с использованием ключевого слова final:

final int i = 50;

Глава 3

A1:

Операция деления по модулю (%) возвращает остаток от деления целых чисел:

10 % 3 = 1, или 10 / 3 = 3 с остатком 1

A2:

Операция && - это логическое AND и используется при сравнении с двумя значениями:

if( a > 5 && a < 10 ) ...

Значение – true, если значение a между 5 и 10.

Операция & - это побитовое AND:

3 & 9 = 1, или 0000 0011 & 0000 1001 = 0000 0001

A3:

Таблица истинности – это список всех возможных входных значений и результата. Например, таблица истинности для операции AND:

A B A&B

0  0  0

0  1  0

1  0  0

1  1  1

A4:

21 & 3 == 0001 0101 & 0000 0011 = 0000 0001 = 1 (AND)

A5:

21 | 3 == 0001 0101 | 0000 0011 = 0001 0111 = 23 (OR)

A6:

21 ^ 3 = 0001 0101 ^ 0000 0011 = 0001 0110 = 22 (XOR)

A7:

>>сдвиг вправо

>>> сдвиг вправо с заполнением нулями.

>> передвигает вправо левый бит.

A8:

5 * 5 + 5 эквивалентно ( 5 * 5 ) + 5 = 25 + 5 = 30

A9:

5 + 5 * 5 эквивалентно 5 + ( 5 * 5 ) = 5 + 25 = 30

A10:

Вычисляет:

int a = 5;

a += 6 * ++a / 2 – 6 * 9 + 2

a += ( ( ( 6 * ++5 ) / 2 ) – (6 * 9) ) + 2 =

a += ( ( ( 6 * 6 ) / 2 ) – (6 * 9) ) + 2 =

a += ( ( ( 36 ) / 2 ) – (54) ) + 2 =

a += ( 18 – 54 ) + 2 =

a += ( –36 ) + 2 =

a += -34 =

a = a – 34 =

a = 5 – 34 =

a = -29

Глава 4

A1:

Обычная форма if:

if( boolean_value ) {

  // Execute these statements

}

A2:

Если булевское значение в if равно false, то else –блок выполняется:

if( boolean_value ) {

  // boolean is true: Execute these statements

}

else {

  // boolean is false: Execute these statements

}

A3:

Нет ограничений на количество блоков else if после блока if.

A4:

Оператор switch использует только int или переменные типов, которые преобразуются в int.

A5:

Оператор do-while предполагает, что тело цикла выполняется хотя бы один раз.

A6:

Бесконечный цикл – это цикл, который не останавливается никогда. Например:

int a = 10;

while( a > 0 ) {

  // Never change the value of a

}

A7:

Наиболее популярный оператор цикла -  цикл for.

A8:

Пропустить операторы внутри текущего цикла на данной итерации можно с помощью оператора continue.

A9:

Прекратить выполнение цикла можно с помощью оператора break.

A10:

Прервать вложенный цикл можно, используя оператор break с меткой:

outer:

for( int a=0; a<10; a++ ) {

  for( int b=0; b<10; b++ ) {

  if( a * b == 25 ) break outer;

  }

}

Глава 5

A1:

Определение метода имеет вид:

return_type method_name( parameter_list )

{

  declarations and statements...

}


A2:

Сигнатура метода включает имя метода, список параметров и тип результата.


A3:

Указать, что метод не возвращает значение можно с помощью void как типа возвращаемого значения.


A4:

Три области действия:

    Класс: доступ во всех методах класса – поле класса Блок: доступ внутри блока или внутри вложенных блоков, там, где находится определение переменной Метод: Специальный тип для меток, используемых с break и continue


A5:

Рекурсия – это конструкция, когда метод вызывает сам себя.


A6:

Любая задача, решенная с помощью рекурсии, может быть решена без нее с использованием циклов, но обычно решение с помощью рекурсии более изящное и короткое.


A7:

Перегрузка методов определяет множество методов с одним и тем же именем, но с разной сигнатурой, причем тип возвращаемого результата не учитывается.


A8:

Оба метода могут быть в классе, так как их сигнатуры различаются. Если два метода различаются только тиром возвращаемого значения, то они не могут присутствовать в классе.


A9:

Доступ к методам класса Math можно получить, задав при вызове метода Math с точкой и именем метода, например:

Math. tan( angle )

Глава 6

A1:

Инкапсуляция – это механизм, когда данные и методы для их обработки объединяются вместе и используются для того, чтобы дать возможность другим классам использовать объект, причем другие классы могут ничего не знать о реализации методов.

A2:

Методы get/set осуществляют доступ к защищенным полям класса причем метод set при установке значения переменной выполняет проверку корректности значения.

A3:

Конструктор - это метод для инициализации объекта класса, он вызывается при создании объекта.

A4:

Переменная  public доступна из объектов вне класса, а переменная private доступна только внутри класса.

A5:

Переменная this используется, чтобы различать параметры метода и поля класса внутри методов..

A6:

Композиция – это конструкция, когда один класс содержит объект другого класса.

A7:

Сборка мусора – это действие, выполняемое в Java Virtual Machine (JVM) для очистки памяти, которая больше не используется в приложении Java. Она  обычно выполняется, когда памяти не хватает.

A8:

Внутренние классы – это классы, определенные внутри другого класса. Внутренние классы могут быть обычными, статическими или анонимными.

A9:

"Передача по ссылке" означает, что, когда переменная или объект передаются внутрь метода, не создается копия передаваемого объекта или переменной, при этом возможно изменение значения передаваемого объекта или переменной.

A10:

Ссылка на объект позволяет изменять значения полей объекта, указывая ссылку на него.

Глава 7

A1:

Перекрытие метода в классе-наследнике означает, что Вы обеспечиваете новую реализацию существующего в родительском классе метода.

A2:

Класс, от которого наследуют, называется родительским или суперклассом.

A3:

Определите класс как final.

A4:

Полиморфизм означает, что используя ссылку на базовый класс, можно вызывать методы класса-наследника.

A5:

В классе наследнике.

A6:

В родительском классе, общем для всех классов-наследников.

A7:

Конструктор базового класса вызывается первым.

A8:

Ключевое слово super позволяет ссылаться на методы и поля родительского класса прямо из класса-наследника.

A9:

Метод super() вызывает конструктор базового класса.

A10:

Если Вы хотите, чтобы вызывался метод finalize() для базового класса, его надо явно вызывать в методе finalize() класса наследника, причем вызов должен стоять после того, как Вы завершили уничтожение Вашего класса.

Глава 8

A1:

Нет, все интерфейсы и их методы public и abstract по смыслу.

A2:

Нет, все методы абстрактны.

A3:

Вы можете реализовать интерфейс, используя ключевое слово implements в определении класса и определяя каждый метод из интерфейса в классе.

A4:

Множественное наследование – это создание класса от двух или более родительских классов (заметим, что Java не поддерживает множественное наследование).

A5:

Если класс наследует от двух классов, а те наследуют от одного и того же класса, то возникает вопрос: как объекты будут созданы в памяти, должны ли они иметь двойную копию полей, наследуемых от «самого базового» класса. Компилято не будет знать, к какой копии будет выполняться обращение.

A6:

Если функциональность специфична для объектов данного типа, то лучше использовать класс. В интерфейс выносятся методы, которые обеспечивают некоторую общую для нескольких разных семейств классов функциональность.

Глава 9

A1:

Вы выбрасываете исключение, создавая объект типа исключения и используя ключевое слово throw:

MyException ex = new MyException( "This is my exception" );

throw ex;

или:

throw new MyException( "This is my exception" );

A2:

Обработка исключений выполняется включением кода, который может выбрасывать исключения в блок try, а затем «ловлей» исключений в блоках catch. Если метод accelerate() может выбрасывать исключение CarException, то обработка выглядит следующим образом:

try {

  accelerate();

}

catch( CarException ex ) {

  ex. printStackTrace();

}

A3:

try отмечает начало блока try; блок try содержит методы, которые могут выбрасывать исключения,  блок используется при обработке исключений.

A4:

java. lang. Throwable

A5:

Исключения, которые наследуют от класса java. lang. Exception.

A6:

Исключения, которые наследуют от класса java. lang. RuntimeException.

A7:

Метод подкласса может выбрасывать только те исключения, которые явно указаны в методе родительского класса. Единственное допущение – метод в классе-наследнике может выбрасывать исключение типа подкласса от исключения метода базового класса.

A8:

throws используется, чтобы указать в сигнатуре метода, какие исключения метод может выбрасывать.

A9:

Следующие действия:

Создать класс, который наследует от класса java. lang. Exception. В классе, который будет выбрасывать это исключение, создать метод и указать пользовательское исключение после ключевого слова throws. В этом методе создать объект типа пользовательского исключения и выбросить его с помощью ключевого слова throw.

A10:

Исключения – это классы, объекты которых могут пересылаться из методов одного класса в методы другого класса. Они позволяют Вам определять собственные поля и методы в классах исключений, чтобы наилучшим образом диагностировать причину ошибки.

Глава 10

A1:

Классы-оболочки  - это сохраняемые классы, они могут пересылаться между различными программами и компьютерами по сети.

A2:

Используйте метод Integer. parseInt( String s ).

A3:

Неизменяемость означает, что значении объекта не может изменяться. Чтобы изменить значение, надо создать новый объект данного типа.

A4:

Строки неизменяемы в Java, потому что они хранятся в памяти во время работы программы, если есть такая строка в памяти, то она не будет повторно записываться в память. Значит, Вы не сможете просто изменить значение строки.

A5:

Эта таблица представляет все строки программы. Это сделано для оптимизации распределения памяти, чтобы одна строка не повторялась несколько раз.

A6:

Класс String неизменяемый, а класс StringBuffer позволяет изменять свое содержимое в памяти без создания нового объекта, как это делается в классе String..

A7:

Класс StringBuffer имеет метод reverse() для инверсирования строки.

A8:

Класс StringTokenizer – это утилита, которая выделяет из строки токены, ограниченные некоторыми разделителями.

A9:

Ограничители – это символы, служащие разделителями между токенами.

A10:

Класс используется при разборе документов на слова, значения, разделенные, например, запятыми в файлах comma-separated value (CSV).

Глава 11

A1:

Массив – это структура, встроенная в Java, а ArrayList  - это класс. Массив имеет фиксированный размер, а класс ArrayList обеспечивает возможность изменения размера при необходимости.

A2:

Класс Vector – поточно-безопасный; это означает, что несколько потоков могут использовать объект Vector одновременно без опасности разрушения данных.

A3:

Хэш-таблица быстрее выполняет вставку и получение данных, чем дерево, поэтому, если ее можно использовать для Ваших данных, то лучше использовать ее..

A4:

Коллизия в хэш-таблицах случается, когда два объекта дают одно и то же значение хэш-кода. Она разрешается применением другого алгоритма, чтобы вычислить другой хэш-код.

A5:

В дереве поиск выполняется очень быстро, потому что пир вставке объектов и удалении их выполняется балансировка дерева. Тогда число подузлов слева и справа от узла примерно равно. Тогда время поиска  пропорционально величине ln(n), где n – число узлов в дереве.

A6:

Set не может хранить повторяющиеся значения.

A7:

HashMap поддерживает ключи в хэш таблице, а TreeMap – ключи в дереве. Деревья отсортированы, а хэш-таблицы – нет. Вывод из TreeMap всегда будет отсортирован, а вывод HashMap - нет.

A8:

Стек – это структура, в которой выполняется хранение данных по принципу «последним вошел - первым вышел»: LIFO: Last In, First Out.

A9:

Стек организован по принципу LIFO, a очередь – по принципу FIFO: «первый вошел – первым вышел».

A10:

Итератор – это интерфейс, используемый для перехода через значения, лежащие в классах коллекциях Java. Он имеет три метода:

hasNext(): проверяет, есть ли еще элементы в коллекции

next(): возвращает следующий элемент в коллекции.

remove(): удаляет элемент, возвращенный методом next().

Глава 12

A1:

java. io. InputStream и java. io. OutputStream

A2:

java. io. Reader и java. io. Writer

A3:

Примитивные типы

A4:

java. io. BufferedReader

A5:

java. io. PrintStream

A6:

Цепочечная связь – это вставка существующего потока в другой поток, чтобы легче выполнить чтение или запись. Это очень удобно, потому что все потоки выполняют специфические операции, поэтому лучше выбирать те потоки, которые делают это с Вашими данными наилучшим образом.

A7:

Класс java. io. StreamTokenizer выполняет разбор входного потока, в соответствии с указанными разделителями.

Глава 13

A1:

AWT  контейнеры  - это тот объект, куда вставляются другие объекты AWT

A2:

. Java имеет две графические библиотеки по некоторым причинам: AWT реализована в JDK 1.01, а затем была создана более эффективная библиотека Swing. Но с использованием AWT написано столько приложений, что удалять ее нет смысла.

A3:

Объект List похож на объект Choice, но в List выводится более одного пункта, кроме того, он позволяет выбирать более одного пункта одновременно.

A4:

Класс GridBagLayout – наиболее мощный из менеджеров компоновки, но он и более сложен.

Глава 14

A1:

Представление событий в виде объектов позволяет реализовать более удобное взаимодействие между объектами, которые генерируют события, и теми объектами, которые ожидают этих событий.

A2:

Объявление объекта как слушателя события говорит о том, что он хочет быть проинформирован, что событие произошло. Это более эффективная модель, чем используемая в JDK 1.01.

A3:

Событие высокого уровня – это событие типа нажатия на кнопку или выбора из списка (создаваемое программно). Событие низкого уровня – это событие, связанное с аппаратурой, например, движением мыши.

A4:

Классы-адаптеры – это специальные классы JDK, которые реализуют интерфейс (обычно методы, которые ничего не делают), чтобы Вам не надо было бы переопределять все методы интерфейса, а только нужный Вам.

Глава 15

A1:

JavaBean обеспечивает методы get и set для задания и получения значений свойств. Если свойство только читается, то метод set опускается. Обычно JavaBean имеют визуальное представление и в панелях инструментов и на экране.

A2:

Класс SimpleBeanInfo обеспечивает метод getIcon(), и этот метод может быть вызван инструментами GUI для получения иконки.

A3:

Свойство связанное – это такое свойство, которое может оповещать тех, кому это надо, о своем изменении.

A4:

Ограниченное свойство  - это такое свойство, которое также может оповещать о своем изменении, но оно может обеспечить и наложение запрета на ео изменение.

Глава 16

A1:

Это обе графические библиотеки. AWT – это более старая библиотека, которая использует графическую систему операционной системы. Swing – это новая библиотека, целиком реализованная на Java.

A2:

Легковесность означает, что они потребляют мало ресурсов, по сравнению с компонентами  AWT.

A3:

Объекты JTextField ограничены по размеру и предназначены для ввода небольшой порции данных – обычно одного значения или строки. JTextArea включает несколько строк текста.

A4:

Интерфейс ListSelectionListener используется, чтобы определить, какой пункт в списке был выбран.

Глава 17

A1:

Класс TableModel управляет всеми данными, хранящимися в таблице JTable.

A2:

Класс TreeModel управляет данными в дереве JTree.

A3:

Массив, вектор или комбинации обеих структур используются для создания JTree.

A4:

Класс JOptionPane может обеспечить  множество разных видов. Иконки, кнопки, текстовые поля и т. д. могут изменяться в соответствии с параметром MessageType, передаваемом в конструкторе.

Глава 18

A1:

Процессы содержат потоки (threads). Потоки – это легковзвешенные процессы, которые управляются самой JVM, а не операционной системой.

A2:

Метод sleep() объявлен как статический static, что означает, что для его вызова не надо создавать объект типа Thread, а вызывать его по имени класса.

A3:

Ключевое слово  synchronize определяет, что блокировка будет выполняться, чтобы разрешить использование метода только одному потоку.

A4:

Метод  join() используется, чтобы подождать, когда другой поток завершится. Если используется метод с параметром, то ожидание выполняется не более указанного количества миллисекунд, и выполнение ожидающего потока будет продолжено, а при вызове метода join без параметра ожидание будет выполняться сколь угодно долго до завершения потока.

Глава 19

A1:

База данных обеспечивает прямой доступ к данным, а не последовательный. Кроме того, база данных управляется с помощью сложных схем управления, обеспечивающих функциональность базы.

A2:

Java Database Connection (JDBC) реализует SQL набор классов, обеспечивающих доступ к базам данных.

A3:

Команда  Insert вставляет строки в таблицу.

A4:

Использовать SQL – запросы для создания таблиц.

Глава 20

A1:

TCP разработан для  Transmission Control Protocol. IP  - стандарт для  Internet Protocol.

A2:

Пакет содержит эти классы.

A3:

Объект сериализуется ( сохраняется), если он реализует интерфейс Serializable и может сохраняться и восстанавливаться без потери данных.

A4:

URL - это Uniform Resource Locator. Это сетевой адрес, который позволяет найти документ или программу в сети.

Глава 21

A1:

Сервлет может быть запущен из браузера или удаленного компьютера, но не как приложение.

A2:

Контейнер сервлета – это программа, которая выполняется на сервере, и предназначена для управления сервлетами. Контейнер для сервлетов устанавливается на Web-сервер.

A3:

Класс HTTPServlet может обрабатывать запросы HTTP. Если Вы используете другой протокол, Вы должны использовать класс GenericServlet.

A4:

Сессия – сохраняет значения переменных сервлета на сервере. Это позволяет поддерживать состояние связи с пользователем достаточно длительное время.

A5:

Сookie сохраняет состояние связи в браузере. Объект Session позволяет сохранять состояние связи на сервере.

Глава 22

A1:

JSP  - это специальное приложение Java, написанное на подмножестве языка, которое намного проще. Сервлеты написаны на 100% - м Java.

A2:

JSP позволяют разделить логику отображения и бизнес-логику. JSP намного легче, чем Java.

A3:

Выражения используются для вывода одного значения на экран. Скриптлеты содержат много кода, и много моще, чем выражения по возможностям.

A4:

Предопределенные объекты – это те, которые встроены в контейнер сервлетов и доступны в страницах JSP.

Глава 23

A1:

Директива  include используется для вставки другой страницы JSP в Вашу страницу. Действие include позволяет запустить другие сервлеты,, JSP и HTML-файлы в Вашу страницу JSP.

A2:

JavaBean – это просто классы Java. Это означает, что они имеют доступ ко всем возможностям, предоставляемым Java. JSP-файлы имеют ограниченную функциональность и используются, в основном, для представления (view) приложения.

A3:

Атрибут class указывает имя класса, включая имя пакета.

A4:

Аргумент param действия  setProperty выполняет это преобразование автоматически.

A5:

Скриптлеты содержат небольшие кусочки кода, которые обеспечивают логику для уровня представления. Доступ к базе данных принадлежит уровню контроллера и выполняется с помощью Bean.

Глава 24

A1:

Теги пользователя позволяют добавлять компонентную обработку в страницы JSP.

A2:

taglib связывает пользовательский тег и класс, предназначенный для реализации его.

A3:

Класс должен реализовывать специальный набор методов, которые вызываются автоматически при обработке тега пользователя.

A4:

Мы добавляем <rtexprvalue>true</rtexprvalue> в тег tablib, чтобы разрешить вычисление выражений.

Глава 25

A1:

XML – это хороший выбор для передачи данных между различными операционными системами и языками программирования, потому что он базируется на тексте и не зависит от операционной системы и языков. Кроме того, структура языка XML – интуитивно понятная.

A2:

SAX – это парсер, основанный на событиях, а  DOM  - модель разбора, основанная на представлении XML файла в виде дерева.

A3:

SAX парсер обрабатывает документы быстрее, потому что он не выстраивает дерево в памяти, что делает DOM.

A4:

SAX парсер последовательно просматривает файл XML и обрабатывает встречаемые теги и данные, но не сохраняет XML документ в памяти.

A5:

Вы всегда должны использовать SAX, а не DOM, если документ по размеру очень большой и ограничен размер памяти.

A6:

XSLT  - это программное обеспечение, которое транслирует XML-документ в другую форму по командам, содержащимся в таблице стилей.

A7:

Таблица стилей содержит инструкции для процессора XSLT о том, как переводить исходный XML документ в другую форму.

A8:

JDOM построен на основе классов коллекций Java; тот, кто знаком с эими классами, найдет, что разбор XML документов с помощью JDOM очень прост.

A9:

Чтение XML-документа с помощью JDOM выполняется созданием SAXParser и вызовом метода build().

A10:

Вы можете распечатать копию XML документа на экран, используя класс XMLOutputter и передавая в его метод output два параметра – элемент корня XML-документа и System. out.

Глава 26

A1:

TCP/IP – это протоколы более низкого уровня, чья реальная задача – обеспечить передачу данных от одного компьютера другому. HTTP  - это протокол более высокого уровня, он пересылает запросы от клиента Web серверу и ответы от Web сервера клиенту.

A2:

Это сокращенное мнемоническое обозначение архитектуры Model-View-Controller.

A3:

Дизайн системы по MVC предполагает разделение интерактивной системы на несколько логических подсистем. В этом случае легче разрабатывать, реализовывать и отлаживать систему.

A4:

Session Beans могут быть использованы на уровне контроллера, а Entity Beans – для уровня Model.