
SCJP 기출문제 및 해답(4)




     



1. Which of the following lines will compile without warning or error.
  a. float f = 1.3;
  b. char c = "a";
  c. byte b = 257;
  d. boolean b = null;
  e. int i = 10;

2. What will happen if you try to compile and run the following code
     public class MyClass {
          public static void main(String arguments[]){
               amethod(arguments);
          }
          public void amethod(String[] arguments){
               System.out.println(arguments);
               System.out.println(arguments[1]);
          }
     }
  a. error Can't make static reference to void amethod.
  b. error method main not correct
  c. error array must include parameter
  d. amethod must be declared with String

3. Which of the following will compile without error
  a. import java.awt.*;
     package Mypackage;
     class Myclass {}
  b. package MyPackage;
     import java.awt.*;
     class MyClass{}
  c. /*This is a comment */
     package MyPackage;
     import java.awt.*;
     class MyClass{}

4. A byte can be of what size
  a. -128 to 127
  b. (-2 power 8 )-1 to 2 power 8
  c. -255 to 256
  d. depends on the Java Virtual machine

5. What will be printed out if this code is run with the following command line java myprog good morning
     public class myprog{
          public static void main(String argv[]){
               System.out.println(argv[2])
          }
     }
  a. myprog
  b. good
  c. morning
  d. Exception raised: "java.lang.ArrayIndexOutOfBoundsException: 2"

6. Which of the following are java reserved words
  a. if
  b. then 
  c. goto
  d. while
  e. case

7. Which of the following are legal identifiers
  a. 2variable
  b. variable2
  c. _whatavariable
  d. _3_
  e. $anothervar
  f. #myvar

8. What will happen when you compile the following code
     public class MyClass{
          static int i; 
          public static void main(String argv[]){
               System.out.println(i);
          }
     } 
  a. Error Variable i may not have been initialized
  b. null
  c. 1
  d. 0

9. What will happen if you try to compile and run the following code
     public class Q {
          public static void main(String argv[]){
               int anar[]= new int[]{1,2,3};
               System.out.println(anar[1]);
          }
     } 
  a. 1
  b. Error anar is referenced before it is initialized
  c. 2
  d. Error size of array must be defined　

10. What will happen if you try to compile and run the following code
     public class Q {
          public static void main(String argv[]){
               int anar[]= new int[5];
               System.out.println(anar[0]);
          }
     } 
  a. Error: anar is referenced before it is initialized
  b. null
  c. 0
  d. 5

11. What will be the result of attempting to compile and run the following code
     abstract class MineBase {
          abstract void amethod(); 
          static int i;
     }
　
     public class Mine extends MineBase{
          public static void main(String argv[]){
               int[] ar = new int[5];
               for(i = 0;i < ar.length;i++)
                    System.out.println(ar[i]);
          }
     }
  a. a sequence of 5 0's will be printed
  b. Error: ar is used before it is initialized
  c. Error Mine must be declared abstract 
  d. IndexOutOfBoundes Error i

12. What will be printed out if you attempt to compile and run the following code
     int i = 1;
     switch (i) {
          case 0:
               System.out.println("zero");
               break;
          case 1:
               System.out.println("one");
          case 2:
               System.out.println("two");
          default:
               System.out.println("default");
     }
  a. one
  b. one, default
  c. one, two, default
  d. default

13. What will be printed out if you attempt to compile and run the following code
     int i = 9;
     switch (i) {
          default:
               System.out.println("default");
          case 0:
               System.out.println("zero");
               break;
          case 1:
               System.out.println("one");
          case 2:
               System.out.println("two");
    }
  a. default
  b. default, zero
  c. error default clause not defined
  d. no output displayed　

14. Which of the following lines of code will compile without error
  a. int i=0;
     if(i){
        System.out.println("Hello");
     }
  b. boolean b = true;
     boolean b2 = true;
     if(b==b2){
        System.out.println("So true");
     }
  c. int i=1;
     int j = 2;
     if(i ==1|| j==2)
        System.out.println("OK");
  d. int i=1;
     int j = 2;
     if(i ==1 &| j==2)
        System.out.println("OK");　

15. What will be output if you try to compile and run the following code and and there is no file called Hello.txt in the current     directory.
     import java.io.*;
     public class Mine{
          public static void main(String argv[]){
               Mine m = new Mine();
               System.out.println(m.amethod());
          }
          public int amethod(){
               try {
                    FileInputStream dis = new FileInputStream("Hello.txt");
               }catch (FileNotFoundException fne) {
                    System.out.println("No such file found");
                    return -1;
               }catch(IOException ioe) {
               } finally{
                    System.out.println("Doing finally");
               }
               return 0;
          }
     }
  a. No such file found
  b. No such file found ,-1
  c. No such file found, doing finally, -1
  d. 0

16. What tags are mandatory when creating HTML to display an applet
  a. name, height, width
  b. code, name
  c. codebase, height, width
  d. code, height, width　

17. What will happen if you attempt to compile and run the following code
     class Base {}
     class Sub extends Base {}
     class Sub2 extends Base {}
     public class CEx{
          public static void main(String argv[]){
               Base b = new Base();
               Sub s = (Sub) b;
          }
     }
  a. Compile and run without error
  b. Compile time Exception 
  c. Runtime Exception 

18. If the following HTML code is used to display the applet in the code MgAp what will be displayed at the console.
     <applet code = MgAp.class height=400 width=400 parameter HowOld=30> 
     </applet>　
     iport java.applet.*;
     import java.awt.*;
     public class MgAp extends Applet{
          public void init(){
               System.out.println(getParameter("age"));
          }
     }
  a. Error no such parameter
  b. 0
  c. null
  d. 30

19. You are browsing the Java HTML documentation for information on the java.awt.TextField component. You want to create    Listener code to respond to focus events. The only Listener method listed is addActionListener. How do you go about finding    out about Listener methods.
  a. Define your own Listener interface according to the event to be tracked
  b. Use the search facility in the HTML documentation for the listener needed
  c. Move up the hierarchy in the HTML documentation to locate methods in base classes
  d. Subclass awt.event with the appropriate Listener method

20. What will be displayed when you attempt to compile and run the following code
     //Code start
     import java.awt.*;
     public class Butt extends Frame{
          public static void main(String argv[]){
               Butt MyBut= new Butt(); 
          }
          Butt(){
               Button HelloBut = new Button("Hello");
               Button ByeBut = new Button("Bye");
               add(HelloBut);
               add(ByeBut);
               setSize(300,300);
               setVisible(true);
          }
     }
     //Code end
  a. Two buttons side by side occupying all of the frame, Hello on the left and Bye on the right
  b. One button occupying the entire frame saying Hello
  c. One button occupying the entire frame saying Bye
  d. Two buttons at the top of the frame one saying Hello the other saying Bye



<해답>


1. e 
  -. 변수의 초기화에 대한 문제입니다. 
  a. float f = 1.3; 소수점은 있는데 아무런 글자가 붙어 있지 않은 경우이므로 defaut로 double로 간주됩니다. 따라서 double형의 숫자를 float형 변수에 대입하려고 하는데 이것은 유효범위가 큰 숫자를 유효범위가 작은 변수에 할당하는 행위(demotion)이므로 허용되지 않습니다. 
  b. char c = "a"; char형 변수에 할당할 수 있는 문자 상수는 작은따옴표('')로 묶어서 표시해야 합니다. 참고로 큰따옴표("")는 String 클래스에 문자열을 할당하는 데 사용합니다. 
  c. byte b = 257; byte형의 유효범위는 -2^7 ~ 2^7-1(-128~127)이므로 유효범위를 넘어선 값을 할당할 수 없습니다. 
  d. boolean형의 변수 b에 null을 할당하려고 하는데 boolean형 변수에는 true 또는 false만 할당할 수 있습니다. 

2. a 
  -. static으로 정의된 main()메소드는 클래스 로딩시 생성되므로 main() 내부의 다른 메소드를 참조하려면 instance를 생성해야 합니다. 다음과 같이 바꾸면 되겠죠.. 
    MyClass m = new MyClass(); 
    m.amethod(); 
  -. b는 main()메소드의 형태에 혼동을 주려고 한 답입니다.. 보통 String args[] 라는 인수를 사용하는데  args 대신에 다른 string도 허용됩니다. 그리고 []의 위치는 string 다음이나 args 다음에 붙여도 관계없습니다. 
  -. c, d는 터무니 없는 문장입니다. 

3. b, c 
  a. 컴파일되지 않는다. 왜냐면 package 선언은 맨먼저 나와야 하기 때문이다. 
  b. package, import 문 , class 정의의 순서에 부합하다. 
  c. /* */을 이용해 주석문을 추가했을뿐 아무런 문제가 없다. 

4. a 
  -. byte형의 유효범위는 -2^7 ~ 2^7-1(-128~127)이다. 

5. d 
  -. 일반적인 자바 command line은 java class 명, 명령형 인수, 명령형 인수,.... 이다. C/C++과는 달리 java는 parameter count는 프로그램이름(class 명)을 포함하지 않는다. 따라서 argv[0]==good, argv[1]== morning이 된다. argv[2]는 존재하지 않으므로 배열의 범위를 벗어나는 데이터를 접근했으므로 Exception ArrayIndexOutOfBoundsException 을 발생시킨다. 

6. a, c, d, e 
  <키워드 분류> 
  -. 소스 파일 구성 : import package
  -. 클래스/인터페이스 선언,인스턴스 생성 : class interface new
  -. 기본 데이터형 : boolean byte char double float int long short void
  -. 데이터 값 : false null true
  -. 클래스 상속 : extends implements
  -. 생성자 : super this
  -. 연산자 : instanceof
  -. 접근 제한자 : private protected public
  -. 기타 제한자 : abstract final native static synchronized
  -. 제어문 : break case continue default do else for if return switch while
  -. 예외 처리 : catch finally throw throws try
  -. 기타 : transient volatile

7. b, c, d, e 
  <식별자 규칙> 
  -. 사용할 수 있는 문자 : 알파벳 대.소문자, 숫자, _(밑줄 문자), $(달러문자) 단, 식별자의 첫 문자가 숫자이면 안됩니다. 
  -. 같은 알파벳이라도 대문자, 소문자는 다른 문자로 취급합니다. 
  -. 키워드와 같으면 안되지만 길이의 제한은 없습니다. 
  -. a는 숫자로 시작해서 틀렸고 f는 #으로 시작해서 올바르지 않습니다. 

8. d 
  -. Class level 변수는 항상 default values로 초기화 된다. 이경우에 int 1는 0으로 초기화된다. 이와는달리 Method level 변수는 default values로 초기화 되지 않는데 만약 초기화 되기전에 변수를 사용한다면 error가 발생한다. 　 

9. c 
  -. 이문제는 배열을 선언하면서 초기화하고 있습니다. 이것은 문제가 되지 않으며 배열의 size를 나타내기 위해 []안에 숫자를 기입한다면 error발생 합니다. 따라서 anar[1]==2 입니다. 

10. c 
  -. 배열은 생성될 때 항상 초기화 된다. int 배열은 0으로 초기화 된다. double 배열은 0.0 이겠죠.. 

11. c 
  -. 클래스 앞에 붙이는 abstract 제한자의 의미는 해당 클래스에 대한 오브젝트를 생성할 수 없다는 뜻으로, abstract 메소드가 하나라도 포함되어 있거나, 상위클래스에서 상속받은 메소드 중에서 abstract 메소드가 하나라도 포함되어 있다면 그 클래스는 abstract 클래스가 되어야 합니다. 
  -. 참고로 abstract 제한자는 메소드 및 클래스 선언문에 붙는데 메소드의 프로토타입만 정의하고 메소드에서 수행할 내용을 정의하지 않을 때 abstract 제한자를 붙이며, abstract 메소드를 사용하려면 하위 클래스에서 오버라이드해서 내용을 정의해야 합니다. 

12. c 
  -. switch 문에서 case 1 에 해당되는데 case1문과 case 2문에 break;문이 없으므로 마지막 default 문까지 수행합니다. 참고로 break;문이   나올 때 까지 계속 수행됩니다. 

13. b 
  -. switch 문에서 default 문은 일반적으로 맨 마지막에 나오지만 앞에 써도 상관없습니다. case label 과 일치하는 것이 없으므로 defaut 문을 수행하는데 break; 문을 만날때까지 수행됩니다. 

14. b, c 
  a. if()문은 boolean(true/false) 값을 test 하므로 compile 되지 않습니다. 
  b. if()문안에 &| 이상... 

15. c 
  -. 'Hello.txt' 파일이 없으므로 try 절에서 FileNotFoundException 이 catch됩니다. 그리고 finally 절에 있는 내용은 예외 발생 여부와 관계없이 항상 수행되며, 심지어 return문이 있더라도 finally 절의 내용은 수행된 다음에 return됩니다.
(단, System.exit() 문장이 있는 경우에는 finally 절을 수행하지 않고 종료됩니다.) 
또한 -1이 return되어 No such file found, doing finally, -1 이 output이 됩니다. 

16. d  
  -. <applet code = ***.class height=400 width=400 [parameter ***=**,...]></applet> 로 code, height, width만이 필수 tag      입니다. 

17. c 
  -. 상위 클래스형 오브젝트를 하위 클래스형 핸들에 대입할 때 형 변환 연산을 하면 컴파일시에는 문제가 없으나, 실행시 Exception 이 발생합니다. 만약 sub 으로 형 변환을 하지 않았다면 컴파일시 에러가 발생합니다. 

18. c 
  -. applet에서 정의 되지 않아 이용할수 없는 parameter를 applet에서 access를 시도하면 null을 return합니다. 

19. c 
  -. 어떤 클래스에 적용할 수 있는 메소드는 상위클래스에서 상속받은 메소드도 있으므로 상위 클래스의 메소드도 확인하여야 합니다. 

20. c 
  -. BorderLayout은 Window 계열 Container에 기본적으로 적용되는 LayoutManager입니다. 당연히 Window 클래스의 하위클래스인 Frame  클래스도 특별히 LayoutManager를 변경하지 않는 한 BorderLayout이 적용됩니다. 문제에서 클래스 Butt는 Frame class의 하위 클래스이므로 borderLayout이 적용됩니다. 
  -. BorderLayout에서 directions(ie North, South, East or West)를 지정하지 않으면 center에 놓이게 되며 전체 공간을 차지하게 됩니다. 따라서 두 번째 button 인스턴스인 ByeBut의 "Bye" 버튼이 "Hello"버튼을 덮어쓰게 되고 전체 frame을 차지하게 됩니다. 

 
