
- •Е.Б. Юдин Объектно-ориентированное программирование на языке java
- •Введение
- •Лабораторные работы Лабораторная работа №1 – Разработка консольного приложения
- •Класс StringTokenizer. .Лексический анализ текста
- •Регулярные выражения
- •Задания к лабораторной работе №1
- •Лабораторная работа №2 Разработка визуального приложения.
- •Задания к лабораторной работе №2
- •Лабораторная работа № 3 Построение объектно-ориентированного приложения
- •Шаблоны проектирования
- •Библиотека Jung
- •Средства визуализации
- •Значимости
- •Задания к лабораторной работе №3
- •Вопросы по синтаксису языка и объектно-ориентированному программированию
- •Синтаксис и семантика языка
- •Вопрос 1: Каков будет результат выполнения программы
- •Вопрос 2: Приведенная ниже программа должна вывести на консоль Hello World! Выберите строки, которые нужно модифицировать в вашей программе, что бы получить правильный результат.
- •Вопрос 3: Какая строка будет выдана на консоль после выполнения фрагмента кода
- •Вопрос 4: Дан код:
- •Вопрос 6: Дан код:
- •Вопрос 7:
- •Вопрос 8: Дан код:
- •Вопрос 9: Дан код:
- •Вопрос 10: Дан код:
- •Вопрос 11: Какие из следующих утверждений истинные?
- •Вопрос 12: Дан код:
- •Вопрос 13: Какие из объявлений корректны, если:
- •Вопрос 14: Что будет выведено в результате компиляции и выполнения следующего кода:
- •Вопрос 15: Корректен ли следующий код? Если нет, то какие исправления можно предложить?
- •Вопрос 16: Корректно ли следующее обращение к переменной X?
- •Вопрос 17: Можно ли при переопределении некоторого абстрактного метода perform()
- •Вопрос 18
- •Вопрос 19
- •Вопрос 20: Какие объекты могут быть клонированы?
- •Создание визуальных приложений
- •Вопрос 1
- •Вопрос 2
- •Вопрос 3
- •Вопрос 4
- •Вопрос 5
- •Вопрос 6
- •Вопрос 6
- •Вопрос 7
- •Вопрос 8
- •Вопрос 9
- •Вопрос 10
- •Вопрос 11
- •Вопрос 12
Вопросы по синтаксису языка и объектно-ориентированному программированию
Ниже перечисленные вопросы по сложности расположены в произвольном порядке (их упорядоченность по темам). Это связано с тем, что подразумевается, что студент к началу работы над разбором познакомился с языком и ему остаётся только углубить понимание специфики и конструкций языка, кроме того студент к моменту изучения языка JAVA изучал как процедурные языки (PASCAL, С), так и знакомился с объектно-ориентированными (С#). А значит нужно ориентироваться на отличия JAVA от других языков и на темы, а не сложность изложения. При этом рекомендуется в сложных вопросах при их разборе обращаться к дополнительной литературе, предоставленной в электронном виде для чтения, в частности разбор спецификации Гослинга (одного из создателей языка), книги по Java от компании SUN, «Философия JAVA» Брюса Эккеля. Также рекомендуются следующие электронные ресурсы и пособия:
-
http://javaalmanac.com/ Примеры кода из Java Developers Almanac
-
Шилдт, Г. Java 2 v.5.0. [Электрон. ресурс] http://bsu.iba.by/books/Java2v5.zip
Гослинг, Дж., Арнольд, К. Язык программирования Java [Электрон. ресурс] http://bsu.iba.by/books/goslingJava.zip
Синтаксис и семантика языка
Вопрос 1: Каков будет результат выполнения программы
1. public class Test {
2. public Test() {
3. }
4.
5. public static void main(String[] args) {
6. Test test = new Test();
7. int i = 5;
8. while(i = 5){
9. System.out.println(i++);
10. }
11. }
12.
}
• 1 Компилятор выдаст сообщение об ошибке в строке 8
• 2 На консоль будут последовательно выведены значения 01234
• 3 На консоль будут последовательно выведены значения 43210
• 4 Программа откомпилируется,но на консоль ничего выведено не будет
Ответ: Правильный ответ 1. В операторе while может быть использовано только булево значение. В данном случае используется оператор присваивания,а не сравнения, т.о. компилятор выдаст ошибку. Так как здесь предложено выбрать только один ответ остальные ответы неверные
Вопрос 2: Приведенная ниже программа должна вывести на консоль Hello World! Выберите строки, которые нужно модифицировать в вашей программе, что бы получить правильный результат.
1. public class Test {
2. public Test() {
3. }
4. public static void main(String[] args) {
5. Test test = new Test();
6. String [] arr = {"H","e","l","l","o","
","w","o","r","l","d","!"};
7. String result = "";
8. int i= 0;
9. for(;;;){
10. result += arr[i++];
11. }
12. System.out.println(result);
13. }
14. }
• 1 Заменить строку 9 на for(i = 0; i < arr.length;){
• 2 Заменить строку 9 на for(int int i = 0; i < arr.length;){
• 3 Заменить строку 9 на for(i = 0; i < arr.length;i++){
• 4 Заменить строку 9 на for(i = 1; i <= arr.length;i++){
Ответ: Правильный ответ 1
Ответ 2 не верен так как переменная i уже определена в методе main. Здесь следует еще раз напомнить, что область видимости переменной (если она объявлена в цикле for) будет ограничиваться лишь телом цикла. Однако в данном случае перемена с таким именем уже объявлена в теле метода и соответственно находится в той же области видимости. Если переменная была бы объявлена, как переменная класса, то этот код откомпилировался бы вполне успешно. Ответ 3 не является верным так как, увеличение значения i в теле цикла будет произведено дважды, т.о. на печать будут выведены лишь четные элементы массива. Ответ 4 не является верным по двум причинам. Первая – элементы массива нумеруются с 0, соответственно первым будет выбран второй элемент массива, вторая – когда выполнится условие окончания цикла, будет нарушена граница массива и будет вызвано исключение IndexOfBoundException