SCJP 기출문제 및 해답(1)


1. Given the following class definition:
     class A {
          protected int i;
          A(int i) {
               this.i = i;
          }
     }
  Which of the following would be a valid inner class for this class? Select all valid answers.
  a. class B {}
  b. class B extends A {}
  c. class B {
          B() { 
               System.out.println("i = " + i);
          }
     }
  d. class B {
          class A {}
     }
  e. class A {}

2. What statements are true concerning the method notify() that is used in conjunction with wait()? Select all valid answers.
  a. if there is more than one thread waiting on a condition, only the thread that has been waiting the longest is notified
  b. if there is more than one thread waiting on a condition,there is no way to predict which thread will be notifed
  c. notify() is defined in the Thread class
  d. it is not strictly necessary to own the lock for the object you invoke notify() for
  e. notify() should only be invoked from within a while loop

3. Given the following class:
     class Counter {
          public int startHere = 1;
          public int endHere = 100;
          public static void main(String[] args) {
               new Counter().go();
          }
          void go() {
               // A
               Thread t = new Thread(a);
               t.start();
          }
     }
  What block of code can you replace at line A above so that this program will count from startHere to endHere? 
  Select all valid answers.
  a. Runnable a = new Runnable() {
          public void run() {
               for (int i = startHere; i <= endHere; i++) {
                    System.out.println(i);
               }
          }
     };
  b. a implements Runnable {
          public void run() {
               for (int i = startHere; i <= endHere; i++) {
                    System.out.println(i);
               }
          }
     };
  c. Thread a = new Thread() {
          public void run() {
               for (int i = startHere; i <= endHere; i++) {
                    System.out.println(i);
               }
          }
     };

4. What is written to the standard output given the following statement:
          System.out.println(4 | 7);
  Select the one right answer.
  a. 4
  b. 5
  c. 6
  d. 7
  e. 0

5. Given the following class:
     class Counter {
          public static void main(String[] args) {
               Thread t = new Thread(new CounterBehavior());
               t.start();
          }
     }
  Which of the following is a valid definition of CounterBehavior that would make Counter main() method count from 1 to 100,   counting once per second? Select the one right answer.
  a. This class is an inner class to Counter:
     class CounterBehavior {
          for (int i = 1; i <= 100; i++);
          try {
               System.out.println(i);
               Thread.sleep(1000);
          } catch (InterruptedException x) {}
     }

  b. This class is an inner class to Counter:
     class CounterBehavior implements Runnable {
          public void run() {
               for (int i = 1; i <= 100; i++);
               try {
                    System.out.println(i);
                    Thread.sleep(1000);
               } catch (InterruptedException x) {}
          }
     }
  c. This class is a top-level class:
     static class CounterBehavior implements Runnable {
          public void run() {
               try {
                    for (int i = 1; i <= 100; i++) {
                         System.out.println(i);
                         Thread.sleep(1000);
                    }
               } catch (InterruptedException x) {}
          }
     }

6. Given the following class definition:
     class A {
          public int x;
          private int y;
          class B {
               protected void method1() {}
               class C {
                    private void method2() {}
               }
          }
     }
     class D extends A {
          public float z;
     }
  What can method2() access directly, without a reference to another instance?
  Select all valid answers.
  a. the variable x defined in A
  b. the variable y defined in A
  c. method1 defined in B
  d. the variable z defined in D

7. You have an 8-bit file using the character set defined by ISO 8859-8. You are writing an application to display this file in a   TextArea. The local encoding is already set to 8859-8. 
   How can you write a chunk of code to read the first line from this file?
    -. You have three variables accessible to you: 
    -. myfile is the name of the file you want to read 
    -. stream is an InputStream object associated with this file 
    -. s is a String object 
   Select all valid answers.
  a. InputStreamReader reader = new InputStreamReader(stream, "8859-8");
     BufferedReader buffer = new BufferedReader(reader);
     s = buffer.readLine();
  b. InputStreamReader reader = new InputStreamReader(stream);
     BufferedReader buffer = new BufferedReader(reader);
     s = buffer.readLine();
  c. InputStreamReader reader = new InputStreamReader(myfile, "8859-8");
     BufferedReader buffer = new BufferedReader(reader);
     s = buffer.readLine();
  d. InputStreamReader reader = new InputStreamReader(myfile);
     BufferedReader buffer = new BufferedReader(reader);
     s = buffer.readLine();
  e. FileReader reader = new FileReader(myfile);
     BufferedReader buffer = new BufferedReader(reader);
     s = buffer.readLine();

8. How can you write a line of code for an applet init() method that determines how wide the applet is? 
   Select all valid answers.
  a. int width = this.getY();
  b. int width = this.getSize().w;
  c. int width = getSize();
  d. int width = getSize().w;
  e. int width = getWidth();

9. For a variable width font, how "wide" is a TextField created using the expression:
     new TextField(20)
   Select the one right answer.
  a. 20 times the average of all the characters in the font used for this TextField object
  b. 20 times the width of the letter M
  c. 20 times the width of the letter a
  d. 20 inches
  e. 20 picas

10. Given this interface definition:
     interface A {
          int method1(int i);
          int method2(int j);
     }
  Which of the following classes implement this interface and is not abstract?Select all valid answers.
  a. class B implements A {
          int method1() { }
          int method2() { }
     }
  b. class B {
          int method1(int i) { }
          int method2(int j) { }
     }
  c. class B implements A {
          int method1(int i) { }
          int method2(int j) { }
     }
  d. class B extends A {
          int method1(int i) { }
          int method2(int j) { }
     }
  e. class B implements A { 
          int method2(int j) { }
          int method1(int i) { }
     }

11. Given the following code:
     import java.awt.*;
     import java.awt.event.*;
     public class MyApplet extends java.applet.Applet {
          public void init() {
               Button b = new Button("Button1");
               b.addMouseListener(new ClickHandler());
               add(b);
          }
          class ClickHandler extends MouseAdapter {
               public void mouseClicked(MouseEvent evt) {
                    // A
               }
          }
     }
  What line of code at A writes the mouse horizontal location to the standard output at the time of the event?  Fill in the blank.

12. Given the same code as in question 10, how can you write a line of code at A that will place the Button object into a variable     named mybutton that is already defined to be a reference to a Button object? 
    Fill in the blank.

13. Which Listener interface can you implement to be able to respond to the user hitting he enter key after typing into a TextField     object? 
    Fill in the blank.

14. Which Listener interfaces can you add to a TextArea object?
  a. TextListener
  b. ActionListener
  c. MouseMotionListener
  d. MouseListener
  e. ComponentListener

15. What appears in the standard output if the method named problem() in the code below throws an instance of class      Exception when the method named trythis() is invoked?
     public void trythis() {
         try {
               System.out.println("1");
               problem();
          } catch (RuntimeException x) {
               System.out.println("2");
               return;
          } catch (Exception x) {
               System.out.println("3");
               return;
          } finally {
               System.out.println("4");
          }
          System.out.println("5");
     }
  Select all valid answers.
  a. "1"
  b. "2"
  c. "3"
  d. "4"
  e. "5"

16. What is the type of the Event object passed to the mouseDragged() method defined in a class that implements    java.awt.event.MouseMotionListener (that is, what is the class name for the argument)?
    Fill in the blank.

17. Examine the following switch block:
     char mychar = 'c';
     switch (mychar) {
          default:
          case 'a': System.out.println("a"); break;
          case 'b': System.out.println("b"); break;
     }
  Which of the following questions are definitely true? Select all valid answers.
  a. This switch block is illegal, because only integers can be used in the switch statement.
  b. This switch block is fine.
  c. This switch block is illegal, because the default statement must come last.
  d. When this code runs, nothing is written to the standard output.
  e. When this code runs, the letter "a" is written to the standard output.

18. What keyword must appear in a method declaration (followed by the name of the exception) when that method might cause an     exception to be thrown and that method does not handle the exception?
    Fill in the blank.

19. Which statements accurately describe the following line of code?
    Select all valid answers.
    String[][] s = new String[10][];
  a. This line of code is illegal.
  b. s is a two-dimensional array containing 10 rows and 10 columns
  c. s is an array of 10 arrays.
  d. Each element in s is set to ""
  e. Each element in s is uninitialized and must be initialized before it is referenced.

20. What will happen if you try to compile and run the following class?
     class Test {
          static int myArg = 1;
          public static void main(String[] args) {
               int myArg;
               System.out.println(myArg);
          }
     }
  Select the one right answer.
  a. This code compiles and displays 0 in the standard output when run.
  b. This code compiles and displays 1 in the standard output when run.
  c. This code does not compile because you cannot define a local variable named the same as a static variable.
  d. This code does not compile because the local variable is used before it is initialized.



<해답>


1. a, c
  -. b --> B extends A 는 간접적으로 A Class의 디폴트 생성자를 invoke 시키지만 Class A에서는 디폴트 생성자가 정의 되지 않았다.    
  -. d, e -->  내부 클래스는 외부 클래스와 같은 이름을 사용할 수 없기 때문에 정답이 될 수 없다.　

2. b
  -. 여러 스레드가 대기중인 경우, notify() 메소드에 의해 어떤 스레드가 깨어나는지 지정할 수 없다. 
  -. e --> 일반적으로 while loop에서 wait()를 invoke 시키지만 while loop에서 notify() or wait()를 invoke 시킬 필요성은 없다.

3. a and c.
  -. b는 확실히 아니고 a와 c는 Runnable Interface 를 구현한 anonymous 내부 클래스이다.　

4. d
  -. | 연산자(OR)는 두 피연산자의 비트중 하나가 1이라면 결과는 1이고 두 개 모두 0이라면 0이 된다. 그래서 4 와 7을 binary로 표현하면
        100 
      | 111
        ----
        111      or    7

5. c
  -. b에서 내부 클래스는 main()에서 필요한데 main() 메소드가 static 이므로 외부 클래스의 instance를 만들고 이를 이용해 내부 클래스의 오브젝트를 만들어야 하는데 외부클래스 (Counter)에 대한 오프젝트가 없다. 이 경우 단지 top-level class 만 이 이 경우에 부합하다.　

6. a, b, and c.
  -. 클래스 안에 내부 클래스를 정의하면 내부 클래스 안에서는 내부 클래스에서 정의된 멤버변수, 메소드 뿐만아니라 외부 클래스에 정의된 멤버 변수와 메소드도 같은 방법으로 참조할 수 있다. 그러나 d와 같이 내부 클래스는 외부 클래스이 하위(상속관계에 있는) 클래스의 변수를 직접 참조 할 수 없다. 만약 참조하려면 그 클래스에 대한 reference를 이용해 참조할 수 있다.

7. a, b, and e.
  -. InputStreamReader 오브젝트 생성시 사용할 문자 코드를 지정할 수 있으며, 지정하지 않을 경우에는 플랫폼의 기본 문자 코드가 이용됩니다. 하지만 c, d 처럼InputStreamReader 의 생성자에는 파일명을 직접 인수로 지정할 수 없습니다. 결과적으로 compile되지 않는다.

8. b and d.
  -. 다른 답들은 부분적으로 맞거나 compile되지 않는다.

9. a
  -. TextField 생성자에 넘기는 숫자는 글자 수 기준으로 TextField의 폭을 지정하지만, 각 글자의 폭이 다르기 때문에 해당 폰트의 평균 글자 폭을 기준으로 합니다.

10. c and e
  -. a는 abstract 클래스가 되지 않기 위해 method1과 method2를 모두 오버라이드해야 하는데 그게 빠졌고 b는 확실히 완벽한 클래스이지만 Instance를 구현하고 있지 않다. 즉, 클래스 프로토타입에 implements A라는 표현이 있어야 한다. d는 문제와 무관하게 상속을 다루고 있다.

11. System.out.println(evt.getX());
  -. 이벤트 처리 메소드에 전달되는 파라미터는 Event 계열 오브젝트인데, 이벤트와 관련된 여러 데이터가 들어 있습니다.　

12. mybutton = (Button)evt.getComponent();
  -. getComponent 메소드는 Event 클래스의 하위 클래스인 ComponentEvent 클래스에 정의 되어 있으며, 이벤트가 발생된 Component를 리턴 합니다.

13. ActionListener
  -. ActionListener는 사용자가 Button을 누르거나, Textfield에서 <Enter>키를 치는 등 입력이 확정되었을 때 발생하며, 이 이벤트를 처리하려면 ActionListener를 구현해야 합니다.

14. a, c, d, and e.
  -. TextArea에 대해서 보통 구현하는 Listener는 입력내용이 변경되었을 때에 처리하는 TextListener이지만, MouseListener, Mouse Motion Listener, ConponentListener 등도 구현할 수 있습니다. 
참고로 ActionListener는 TextField에는 add 할 수 있습니다.

15. a, c, and d. 
  -. catch 절 안에 return 문장이 있더라도, finally 절을 먼저 수행한 후("4") return 됩니다. 하지만, 메소드의 나머지 부분("5")은 더 이상 수행되지 않습니다.

16. MouseEvent
  -. MouseListener 및 MouseMotionListener에서 구현하는 메소드의 파라미터는 모두 MouseEvent형입니다.

17. b and e
  -. 이 switch문은 valid하다. 왜냐하면 default문의 위치를 첫 문장에 놓아도 아무런 문제가 없으며 default문에 'break;' 문이 없으므로 'a' or 'b' case에 match되지 않아도 'a" case는 항상 수행된다.

18. throws

19. c
  -. 이 배열은 요소가 10개인 배열로, 요소 하나 하나가 또다른 배열인 형태입니다.

20. d
  -. 비록 myArg라는 static 변수가 있더라도, 지역변수인 myArg는 번저 초기화 되어야 한다. 즉 멤버 변수는 자동초기화되지만 지역(자동)변수는 자동초기화 되지 않는다.

 

