Список вопросов базы знаний
Что будет видно в окне, созданном при помощи приведенного кода?
import java.awt.*;
public class My public static void main(String arg[]) Frame f=new Frame();
f.setLayout(new CardLayout());
f.add(new Button(«A»),»First»);
f.add(new Button(«B»),»Second»);
f.add(new Button(«C»),»Thead»);
f.setSize(200,200);
f.setVisible(true);
>
>
?) Ничего в окне не появится
?) Кнопки «A»,»B»,»C» в одну строчку
?) Кнопки «A»,»B»,»C» в один столбик
Вопрос id:11352
Тема/шкала: Пакет NET
Какой менеджер компоновок позволяет разместить компоненты в таблице с ячейками равного размера?
?) CardLayout
?) FlowLayout
?) GridLayout
?) BorderLayout
Вопрос id:11353
Тема/шкала: Классы
Какой класс является родительским для потоков ввода данных?
?) DataStream
?) OutputStream
?) FileInputStream
?) InputStream
Вопрос id:11354
Тема/шкала: Основы синтаксиса
Каково максимальное значение для переменной типа byte?
?) зависит от интерпретатора
?) зависит от компилятора
Вопрос id:11355
Тема/шкала: Потоки ввода-вывода
Какой класс пакета java.io позволяет создать поток вывода текстовых данных с учетом кодировки?
?) OutputStream
?) FilterOutputStream
?) CharArrayWriter
?) OutputStreamWriter
Вопрос id:11356
Тема/шкала: Сервлеты / JSP
Какие результаты можно увидеть в окне при попытке компиляции и запуска следующей программы?
import java.awt.*;
public class My extends Frame public void paint(Graphics g) Font f=new Font(“Gothic”,Font.BOLD,24);
g.setFont(f);
g.drawString(“Hello”,20,20);
>
public static void main(String arg[]) My m=new My();
m.setSize(200,200);
m.setVisible(true);
>
>
?) программа откомпилируется, но при попытке запуска возникнет исключительная ситуация типа NullPointerException
?) программа откомпилируется и в окне появится слово Hello выведенное шрифтом по умолчанию
?) программа откомпилируется и в окне появится слово Hello выведенное шрифтом Gothic
?) программа не откомпилируется, так как шрифт Gothic не определен в Java
Вопрос id:11357
Тема/шкала: Потоки ввода-вывода
Исключительная ситуация какого типа возможна при открытии сокетного соединения следующим образом: Socket s=new Socket(«www.specialist.ru»,80);
?) IOException и UnknownHostException
?) только UnknownHostException
?) только BadURLException
?) только IOException
?) только MalformedURLException
?) IOException и MalformedURLException
Вопрос id:11358
Тема/шкала: Основы синтаксиса
Какие имена переменных допустимы?
Вопрос id:11359
Тема/шкала: Потоки ввода-вывода
Экземпляром какого класса является поле System.in?
?) java.io.InputStream
?) java.io.PrintStream
?) java.io.InputStreamWriter
?) java.io.BufferedInputStream
?) java.lang.System
Вопрос id:11360
Тема/шкала: Пакет NET
Какое выравнивание используется по умолчанию для компоновки FlowLayout?
?) FlowLayout.CENTER
?) FlowLayout.LEFT
?) Выравнивание надо всегда указывать явно
?) FlowLayout.RIGHT
?) FlowLayout.MIDDLE
Вопрос id:11361
Тема/шкала: Классы
Экземпляром какого класса является поле System.err?
?) java.io.ErrorStream
?) java.io.PrintStream
?) java.io.OutputStream
?) java.lang.System
Вопрос id:11362
Тема/шкала: Сервлеты / JSP
Что будет видно в окне, созданном при помощи нижеприведенного кода?
import java.awt.*;
public class My public static void main(String arg[]) Frame f=new Frame();
f.setLayout(new GridLayout(1,3,3,1));
f.add(new Button(«A»),»First»);
f.add(new Button(«B»),»Second»);
f.add(new Button(«C»),»Thead»);
f.setSize(400,400);
f.setVisible(true);
>
>
?) Кнопки «A»,»B»,»C» в один столбик
?) Кнопки «A»,»B»,»C» в одну строчку
?) Ничего в окне не появится
Вопрос id:11363
Тема/шкала: Основы синтаксиса
Сколько бит оперативной памяти занимает переменная типа char?
?) Объем выделяемой памяти зависит от интерпретатора
?) Объем выделяемой памяти зависит от компилятора
Вопрос id:11364
Тема/шкала: Сервлеты / JSP
Какие результаты можно увидеть на экране при попытке компиляции и запуска следующей программы?
class First int sum(int x,int y) return(x+y);
>
>
public class Second extends First public static void main(String a[]) Second s=new Second();
System.out.println(«Summa answer_variants»>
?) Программа не откомпилируется из-за отсутствия спецификатора доступа public в описании класса First
?) Программа не откомпилируется из-за того что метод sum не унаследуется классом Second
?) Программа не откомпилируется из-за невозможности создать объект экземпляр класса Second внутри класса Second
Вопрос id:11365
Тема/шкала: Потоки ввода-вывода
Какой класс необходимо использовать клиенту для соединения с сокетом сервера?
?) SocketServer
?) ServerSocket
Вопрос id:11366
Тема/шкала: Пакет SQL
Сколько типов драйверов баз данных различают в JDBC?
?) Никаких различий в типах драйверов не существует
Вопрос id:11367
Тема/шкала: Сервлеты / JSP
Какие результаты можно увидеть на экране при попытке компиляции и запуска следующей программы?
public class My int x=5, y=6;
class MyToo int sum() return(My.this.x+My.this.y);
>
>
public static void main(String arg[]) My m=new My();
My.MyToo mt=m.new MyToo();
System.out.println(«sum answer_variants»>
?) программа откомпилируется и при выполнении вернет null
?) программа не откомпилируется, так как метод sum вложенного класса должен иметь спецификатор доступа static
?) программа откомпилируется и при выполнении вернет 11
?) программа откомпилируется и при выполнении вернет сообщение о ошибке
?) программа не откомпилируется, так как неправильно создается объект экземпляр класса MyToo
?) программа не откомпилируется, так как поля x и y не доступны внутри класса MyToo
?) программа не откомпилируется, так как методы вложенного класса не имеют спецификатора доступа public
Вопрос id:11368
Тема/шкала: Сервлеты / JSP
В каком пакете находится интерфейс Servlet?
?) В пакете java.servlet
?) В пакете javax.servlet.http
?) В пакете javax.servlet
?) В пакете java.http
Вопрос id:11369
Тема/шкала: Основы синтаксиса
Какой результат появится на экране после выполнения следующей прграммы?
public class My public static void main(String arg[]) cko:
for(int i=0;i
?) Программа не откомпилируется из-за отсутствия спецификатора доступа public в описании интерфейса First
?) Программа не откомпилируется из-за недопустимости описания полей внутри интерфейсного класса
?) Программа не откомпилируется из-за отсутствия спецификатора доступа public в описании поля a внутри интерфейса First
?) Программа не откомпилируется из-за недопустимости присваивания нового значения полю a, так как это поле имеет спецификатор доступа final
?) Программа не откомпилируется из-за недопустимости присваивания значений полям интерфейсного класса
?) Программа не откомпилируется из-за недопустимости использования нестатических полей внутри статического метода
Вопрос id:11377
Тема/шкала: Классы
Какие результаты можно увидеть на экране при попытке компиляции и запуска следующей программы?
final class My public static void main(String a[]) System.out.println(«Hello!»);
>
>
Классы и объекты
Если Вы начали программировать на Java, то писать программы нужно с применением объектно-ориентированного подхода. А данный подход опирается на использовании в программе объектов и классов. Классы и объектно-ориентированное программирование (ООП) — неразделимы. ООП — это описание объектов реального мира средствами выбранного языка программирования с организацией их поведения и взаимодействия.
Окружающий мир состоит из объектов: здания, деревья, автомобили — не просто предметы. Они являются объектами, обладающими набором определенных свойств. Взять, к примеру, мяч. У мяча есть диаметр, цвет, материал (резина, кожа), назначение (теннисный, волейбольный, футбольный). Помимо свойств, мяч может прыгать, летать, катиться. Постепенно, на примере мяча, можно предположить, что существует некий шаблон, с помощью которого можно описать не только мяч, но и любой объект. Таким шаблоном выступает класс. Итак:
- Класс — шаблон, в котором описаны общие черты и действия объекта (объектов).
- Объект — экземпляр класса, обладающий уже конкретными свойствами и поведением.
Можно привести и другой пример. Проект будущего дома это — класс. Дом, построенный по проекту — объект.
Экземпляр класса
Почему используется слово экземпляр? Потому что по одному и тому же проекту можно построить несколько домов. Элементы каждого из домов можно выкрасить в различный цвет, но всегда можно определить проект дома. Однако, вернёмся к Java.
В ООП (и язык Java тут не исключение) свойства будущего объекта описываются полями, а поведение — методами (которые мы с Вами рассмотрели ранее). Пришла пора собрать всё воедино.
Класс определяется с помощью ключевого слова сlass (имя класса пишется с заглавной буквы):
Определение класса:class Student пока без полей и методов
В данном случае класс называется Student. После названия класса идут фигурные скобки, между которыми помещается тело класса. В теле класса как раз и помещаются поля и методы. Добавим, для начала поля:
Определение класса:class Student < String name; // поле №1: имя студента int age; // поле №2: возраст студента >
добавлены два поля
Классы и методы
Поскольку с методами мы уже познакомились, пора добавить хотя бы один из них. Назовём его «вывод информации», т.е. printInfo. Методы, как и поля, помещаются между двумя фигурными скобками класса, т.е. в его теле:
Определение класса:class Student < String name; // поле №1: имя студента int age; // поле №2: возраст студента void printInfo()< // метод класса Student System.out.printf("Student name: %s \nStudent age: %d\n", name, age); >>
два поля и метод
Таким образом, класс это — поля и методы по работе с ними, которые, в итоге, представляют собой шаблон будущего объекта.
В классе Student два поля: name представляет имя студента, а age — его возраст. Также добавлен метод printInfo, который ничего не возвращает (void) и просто выводит эти данные в консоль.
Если сейчас запустить программу, то в консоли ничего не будет. Это и не удивительно, ведь определён лишь шаблон, но не создано ни одного объекта. Т.е. класс не использован, не реализован. Для реализации класса доработаем нашу программу:
Определение и реализация класса (начало):public class Program < public static void main(String[] args) < Student bob; // создан экземпляр класса Student с именем bob >> class Student < String name; // поле №1: имя студента int age; // поле №2: возраст студента void printInfo()< // метод класса Student System.out.printf("Student name: %s \nStudent age: %d\n", name, age); >>
создание и использование объекта
Объект вроде и создан, но программа снова ничего не выводит. Дело в том, что класс — это тоже тип данных. В методе main определена переменная bob, которая представляет класс Student. Но пока эта переменная не указывает ни на какой объект и, по умолчанию, она имеет значение null. По большому счету мы ее пока не можем использовать, поэтому вначале необходимо создать объект класса Student. А мы пока определили лишь пустую переменную.
Ещё одно замечание. Классы в Java определяются в разных файлах. В данном случае, для простоты, два класса помещены в одном файле. «Главный» класс, содержащий метод main, должен иметь модификатор public (в представленном случае это класс — Program), а сам файл кода должен называться по имени этого класса, то есть, в данном случае, файл должен называться Program.java. В Вашем случае файл может называться по-другому, следовательно и «главный» одноимённый класс будет иным.
Выделение памяти под объект
Но вернёмся к реализации нашего класса. Класс — ссылочный тип данных. Это означает, что каждый новый экземпляр должен ссылаться на определённый адрес в оперативной памяти, где для каждого из его членов (поля и методы) выделяется место. С нашей стороны экземпляру было дано имя. Но место в памяти под него не выделялось. Для ссылочного типа данных (мы с этим встречались, когда изучали массивы) память выделяется с помощью оператора new:
Определение и реализация класса (полный пример):public class Program < public static void main(String[] args) < Student bob = new Student(); // выделили память под объект bob.name = "Bob"; // Дали имя bob.age = 19; // Определили возраст bob.printInfo(); // Вывели информацию в консоль >> class Student < String name; // поле №1: имя студента int age; // поле №2: возраст студента void printInfo() < // метод класса Student System.out.printf("Name: %s \nAge: %d\n", name, age); >>
теперь в консоль выведется информация
Объекту, с именем bob, была выделена память под его поля и методы. Полям были присвоены значения, впоследствии выведенные на экран. Для выделения памяти в классе вызывается конструктор, который пока явно задействован не был.
Классы и конструкторы
Конструктор это специальный метод, имеющий тоже название, что и класс. И вызывается конструктор всегда, когда создаётся новый объект (экземпляр класса). Если в классе не был определен конструктор, то для этого класса автоматически создается конструктор без параметров. Проверим это. Добавим в класс пустой конструктор с выводом информации о его вызове:
Пример вызова конструктора:public class Program < public static void main(String[] args) < Student bob = new Student(); // выделили память под объект bob.name = "Bob"; // Дали имя bob.age = 19; // Определили возраст bob.printInfo(); // Вывели информацию в консоль Student bill; // определена переменная типа Student // без выделения памяти, // т.е. без вызова конструктора >> class Student < String name; // поле №1: имя студента int age; // поле №2: возраст студента Student() < // пустой конструктор без параметров System.out.println("Call of constructor!"); >void printInfo() < // метод класса Student System.out.printf("Name: %s \nAge: %d\n", name, age); >>
вызывается лишь когда выделяется память
В выводе мы увидим, что, не смотря на добавления объекта bill, конструктор был вызван лишь один раз:
Call of constructor!
Name: Bob
Age: 19
С помощью оператора new выделим память под объект bill:
Пример вызова конструктора №2:public class Program < public static void main(String[] args) < Student bob = new Student(); // выделили память под объект bob.name = "Bob"; // Дали имя bob.age = 19; // Определили возраст bob.printInfo(); // Вывели информацию в консоль Student bill = new Student(); // выделили память под второй объект >> class Student < String name; // поле №1: имя студента int age; // поле №2: возраст студента Student() < // пустой конструктор без параметров System.out.println("Call of constructor!"); >void printInfo() < // метод класса Student System.out.printf("Name: %s \nAge: %d\n", name, age); >>
конструктор вызван дважды
Вывод в консоль изменился:
Call of constructor!
Name: Bob
Age: 19
Call of constructor!
Пример хорошо иллюстрирует процесс:
- Выделена память под bob (Call of constructor);
- Заполнены поля name и age с вызовом метода printInfo();
- Выделена память под bill (Call of constructor).
Итак, конструктор — это тоже метод, но имеющий два отличия:
- Конструктор ничего не возвращает, он лишь выделяет память под создаваемый объект;
- Конструктор имеет тоже имя, что и класс.
Следовательно, определяя конструктор мы не указываем тип возвращаемого значения (даже void писать не обязательно).
Параметры конструкторов
Но если конструктор является методом, значит для него действует правило перегрузки (overloading). Следовательно, конструкторов может быть несколько. И отличаться они будут типом и числом параметров. В нашем классе уже есть один конструктор без параметров. Добавим ещё один — с двумя параметрами newName и newAge:
Пример вызова конструктора с параметрами:public class Program < public static void main(String[] args) < Student bob = new Student(); // вызов конструктора без параметров bob.name = "Bob"; // Дали имя bob.age = 19; // Определили возраст bob.printInfo(); // Вывели информацию о bob в консоль Student bill = new Student("Bill", 22); // вызов конструктора с параметрами bill.printInfo(); // Вывели информацию о bill в консоль >> class Student < String name; // поле №1: имя студента int age; // поле №2: возраст студента Student() < // пустой конструктор без параметров System.out.println("Call of constructor without parameters!"); >Student(String newName, int newAge) < // конструктор с двумя параметрами name = newName; // присвоение полям класса значений age = newAge; // прямо при создании нового объекта System.out.println("Call of constructor with parameters!"); >void printInfo() < // метод класса Student System.out.printf("Name: %s \nAge: %d\n", name, age); >>
в зависимости от числа аргументов вызван свой конструктор
В консоли теперь будет следующий вывод:
Call of constructor without parameters!
Name: Bob
Age: 19
Call of constructor with parameters!
Name: Bill
Age: 22
Сначала был вызван пустой конструктор без параметров. Затем полям созданного объекта были присвоены значения (см. строки: 5-7 выше) и выведены в консоль (строка: 8). Затем (в строках: 9-10) был вызван конструктор с параметрами (т.е. с одновременной инициализацией полей), и метод, выводящий в консоль значения данных полей.
Классы и инициализаторы
Кроме конструктора полям объекта можно присваивать значения с помощью инициализатора объекта. Инициализатор выполняется раньше любого из конструкторов и в нём помещается код, общий для всех конструкторов:
Пример использования инициализатора:public class Program < public static void main(String[] args) < Student bob = new Student(); // вызов конструктора без параметров bob.name = "Bob"; // Дали имя bob.age = 19; // Определили возраст bob.printInfo(); // Вывели информацию о bob в консоль Student bill = new Student("Bill", 22); // вызов конструктора с параметрами bill.printInfo(); // Вывели информацию о bill в консоль Student noname = new Student(); // полям присовятся значения // заданные в инициализаторе noname.printInfo(); >> class Student < String name; // поле №1: имя студента int age; // поле №2: возраст студента // присваиваем полям стартовые значения // еще до вызова конструктора или инициализации < // инициализатор (есть тело, но нет имени) name = "Noname"; age = 0; >Student() < // пустой конструктор без параметров System.out.println("Call of constructor without parameters!"); >Student(String newName, int newAge) < // конструктор с двумя параметрами name = newName; // присвоение полям класса значений age = newAge; // прямо при создании нового объекта System.out.println("Call of constructor with parameters!"); >void printInfo() < // метод класса Student System.out.printf("Name: %s \nAge: %d\n", name, age); >>
если значения заданы не были, они берутся из инициализатора
Вывод будет следующим:
Call of constructor without parameters!
Name: Bob
Age: 19
Call of constructor with parameters!
Name: Bill
Age: 22
Call of constructor without parameters!
Name: Noname
Age: 0
Как видно, конструктор без параметров всё равно был вызван. Значения полей, даже если и не были заданы, были заимствованы у инициализатора — метода класса: с телом, но без имени.
В данном разделе были изучены базовые понятия ООП: принципы создания классов и обязательные операции при работе с объектами (при реализации классов).
- Классы, представляя собой прототип будущего объекта, содержат поля и методы.
- Конструктор не только выделяет память под объект, но и производит инициализацию полей.
- Инициализатор задаёт значения полей класса по умолчанию.
Java | Вопросы с ответами
2. Дан код:
public class Quest4 public static void main(String[] args) byte b[] = new byte[80];
for (int i=0; i System.out.print(“Ok”);
>
>
Результатом компиляции запуска будет?
>> ошибка компиляции, так как метод read() может порождать исключительную ситуацию типа IOException.
3. Программы Java категория Приложение (application)?
>> аналог “обычной” прикладной программы.
4. Программы Java категория Апплет (applet)?
>> специализированная программа с ограниченными возможностями, работающая в окне WWW-документа под управлением браузера.
5. Программы Java категория Сервлет (servlet)?
>> специализированная программа с ограниченными возможностями, работающая в WWW на стороне сервера. Используется преимущественно в рамках технологии JSP для программирования WWW-документов со стороны сервера.
6. Программы Java категория Серверное приложение (Enterprise application)?
>> предназначено для многократного использования на стороне сервера.
7. Программы Java категория Библиотека (Java Class Library)?
>> библиотека классов, либо NetBeansModule – модуль платформы NetBeans) – предназначена для многократного использования программами Java.
8. Какие из следующих строк скомпилируются без ошибки?
>> int i = 32565;
— float f = 7.0;
— char c = «z»;
— byte b = 255;
— boolean n = null;
9. Какие из следующих строк скомпилируются без ошибки?
>> int j = ’ъ’;
— float f = 7.0;
— char c = «z»;
— byte b = 255;
— boolean n = null;
10. Какие варианты записи оператора условного перехода корректны?
>> if (i
— if (i
— if [i — if then System.out.print(«-6-«);
12. Какие из следующих идентификаторов являются корректными?
>> _int;
— 2int;
— int_#;
— #int
— _#int
13. Назначение утилиты javac?
>> Компилятор в режиме командной строки для программ, написанных на языке Java.
14. Назначение утилиты java?
>> Утилита для запуска в режиме командной строки откомпилированных программ-приложений.
15. Назначение утилиты appletviewer?
>> Утилита для запуска на исполнение и отладку апплетов без браузера. При этом не гарантируется работоспособность отлаженного апплета в браузере.
16. Назначение утилиты jdb?
>> Отладчик программ, написанных на языке Java.
17. Назначение утилиты javadoc?
>> Генератор документации по классом на основе комментариев, начинающихся с /**.
18. Назначение утилиты jar?
>> Создание и управление Java-архивами jar.
19. Назначение утилиты javah?
>> Генератор заголовочных файлов C/C++ для подключения к программам Java внешних библиотек C/C++ на основе интерфейса JNI.
20. Назначение утилиты javap?
>> Дизассемблер классов.
21. Назначение утилиты extcheck?
>> Утилита для обнаружения конфликтов между файлами архивов jar.
22. Назначение утилиты native2ascii?
>> Утилита для конвертации в режиме командной строки параметра, передаваемого в виде текста на национальном алфавите, в последовательность символов UNICODE.
23. Управляющая последовательность: \a ?
>> звонок.
24. Управляющая последовательность: \b ?
>> возврат на один символ назад.
25. Управляющая последовательность: \f ?
>> перевод на новую страницу.
26. Управляющая последовательность: \n ?
>> перевод на новую строку.
27. Управляющая последовательность: \r ?
>> возврат к началу строки.
28. Управляющая последовательность: \t ?
>> горизонтальная табуляция.
29. Управляющая последовательность: \v ?
>> вертикальная табуляция.
30. Управляющая последовательность: \’ ?
>> кавычка.
31. Управляющая последовательность: \” ?
>> двойные кавычки.
32. Управляющая последовательность: \\ ?
>> обратная косая черта.
33. Управляющая последовательность: \u ?
>> начало кодировки символа Unicode.
34. Оператор ~ ?
>> Оператор побитового дополнения (побитовое “не”).
35. Оператор ^ ?
>> Оператор “исключающее или” (XOR).
36. Оператор & ?
>> Оператор “побитовое и” (AND).
37. Оператор | ?
>> Оператор “побитовое или” (OR).
38. Оператор ! ?
>> Оператор “НЕ”.
39. Оператор && ?
>> Оператор “логическое И” (AND).
40. Оператор || ?
>> Оператор “ логическое ИЛИ” (OR).
41. Оператор >> Оператор левого побитового сдвига.
42. Оператор >>> ?
>> Оператор беззнакового правого побитового сдвига.
43. Оператор >> ?
>> Оператор правого побитового сдвига с сохранением знака отрицательного числа.
44. Для чего предназначен пакет java.applet?
>> Классы, необходимые для создания аплетов.
45. Для чего предназначен пакет java.awt?
>> Графический пользовательский интерфейс на базе AbstractWindowsToolkit.
46. Для чего предназначен пакет java.awt.color?
>> Пространства цветов для AWT.
47. Для чего предназначен пакет java.awt.datatransfer?
>> Передача данных внутри программы и между программами.
48. Для чего предназначен пакет java.awt.dnd?
>> Поддержка технологии drag-and-drop.
49. Для чего предназначен пакет java.awt.event?
>> Обработка событий AWT.
50. Для чего предназначен пакет java.awt.im?
>> Поддержка нестандартных методов ввода текста.
51. Для чего предназначен пакет java.awt.im.spi?
>> Интерфейсы для создания нестандартных методов ввода текста.
52. Для чего предназначен пакет java.lang?
>> Базовые классы языка Java.
53. Для чего предназначен пакет java.lang.ref?
>> Управление ссылками на объекты.
54. В папке build проекта NetBeans находятся?
>> хранятся скомпилированные файлы классов, имеющие расширение .class.
55. В папке dist проекта NetBeans находятся?
>> файлы, предназначенные для распространения как результат компиляции (модуль JAR приложения или библиотеки, а также документация к нему).
56. В папке nbproject проекта NetBeans находятся?
>> находится служебная информация по проекту.
57. В папке src проекта NetBeans находятся?
>> исходные коды классов. Кроме того, там же хранится информация об экранных формах (которые будут видны на экране в виде окон с кнопками, текстом и т.п.). Она содержится в XML-файлах, имеющих расширение .form.
58. В папке test проекта NetBeans находятся?
>> сопроводительные тесты, предназначенные для проверки правильности работы классов проекта.
59. Команды документации (символы метаданных) @see?
>> применяется для создания в документе гиперссылок на другие комментарии. Можно использовать для любых конструкций (классов, методов и т.д. ).
60. Команды документации (символы метаданных) @since?
>> Информация о версии JDK, начиная с которой введён или работоспособен класс или интерфейс.
61. Команды документации (символы метаданных) @throws?
>> Информация об исключительных ситуациях, которые могут возбуждаться методом.
62. Команды документации (символы метаданных) @param?
>> информация о параметре метода.
63. Команды документации (символы метаданных) @deprecated?
>> информация о том, что данный метод устарел и в последующих версиях будет ликвидирован. При попытке использования таких методов компилятор выдаёт программисту предупреждение (warning) о том, что метод устарел, хотя и компилирует проект.
64. Целые типы, тип byte?
>> Однобайтовое целое число (8-битное целое со знаком).
65. Целые типы, тип short?
>> Короткое целое число (16- битное целое со знаком).
66. Целые типы, тип char?
>> Символьный тип (беззнаковое 16- битное целое).
67. Целые типы, тип int?
>> Целое число (32- битное целое со знаком).
68. Целые типы, тип long?
>> Длинное целое число (64- битное целое со знаком).
69. Выберите правильный вариант a,b,c,d чтобы результат выражения a&&b || c^ d являлся истиной?
>> все ответы верны
— a=true, b=true, c=false, d=true
— a=false, b=false, c=false, d=true
— a=false, b=false, c=true, d=false
— a=true, b=true, c=true, d=true
70. Выберите правильный вариант a,b,c,d чтобы результат выражения a&&(b || c)^ d являлся ложью?
>> все ответы верны
— a=false, b=true, c=false, d=true
— a=true, b=true, c=false, d=true
— a=false, b=false, c=false, d=true
— a=false, b=false, c=false, d=false
71. Вещественные типы, размер типа float?
>> 4 байта
72. Вещественные типы, размер типа double?
>> 8 байт
73. Float f1 = new Float(Float.NaN);
Float f2 = new Float(Float.NaN);
System.out.println( «»+ (f1 == f2)+» «+f1.equals(f2)+ » «+(Float.NaN == Float.NaN) );
Что будет выведено в результате выполнения данного куска кода?
>> false true false
74. int i = 0;
i++;
System.out.print(i);
i = i++;
System.out.println(i); Что выведет данный код?
>> 11
75. int i = 0, j = 5;
tp: for (;;) < i++;
for (;;) < if (i >—j) breaktp; > >
System.out.println(«i =» + i + «, j = » + j);> Что произойдет во время компиляции и выполнения данного фрагмента кода?
>> Ошибка компиляции.
76. int i = 1; //1
i = -+(10 + 2 + i); //2
++i—; //3
System.out.println(i); В какой строке(-ах) кода содержится ошибка?
>> 3.
77. Integer i = newInteger(«10»);
if (i.toString().intern() == i.toString().intern()) System.out.println(«Равный»);
> else System.out.println(«Не равный»); >> Результат выполнения программы?
>> Выведется “Равный”.
78. public class Main public static void main(String[] args) Boolean b1 = new Boolean(«true»); System.out.print(b1 +» «);
b1 =new Boolean(«tRuE»); System.out.print(b1 +» «);
b1 =new Boolean(«test»); System.out.print(b1 +» «);
b1 =new Boolean(true); System.out.print(b1 +» «);
b1 = true; System.out.println(b1); >> каким будет результат компиляции и выполнения кода?
>> true true false true true
79. public class Test static < System.out.print("Bo-Bo ");>
public static void main(String[] args) System.out.print(«Hello, World! «); >
static < System.out.println("Go-Go "); System.exit(0); >> что выведет код?
>> Bo-Bo Go-Go
80. int i = 1; //1
i = -+(10 + 2 + 1); //2
++i—; //3
System.out.println(i); В какой строке(-ах) кода содержится ошибка?
>> 3
81. Integer a = 128; Integer b = 128;
Integer c = -128; Integer d = -128;
System.out.print((a == b)+» «);
System.out.println(c == d); Что будет выведено на экран?
>> false true
82. Boolean b = new Boolean(«Hello»);
System.out.println(b); Какой результат выполнения данного кода?
>> false
83. public class Test static < i =5; >
static int i = 6;
public static void main(String[] args) System.out.println(i); >> Выберите правильный ответ?
>> 6
84. public class MathTest public static void main(String[] args) System.out.print(((-7 % 5)>(7 % -5))+» «);
System.out.println(Math.abs(Math.ceil(-2.5))
Что будет напечатано в результате выполнения данного кода?
>> false true
85. int i = 0;
System.out.print(i++);
System.out.println(i); Результат кода?
>> 01
86. int j = 0;
System.out.print(++j);
System.out.println(j); Результат кода?
>> 11
87. public class TestClass
int i = getInt();
int k = 20;
public int getInt()
public static void main(String[] args)
TestClass t = new TestClass ();
System.out.println(t.i+» «+t.k); >>
Что выведет этот код?
>> Будет выведено на печать 1 20
88. int x = 0;
int y = 10;
do< y--;
++x;> while(x<5);
System.out.print(x+»,»+y); >
Что напечатает этот код?
>> напечатает 5 5
89. Дана строка:
String s=»true,false»;
Каким способом можно сформировать новую строку, равную “test”?
>> String n = s.substring(0,1) + s.substring(9,10) + s.substring(8,9) + s.substring(0,1)
90. int result = 12+2*5%3-15/4;
String x=12-6+»Hello»+7+5;
System.out.println(result+»-«+x);
Что будет выведено на консоль?
>> 10-6Hello75
91. String s1=»Строка типа String»;
String s2=»Строка«;
s2+=» типа String»;
if(s1==s2) System.out.println(«s1 равно s2″);
else System.out.println(«s1 не равно s2″);
Что выведет этот код?
>> s1 не равно s2
92. String s1=»Строка типа String»;
String s2=»Строка«;
s2+=» типа String»;
if(s1.equals(s2)) System.out.println(«s1 равно s2″);
else System.out.println(«s1 не равно s2″);
Что выведет этот код?
>> s1 равно s2
93. String s1=»Строка»;
String s2=»Строка»;
if(s1==s2) System.out.println(«s1 равно s2″);
else System.out.println(«s1 не равно s2″);
Что выведет этот код?
>> s1 равно s2
94. String s=»»;
s+= 1+2+3;
System.out.println(s);
Что выведет этот код?
>> 6
95. String s=»Сумма =»+1+2+3;
System.out.println(s);
Что выведет этот код?
>> Сумма=123
96. String s=1+2+» не равно «+1+2;
System.out.println(s);
Что выведет этот код?
>> 3 не равно 12
97. Работа с графикой. Функция clearRect(x,y,w,h)?
>> Очистка прямоугольника (заполнение текущим цветом).
98. Работа с графикой.Функция fill3DRect(x,y,w,h, isRaised)?
>> Вывод «объемного» прямоугольника, заполненного текущим цветом.
99. Работа с графикой.Функция fillPolygon(Polygon p)?
>> Вывод многоугольника, заполненного текущим цветом.
100. Работа с графикой. Функция copyArea(x,y,w,h,dx,dy)?
>> Копирование области на новое место.
101. Переменные класса File. String pathSeparator?
>> Содержит строку с символом разделителя пути в операционной системе. Это «/» в Unix-подобных системах и «\» в Windows.
102. Переменные класса File.char pathSeparatorChar?
>> Содержит символ разделителя пути в операционной системе. Это «/» в Unix-подобных системах и «\» в Windows.
103. Переменные класса File.String separator?
>> Содержит строку с символом разделителя между именами файлов и файловых масок в операционной системе.
104. Переменные класса File. char separatorChar?
>> Содержит символ разделителя между именами файлов и файловых масок в операционной системе.
105. Методы класса File.canRead() ?
>> Возвращает true в случае, когда файл (или папка) с заданным в конструкторе именем существует и доступен по чтению. Иначе false.
106. Методы класса File.setReadOnly() ?
>> Возвращает true в случае, когда файл (или папка) с заданным в конструкторе именем существует, и ему удалось установить статус «доступен только по чтению». Иначе false.
107. Методы класса File. isDirectory() ?
>> Возвращает true в случае, когда файл или папка с заданным в конструкторе именем существует и является папкой. Иначе false.
108. Методы класса File. isFile() ?
>> Возвращает true в случае, когда файл или папка с заданным в конструкторе именем существует и является файлом. Иначе false.
109. Методы класса File.isHidden() ?
>> Возвращает true в случае, когда файл или папка с заданным в конструкторе именем существует и является скрытым. Иначе false.
110. Методы класса File. lastModified() ?
>> Возвращает время последней модификации файла, если он существует и доступен по чтению. Иначе 0L.
111. Методы класса File. setLastModified(long time) ?
>> Устанавливает время последней модификации файла. Возвращает true, если он существует и доступен по записи. Иначе false.
112. Методы класса File.getName() ?
>> Возвращает короткое имя файла или папки.
113. Методы класса File.getAbsolutePath() ?
>> Возвращает абсолютный путь к файлу или папке, включая имя файла. При этом, если в имени файла в конструкторе была задана относительная адресация, соответствующая часть пути сохраняется в возвращаемой строке.
114. Методы класса File. getCanonicalPath() ?
>> Возвращает абсолютный путь к файлу или папке, включая имя файла. При этом, если в имени файла в конструкторе была задана относительная адресация, соответствующая часть пути заменяется в возвращаемой строке на канонический вариант адресации – без элементов относительной адресации.
115. Методы класса File.compareTo(File f) ?
>> Сравнение имён файлов (папок), сопоставляемых текущему файловому объекту и объекту f. Возвращает 0 в случае, когда абсолютные имена файлов (папок) совпадают. Иначе возвращает число, зависящее от разницы в длинах имён и кодов, составляющих их символов.
116. Методы класса File.isAbsolute() ?
>> Возвращает true в случае, когда адресация к имени файла (папки) текущего файлового объекта является абсолютной. Хотя может содержать элементы относительной адресации, то есть не быть канонической.
117. Методы класса File.equals(Object obj) ?
>> Возвращает true тогда и только тогда, когда текущий объект и параметр obj соответствует одному и тому же файлу (папке).
118. Методы класса File.createTempFile(String prefix, String suffix) ?
>> Обеспечивает создание пустого файла (или папки), задаваемого коротким именем prefix+suffix в папке операционной системы, предназначенной для временных файлов. Возвращает ссылку на объект. Префикс должен быть не менее 3 символов.
119. Методы класса File.mkdir() ?
>> Попытка создания папки по имени, которое было задано в конструкторе объекта. Возвращает true в случае успешного создания и false в других случаях.
120. Методы класса File.renameTo(File dest) ?
>> Попытка переименования файла или папки с имени, которое было задано в конструкторе объекта, на новое, задаваемое параметром dest. Возвращает true в случае успешного переименования и false в других случаях.
121. Методы класса File.getAbsoluteFile() ?
>> Создание нового файлового объекта по абсолютному пути, соответствующему текущему файловому объекту.
122. Методы класса File.list() ?
>> Возвращает массив строк (список) коротких имён, находящихся в папке файлов и папок. Имена элементов, находящихся во вложенных папках, не показываются. Если файловый объект не соответствует существующей папке, возвращает null.
123. Конструкторы?
>> это методы, используемые для инициализации объектов в процессе их реализации.
124. Как объекты обмениваются информацией?
>> Объекты общаются друг с другом посредством посылки сообщений.
125. Что такое this?
>> ссылка, с помощью которой объект обращается к самому себе.
126. Класс ?
>> Класс – это структурный тип данных, который включает описание полей данных, а также процедур и функций, работающих с этими полями данных.
127. Процедуры и функции, работающие с полями данных класса?
>> Называются методами.
128. Объединение полей данных и процедур и функций, работающих с этими данными, в единый пакет, при наличии специальных правил доступа к элементам пакета?
>> Инкапсуляция.
129. Основные средства разработки классов. Наследование?
>> Конструирование новых более сложных классов из уже имеющихся посредством добавления полей и определения новых методов (принцип иерархичности).
130. Основные средства разработки классов. Полиморфизм?
>> обеспечивает возможность задания различных реализаций некоторого единого по названию метода для классов различных уровней иерархии.
131. Полиморфными объектами или полиморфными переменными называются?
>> переменные, которым в процессе выполнения программы может быть присвоено значение, тип которого отличается от типа переменной.
132. К изменению свойств объекта возможен только через принадлежащие ему?
>> методы.
133. В момент времени объект характеризуется:?
>> Свойствами
134. Программа в объектно-ориентированном программировании состоит из:?
>> событийных процедур.
135. Инкапсулированные в классе процедуры и функции называются?
>> Методы
136. Процесс, при котором различный код и данные различных модулей соединяются друг с другом в процессе исполнения, называют компоновкой?
>> Динамической
137. Область исходного кода программы, из которой допустим нормальный доступ к связанному с идентификатором объекту, называется?
>> Видимостью
138. Конструктором по умолчанию называется такой конструктор, который?
>> не принимает никаких аргументов.
139. Класс-наследник называется . от базового класса?
>> Производным.
140. Что следует ожидать на экране?
System.out.print(«A»+»B»+»C»);
System.out.println(‘A’+’B’+’C’);
>> ABC198
141. int j = 0;
for (int i = 0; i< 10; i++)
j = j++;
System.out.println(j);
Что выведется в результате?
>> 0
142. int x, y;
int i;
x = 1;
for (i = 0; i< 10; i++)
Что выведется в результате?
>> 3 5 7 9 11 13 15 17 19 21
143. int x, y;
int i;
x = 1;
for (i = 0; i< 10; i++)
Что выведется в результате?
>> 2 4 6 8 10 12 14 16 18 20
144. int x=0;
for(int count=10; count < 5; count++)
x += count ;>
Чему равна х?
>> 0
145. for(inti=-10; i
System.out.print(i + » «) ;>,
Что выведется в результате?
>> -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0
147. Каков будет результат следующего примера?
Point p = new Point(1,2);
int a =p.x;
p = new Point(3,4);
System.out.println(a);
>> 1
148. Каков будет результат следующего примера?
Point p1 = new Point(3,4);
Point p2 = p1;
p1.x = 5;
p1 = new Point(4,4);
System.out.println(p2.x-p1.x);
>> 1
149. Каков будет результат следующих действий?
Point p1 = new Point(2,3);
Point p2 = new Point(2,3);
System.out.print(p1==p2);
p2=p1;
p1.x = 3;
System.out.print(» «);
System.out.println(p1==p2);
>> false true
150. Каков будет результат следующего примера?
public class testClass
public static void process (int x)
public static void main(String[] args)
int x=3; process(x);
System.out.println(x); >>
>> 3
151. Что будет напечатано в консоли в результате выполнения следующего кода:
System.out.println((byte)383+» «+(byte)384+» «+(byte)-384); ?
>> 127 -128 -128
152. Каков будет результат следующего примера?
char c = 65;
System.out.print(c);
System.out.print(+c);
System.out.print(«=»+c);
>> A65=A
153. Каков будет результат следующего примера?
class Parent
class Child extends Parent
public class testClass
public static void main(String[] args)
Child c = new Child(); System.out.print(c.a);
Parent p=c; System.out.print(p.a); >>
>> 32
154. Каков будет результат следующего примера?
class Parent
public void printX()>
class Child extends Parent
public class testClass
public static void main(String[] args)
new Child().printX(); >>
>> 0
155. Каков будет результат следующего примера?
class Parent
class Child extends Parent
public class testClass
public static void main(String[] args)
Child.a=10; Parent.a=5; System.out.println(Child.a); >>
>> 5
156. Каков будет результат следующего примера?
int i,j;
lab:for(i=0;i<6;i++)
for(j=3;j>1;j—)
if(i==j) > >
>> 2
157. Каков будет результат следующей программы?
public class testClass public static void main(String[] args) inti =5;
while(i=5) <
System.out.println(i++); >>>
>> Ошибка компиляции.
158. Каков будет результат следующего примера?
int b=5;
System.out.print(b+(b=3));
System.out.print((b=3)+3);b=5;
System.out.print(b+=(b=3));
>> 868
159. Дан код:
class Quest3
public static void main(String s[ ])
String args;
System.out.print(args + s);
>>
Результатом компиляции кода будет?
>> ошибка компиляции: переменная args используется до инициализации.
160. Дан код:
public class Quest5
public static void main()
System.out.print(«А«); >
public static void main(String args)
System.out.print(«Б«); >
public static void main(String[] args)
System.out.print(«В»);>>
Что будет выведено в результате компиляции и запуска?
>> B
161. Какие из следующихутверждений истинные?
a-nonstatic-метод не может быть вызван из статического метода;
b-static-метод не может быть вызван из нестатического метода;
c-private-метод не может быть вызван из другого метода этого класса;
d-final-метод не может быть статическим.
>> a
162. Дан код:
public class Quest5
static
Quest5()
public static void main(String[] args)
System.out.print(«4»); >>
В результате при компиляции и запуске будет выведено?
>> 24
163. Какие из объявлений корректны, если
classOwner
classInner
>>?
>> new Owner().new Inner();
164. Дан код:
public class Quest1
public static void main(String[] args)
String str = new String(«java»);
int i=1;
char j=3;
System.out.println(str.substring(i,j));>>
В результате при компиляции запуске будет выведено?
>>
165. Экземпляром какого класса является поле System.in?
>> java.io.InputStream;
166. Какой абстрактный класс является суперклассом для всех классов, используемых для чтения байтов?
>> InputStream
167. Какой интерфейс наиболее пригоден для создания класса, содержащего несортированные уникальные объекты?
>> Set
168. Дан код:
Какой код читает параметр count в переменную i?
>> int i = new Integer(getParameter(»count»)).intValue()
Какой способ проверки «является ли объект экземпляром класса» быстрее?
Интересный вопрос.
Oчевидно, что способ getClass() != o.getClass() будет работать быстрее, чем instanceof , т.к. это только лишь сравнение ссылок.
Но эти два способа, в некоторых ситуациях, не эквиваленты между собой.
Приведу пример:
class Type<> SubType extends Type<>
Если мы напишим:
Type type = new SubType() if(type instanceof Type) System.out.pritln("it's working!") if(type.getClass() == Type.class) System.out.pritln("it is not working!")
Первая проверка выполнится, а вторая нет.
Теперь попробуем разобраться как реализована конструкция instanceof .
При компиляции она пребразуется в специальный для нее байткод инструкцию instanceof . Заглянем в исходники hotspot и посмотрим, как она генерируется в assembler код. Будет смотреть только для архитектуры x86.
Находим место, где обрабатывается intanceof jit компилятором:
. > else if (code == lir_instanceof) < Register obj = op->object()->as_register(); Register dst = op->result_opr()->as_register(); Label success, failure, done; emit_typecheck_helper(op, &success, &failure, &failure); . > .
. > else < // perform the fast part of the checking logic __ check_klass_subtype_fast_path(klass_RInfo, k_RInfo, Rtmp1, success_target, failure_target, NULL); // call out-of-line instance of __ check_klass_subtype_slow_path(. ): __ push(klass_RInfo); __ push(k_RInfo); __ call(RuntimeAddress(Runtime1::entry_for(Runtime1::slow_subtype_check_id))); __ pop(klass_RInfo); __ pop(k_RInfo); // result is a boolean __ cmpl(k_RInfo, 0); __ jcc(Assembler::equal, *failure_target); // successful cast, fall through to profile or jump >.
Здесь мы можем видеть две проверки check_klass_subtype_fast_path и check_klass_subtype_slow_path.
Во время работы программы jvm собирает некоторую информацию и статистику. Например, она может сохранять результаты предыдущих выполений instanceof и на основе этого делать предположения о типе. Более подробно об этом можно прочитать здесь . Быстрая проверка основывается на этой оптимизации и она не всегда может выполняться успешно, тогда вступает в дело более медленная check_klass_subtype_slow_path .
Для дальнейшего понимания, следует немного рассказать про класс src/hotspot/share/oops/klass.cpp . В нем содержится информация (барабанная дробь) о классе. Там есть много интересных полей, но нас интересует следующее:
// The fields _super_check_offset, _secondary_super_cache, _secondary_supers // and _primary_supers all help make fast subtype checks. See big discussion // in doc/server_compiler/checktype.txt // Where to look to observe a supertype (it is &_secondary_super_cache for // secondary supers, else is &_primary_supers[depth()]. juint _super_check_offset; // Cache of last observed secondary supertype Klass* _secondary_super_cache; // Array of all secondary supertypes Array* _secondary_supers; // Ordered list of all primary supertypes Klass* _primary_supers[_primary_super_limit];
Видно, что в нем содержится массив со всеми родительскими типами, так же есть несколько полей для быстрой проверки типов .
Не будем рассматривать метод:
Там происходит лишь проверка закэшированных значений с проверяемым типом. Гораздо интереснее метод check_klass_subtype_slow_path
. Label L_fallthrough; int label_nulls = 0; if (L_success == NULL) < L_success = &L_fallthrough; label_nulls++; >if (L_failure == NULL) < L_failure = &L_fallthrough; label_nulls++; >// a couple of useful fields in sub_klass: int ss_offset = in_bytes(Klass::secondary_supers_offset()); int sc_offset = in_bytes(Klass::secondary_super_cache_offset()); Address secondary_supers_addr(sub_klass, ss_offset); Address super_cache_addr( sub_klass, sc_offset); // Do a linear scan of the secondary super-klass chain. // This code is rarely used, so simplicity is a virtue here. // The repne_scan instruction uses fixed registers, which we must spill. // Don't worry too much about pre-existing connections with the input regs. assert(sub_klass != rax, "killed reg"); // killed by mov(rax, super) assert(sub_klass != rcx, "killed reg"); // killed by lea(rcx, &pst_counter) // Get super_klass value into rax (even if it was in rdi or rcx). bool pushed_rax = false, pushed_rcx = false, pushed_rdi = false; if (super_klass != rax || UseCompressedOops) < if (!IS_A_TEMP(rax)) < push(rax); pushed_rax = true; >mov(rax, super_klass); > if (!IS_A_TEMP(rcx)) < push(rcx); pushed_rcx = true; >if (!IS_A_TEMP(rdi)) < push(rdi); pushed_rdi = true; >// We will consult the secondary-super array. movptr(rdi, secondary_supers_addr); // Load the array length. (Positive movl does right thing on LP64.) movl(rcx, Address(rdi, Array::length_offset_in_bytes())); // Skip to start of data. addptr(rdi, Array::base_offset_in_bytes()); // Scan RCX words at [RDI] for an occurrence of RAX. // Set NZ/Z based on last compare. // Z flag value will not be set by 'repne' if RCX == 0 since 'repne' does // not change flags (only scas instruction which is repeated sets flags). // Set Z = 0 (not equal) before 'repne' to indicate that class was not found. testptr(rax,rax); // Set Z = 0 repne_scan(); // Unspill the temp. registers: if (pushed_rdi) pop(rdi); if (pushed_rcx) pop(rcx); if (pushed_rax) pop(rax); if (set_cond_codes) < // Special hack for the AD files: rdi is guaranteed non-zero. assert(!pushed_rdi, "rdi must be left non-NULL"); // Also, the condition codes are properly set Z/NZ on succeed/failure. >if (L_failure == &L_fallthrough) jccb(Assembler::notEqual, *L_failure); else jcc(Assembler::notEqual, *L_failure); // Success. Cache the super we found and proceed in triumph. movptr(super_cache_addr, super_klass); if (L_success != &L_fallthrough) < jmp(*L_success); >.
Могу ошибаться, но это очень похоже на цикл с индексом rdi, где происходит итерация по массиву _secondary_supers из класса Klass .
Теперь можно подытожить. JVM пытается производить оптимизации, но в худшем случае мы имеем что instanceof будет выполняться линейно, пробегая по всей иерархии классов.