![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: 7 Всего: 28 |
Уважаемые!
Я вот уже год изучаю яву, перехожу на нее с делфи, паскаля, бэйсика (старинного). Хочу ей заниматься профессионально, для чего поставил себе цель для начала получить SCJP-сертификат. Скачал себе Sun.Testkiller.310-055.224q, тренеруюсь помаленьку. Вопросы, в принципе, несложные, разобраться можно, но есть с десяток, ставящих меня в тупик. Если Вы найдете время посмотреть их и обьяснить что к чему, буду Вам очень благодарен! Вот эти вопросы: 11. static void test() throws Error { 12. if (true) throw new AssertionError(); 13. System.out.print(“test “); 14. } 15. public static void main(String[] args) { 16. try { test(); } 17. catch (Exception ex) { System.out.print(“exception “); } 18. System.out.print(“end “); 19. } What is the result? Ответ - A Throwable is thrown by main. Непонятно, почему? Был также вариант An Exception is thrown by main. Чем плох он? Когда я запускал этот пример, у меня выводилось именно Exception in thread "main" java.lang.AssertionError! ------------------------------------------------------------------------------------------------------------------- 11. public String makinStrings() { 12. String s = «Fred»; 13. s = s + «47»; 14. s = s.substring(2, 5); 15. s = s.toUpperCase(); 16. return s.toString(); 17. } How many String objects will be created when this method is invoked? Ответ – 3. Правильно ли я понял, что методы toUpperCase() и toString() класса String не создают новые объекты? И если да, то какие еще не создают? ---------------------------------------------------------------------------------------------------------------------- Assuming that the serializeBanana2() and the deserializeBanana2() methods will correctly use Java serialization and given: 13. import java.io.*; 14. class Food {Food() { System.out.print(«1»); } } 15. class Fruit extends Food implements Serializable { 16. Fruit() { System.out.print(«2»); } } 17. public class Banana2 extends Fruit { int size = 42; 18. public static void main(String [] args) { 19. Banana2 b = new Banana2(); 20. b.serializeBanana2(b); // assume correct serialization 21. b = b.deserializeBanana2(b); // assume correct 22. System.out.println(“ restored “+ b.size + “ “); } 23. // more Banana2 methods 24. } What is the result? Ответ – 121 restored 42 именно так и получается, но почему? (в смысле, почему не 12 restored 42 )? Сознаюсь, не очень хорошо знаком с сериализацией! ---------------------------------------------------------------------------------------------------------------------- 1. public class Threads1 { 2. int x=0; 3. public class Runner implements Runnable { 4. public void run() { 5. int current = 0; 6. for(int i=0;i<4;i++){ 7. current = x; 8. System.out.print(current + «, «); 9. x = current + 2; 10. } 11. } 12. } 13. 14. public static void main(String[] args) { 15. new Threads1().go(); 16. } 17. 18. public void go() { 19. Runnable r1 = new Runner(); 20. new Thread(r1).start(); 21. new Thread(r1 ).start(); 22. } 23. } Which two are possible results? (Choose two.) А 0, 2, 4, 4, 6, 8, 10, 6, В 0, 2, 4, 6, 8, 10, 2, 4, С 0, 2, 4, 6, 8, 10, 12, 14, D 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, Е 0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14, Верные ответы А и С, но непонятно, почему не может быть верен также ответ В? Кстати, при запуске этого примера у меня постоянно получалось 0, 0, 2, 2, 4, 4, 6, 6, -------------------------------------------------------------------------------------------------------------------- 1. import java.util.*; 2. 3. public class NameList { 4. private List names = new ArrayList(); 5. public synchronized void add(String name) { names.add(name); } 6. public synchronized void printAll() { 7. for (int i = 0; i <names.size(); i++) { 8. System.out.print(names.get(i) +» «); 9. } 10. } 11. public static void main(String[] args) { 12. final NameList sl = new NameList(); 13. for(int i=0;i<2;i++) { 14. new Thread() { 15. public void ruin() { 16. sl.add(«A»); 17. sl.add(«B»); 18. sl.add(«C»); 19. sl.printAll(); 20. } 21. }.start(); 22. } 23. } 24. } Which two statements are true if this class is compiled and run? (Choose two.) A An exception may be thrown at runtime. B The code may run with no output, without exiting. C The code may run with no output, exiting normally. D The code may rum with output “A B A B C C “, then exit. E The code may rum with output «A B C A B C A B C «, then exit. F The code may ruin with output “A A A B C A B C C “, then exit. G The code may ruin with output “A B C A A B C A B C “, then exit. Интересно, сколько я ни запускал этот пример, на экран ничего не выводилось. Авторы этого вопроса утверждают, что правильные ответы Е и G, но, если на то пошло, почему не может быть верен также ответ F? --------------------------------------------------------------------------------------------------------------------- public class Transfers { public static void main(String[] args) throws Exception { Record r1 = new Record(); Record r2 = new Record(); doTransfer(r1, r2, 5); doTransfer(r2, r1, 2); doTransfer(r1, r2, 1); System.out.println("rl=" + r1.get() + ", r2=" + r2.get()); } private static void doTransfer(final Record a, final Record b, final int amount) { Thread t = new Thread() { public void run() { new Clerk().transfer(a, b, amount); } }; t.start(); } } class Clerk { public synchronized void transfer(Record a, Record b, int amount){ synchronized (a) { synchronized (b) { a.add(-amount); b.add(amount); } } } } class Record { int num = 10; public int get() { return num; } public void add(int n) { num = num + n; } } If Transfers.main() is run, which three are true? (Choose three.) Cколько я ни запускал этот пример, выводилось rl=10, r2=10. А ответы помечены следующие: А) The output may be “r1 = 6, r2 = 14”, В) The output may be “r1 = 5, r2 = 15” и Е) The code may deadlock (without completing) with no output. --------------------------------------------------------------------------------------------------------------------- import java.util.TreeSet; class Drink implements Comparable { public String name; public int compareTo(Object o) { return 0; } } public class MinMax { public static void main(String[] args) { Drink one = new Drink(); Drink two = new Drink(); one.name = "Coffee"; two.name = "Tea"; TreeSet<Drink> set = new TreeSet<Drink>(); set.add(one); set.add(two); for (Drink d: set) System.out.print(d.name); } } What is the result? В результате выходит Coffee, однако, если в методе public int compareTo(Object o) поставить в return’e не 0 а 1, выходит CoffeeTea объясните, пожалуйста, почему? ----------------------------------------------------------------------------------------------------------------- Given: ArrayList a = new ArrayList(); containing the values {«1», «2», «3», «4», «5», «6», «7», «8»} Which code will return 2? Ответ - Comparator c = Collections.reverseOrder(); Collections.sort(a, c); int result = Collections.binarySearch(a, «6»,c); честно – не совсем понимаю, как работает метод binarySearch(List<? extends T> list, T key, Comparator<? super T> c) объясните, пожалуйста! Given classes defined in two different files: 1. package packageA; 2. public class Message { 3. String getText() { return «text»; } 4. } and: 1. package packageB; 2. public class XMLMessage extends packageA.Message { 3. String getText() { return “<msg>text</msg>”; } 4. public static void main(String[] args) { 5. System.out.println(new XMLMessage().getText()); 6. } 7. } What is the result of executing XMLMessage.main? Ответ - Compilation fails because of an error in line 3 of XMLMessage. Однако, когда я запускал этот пример, получал <msg>text</msg>! Что это, ошибка разработчиков теста? Ведь для того, чтобы этот ответ был верен, надо чтобы class Message не был public? -------------------------------------------------------------------------------------------------------------------- A UNIX user named Bob wants to replace his chess program with a new one, but he is hot sure where the old one is installed. Bob is currently able to run a Java chess program starting from his home directory /home/bob using the command: java -classpath /test:/home/bob/downloads/* .jar games.Chess Bob’s CLASSPATH is set (at login time) to: /usr/lib:/home/bob/classes:/opt/java/lib:/opt/java/lib/* .jar What is a possible location for the Chess.class file? Ответ - /test/games/Chess.class В UNIX я не силён, объясните, пожалуйста! [email protected] -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
Andy_L20066 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 10.3.2008 Репутация: нет Всего: 1 |
Привет,
тут на счет первого вопроса с Exception.... все просто... правильный ответ: Throwable, поскольку AssertionError extends Throwable, а не Exception. Тут просто надо помнить иерархию иксепшинов... Очень просто ошибиться с этим вопросом... Другие вопросы пока еще не смотрел... |
|||
|
||||
rygel |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 21.9.2007 Где: Харьков Репутация: 6 Всего: 7 |
11. static void test() throws Error {
12. if (true) throw new AssertionError(); 13. System.out.print(“test “); 14. } 15. public static void main(String[] args) { 16. try { test(); } 17. catch (Exception ex) { System.out.print(“exception “); } 18. System.out.print(“end “); 19. } Точнее AssertionError экстендит Error, а Error extends Throwable. потому перехват эксепшенов типа Exception пропустит эксепшены типа Error. Error и Exception это две разные ветки в иерархии исключений. Добавлено через 5 минут и 16 секунд 11. public String makinStrings() { 12. String s = «Fred»; 13. s = s + «47»; 14. s = s.substring(2, 5); 15. s = s.toUpperCase(); 16. return s.toString(); 17. } String s = «Fred»; - в данном случае объект не создается, потому как при такой инициализации компилятор создает пул констант строковых. String - немодифицируемый, то есть любые модифицирующие действия примененные к его объектам будет возвращать новый объект. А по сему: s = s + «47»; - создаст новый объект s = s.substring(2, 5); - создаст новый объект s = s.toUpperCase(); - создаст новый объект return s.toString(); - возвращает ссылку на этот же объект. Итого 3 объекта |
|||
|
||||
rygel |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 21.9.2007 Где: Харьков Репутация: 6 Всего: 7 |
3. public class NameList {
4. private List names = new ArrayList(); ...... Если нет опечаток то правильный ответ С. Наследуясь от Thread можно переопределить метод public void run() внутри которого будет выполняться работа нашего потока. В данном случае метод объявлен иной public void ruin() . Значит когда вызывется метод start - выполнится метод run() класса Thread, и так как он у нас не переопределен поток сразу и завершится. |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
UNIX тут не причём. Опция -classpath замещает путь, определённый в переменной окружения CLASSPATH, и масок в класс-пути пускач тоже ни разу не понимает. Поэтому всё это развесистое описание можно заменить на следующее: "Боб запускает игру с помощью команды 'java -classpath /test games.Chess'. Где находится файл Chess.class?" -------------------- ![]() ![]() |
|||
|
||||
rygel |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 21.9.2007 Где: Харьков Репутация: 6 Всего: 7 |
import java.util.TreeSet;
class Drink implements Comparable { ................ потому что при TreeSet использует comapareTo вместо equals для проверки на равенство объектов + set не содержит одинаковые элементы + TreeSet это упорядоченно множество, а посему если compareTo возвращает 0 - это значит что объекты равны, и второй объект не добавляется в множество, если -1 или 1 то элемент добавляется, но это влияет на порядок элементов. |
|||
|
||||
rygel |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 21.9.2007 Где: Харьков Репутация: 6 Всего: 7 |
serializeBanana2() :
http://www.rsdn.ru/article/java/scjp_article.xml "при десериализации объекта класса, реализующего Serializable, его конструктор не выполняется, а поля не инициализируются значениями по умолчанию. Однако если создать сериализуемый (через Serializable) класс, который наследует несериализуемый класс, при десериализации его объекта происходит инициализация по умолчанию полей суперкласса и вызов его конструктора" Добавлено через 12 минут и 56 секунд ArrayList a = new ArrayList(); containing the values {«1», «2», «3», «4», «5», «6», «7», «8»} ................................. http://en.wikipedia.org/wiki/Binary_search_algorithm в принципе для бинарного поиска важно чтобы коллекция была упорядочена, в данном случае коллекция содержит после сортировки элементы в обратном порядке 8,7,6, - потому 6 занимает позицию 2. |
|||
|
||||
rygel |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 21.9.2007 Где: Харьков Репутация: 6 Всего: 7 |
package packageB;
public class XMLMessage extends packageA.Message { ................ странно конечно. тут все верно. Метод в классе Message недоступен для наследника, у него доступ package. и объекты классов других package, в том числе и наследники из других package его не увидят. И вызывается в данном коде метод класса XMLMessage. |
|||
|
||||
ivg |
|
||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
Два потока, 4 итерации - 8 чисел выводится -> варианты D, E отпадают. Вариант B: Числа 2 и 4 выводятся по 2 раза, можно показать, что при таком порядке вывода это означает, что они выведены разными потоками. Числа же 6, 8, 10 напротив выведены в одном потоке, это следует из того, что если бы это было не так, то последние два числа должны быть не менее 4. Получаем, что в одном из потоков были выведены 5 чисел, что конечно же быть не может, поскольку итераций всего 4. Добавлено через 8 минут и 3 секунды
Интересно было бы посмотреть на неправильные ответы. Те что приведены вполне подходят, только вариант E не совсем точен. Deadlock возможен, однако output будет, поскольку выполняется в main потоке. |
||||
|
|||||
Kangaroo |
|
||||||
![]() AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
1. Java уже 6.0 надо сдавать
![]() 2. В следующий раз постарайся нормально оформить пост - разграничь задачи пустыми строками, для оформления кода используй кнопку "Код". Оставшиеся задачки:
Не выводилось ничего, потому что опечатка - правильный метод run(), а не ruin()
Потому что два потока не могут добавить три буквы А подряд.
Правильных вариантов много. А вот дедлока тут вроде не должно получиться. -------------------- Lost.... |
||||||
|
|||||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
||||
|
||||
Kangaroo |
|
||||
![]() AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
Они вложены:
Если кто-то займет "а", то второй "б" не сможет.. -------------------- Lost.... |
||||
|
|||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
порядок аргументов другой для второго потока: Вообще получение нескольких эксклюзивных блокировок на разных объектах в стеке вызовов одного потока - есть потенциальный кандидат на deadlock. |
|||
|
||||
Kangaroo |
|
|||
![]() AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
Ааа, точно. Проглядел ![]() -------------------- Lost.... |
|||
|
||||
Pawl |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: 7 Всего: 28 |
Спасибо огромное!
Извините, что некоррекно оформил код - первый раз на форуме. Что касается Java 1-6, то и до нее доберусь помаленьку: скачаю литературу, примеры тестов... А пока еще 3 вопроса по Sun.Testkiller.310-055.224q, последние! С остальными разобрался, с Вашей помощью ![]() Given:
Which is true? Ответ – This code may throw an IllegalStateException. Почему? Мне кажется, что This code may throw an InterruptedException, ведь оно тут никак не обрабатывается, а должно (его может выбросить метод wait())! И вообще, в документации сказано, что методы wait() и notify() выбрасывают IllegalMonitorStateException, а не IllegalStateException! -----------------------------------------------------------------------------------------------------------------------------------------------------------------------
What is the output if the main() method is rum? Ответ – 9. Я тут не понял, для какого потока вызывается метод join() и как он тут работает (без него получается 4) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- Given:
What must you change in this method to compile without warnings? Ответ - change the method signature on line 11 to:public void addStrings(List<? super String> list). Он верен, но я не понимаю, почему? Ведь разве super тут не показывает, что параметр типа в списке имеет нижнюю границу типа String, причем не включая ее? (т.е., в частности, List в таком случае можно инициализировать объектами типа Object ?) -------------------- В действительности всё совсем не так, как на самом деле |
||||||
|
|||||||
ivg |
|
||||||||||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
А х.з. По мне, дак ответом будет: This code throws an IllegalMonitorStateException. -----------------------------------------------------------------------------------------------------------------------------------------------------------------------
join() приостанавливает работу текущего потока (потока, в котором этот метод вызывается, в данном случае основного потока, выполняющего метод main()), до тех пор пока не завершиться другой поток, на объекте которого вызван метод join() (в данном случае на экземпляре класса Starter, который создан в методе main()) -----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Тут идеология немного другая - множество типов параметра, задаваемое с помощью конструкции <? super String> предназначено для проверки типа параметра в вызывающем коде, т. е., например, следующие вызовы метода addStrings() не должны привести к ошибке компиляции:
Ответ, конечно же, - нет, поскольку в вызывающем коде, неявное безопасное приведение типов будет обеспечено только для new ArrayList<Object>(), но компилятор заранее не знает какой тип параметра будет в вызывающем коде. А знает он только, что этот тип является супертипом String, следовательно безопасно можно добавить в лист объект класса String или его сабклассов, если бы они были (таковых конечно нет, поскольку String final) |
||||||||||
|
|||||||||||
Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: 7 Всего: 28 |
Спасибо всем огромное, разобрался и закрываю тему. Кстати, если кому надо, есть ссылка на образ диска с базой данных вопросов, эмулятором теста и электронной книжкой по SCJP Java-1.6:
http://itbookz.ru/prog/lang/java/5358-scjp...va-6-study.html Незнаю, правда, сколько она еще будет действовать (сам я качал с нее вчера). -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
Kangaroo |
|
|||
![]() AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
Там только книжка.. А где бд и эмулятор? ![]() -------------------- Lost.... |
|||
|
||||
agR |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 19.7.2006 Где: Киев Репутация: 2 Всего: 2 |
Вот. Скачал с рапиды.
|
|||
|
||||
Kangaroo |
|
|||
![]() AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
agR, спасибо
![]() Держи плюса ![]() -------------------- Lost.... |
|||
|
||||
Pawl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: 7 Всего: 28 |
Попробуйте еще здесь:
http://itbookz.ru/prog/lang/java/5359-scjp...va-6-study.html http://tvarei.net/content/14/read422.html http://rapidlinks.ru/link/?lnk=43292 -------------------- В действительности всё совсем не так, как на самом деле |
|||
|
||||
Kangaroo |
|
|||
![]() AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
Pawl, это тоже самое? Или новое что-то?
Добавлено через 56 секунд Вроде тоже самое... Другим будет полезно. -------------------- Lost.... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |