6-11 다음 중 this에 대한 설명으로 맞지 않은 것은? (모두 고르시오) b
a. 객체 자신을 가리키는 참조 변수이다.
b. 클래스 내에서라면 어디서든 사용할 수 있다.
c. 지역변수와 인스턴스 변수를 구별할 때 사용한다.
d. 클래스 메서드 내에서는 사용할 수 없다.
b. 인스턴스 메서드에서만 사용 가능하다.
6-12 다음 중 오버 로딩이 성립하기 위한 조건이 아닌 것은? (모두 고르시오) c, d
a. 매머드의 이름이 같아야 한다.
b. 매개변수의 개수나 타입이 달라야 한다.
c. 리턴 타입이 달라야 한다.
d. 매개변수의 이름이 달라야 한다
c. 리턴타입이 달라야 한다.
리턴 타입은 오버 로딩에 영향을 주지 못한다.
매개변수는 같고 리턴 타입이 다른 경우는 오버 로딩이 성립되지 않는다. 어떤 것을 호출해야 할지 모르기 때문이다.
d 매개변수의 이름이 달라야 한다
리턴 타입은 오버 로딩에 영향을 주지 못한다.
6-13 다음 중 아래의 add메서드를 올바르게 오버 로딩한 것은? (모두 고르시오) b, c, d
long add(int a, int b) { return a+b;}
a. long add(int x, int y) { return x+y;}
b. long add(long a, long b) { return a+b;}
c. int add(byte a, byte b) { return a+b;}
d. int add(long a, int b) { return (int)(a+b);}
b, c, d는 모두 메서드의 이름이 add로 같고 매개변수의 타입이 다르다.
6-14 다음 중 초기화에 대한 설명으로 옳지 않은 것은? ( 모두 고르시오 ) c, e
a. 멤버 변수는 자동 초기화되므로 초기화하지 않고도 값을 참조할 수 있다.
b. 지역변수는 사용하기 전에 반드시 초기화해야 한다.
c. 초기화 블록보다 생성자가 먼저 수행된다.
d. 명시적 초기화를 제일 우선적으로 고려해야 한다.
e. 클래스 변수보다 인스턴스 변수가 먼저 초기화된다
c. 초기화 블록이 먼저 수행된다.
e. 클래스 변수가 먼저 초기화된다.
6-15 다음 중 인스턴스 변수의 초기화 순서가 올바른 것은? a
a. 기본값-명시적 초기화-초기화 블록-생성자
b. 기본값-명시적 초기화-생성자-초기화 블록
c. 기본값-초기화 블록-명시적 초기화-생성자
d. 기본값-초기화 블록-생성자-명시적 초기화
명시적 초기화가 가장 먼저 일어나고 생성자가 늦게 초기화된다.
6-16 다음 중 지역변수에 대한 설명으로 옳지 않은 것은? (모두 고르시오) a, e
a. 자동 초기화되므로 별도의 초기화가 필요 없다.
b. 지역변수가 선언된 메서드가 종료되면 지역변수도 함께 소멸된다.
c. 매머드의 매개변수로 선언된 변수도 지역변수이다.
d. 클래스 변수나 인스턴스 변수보다 메모리 부담이 적다.
e. 힙(heap) 영역에 생성되며 가비지 컬렉터에 의해 소멸된다.
a. 지역변수는 자동 초기화가 되지 않는다.
e 지역변수는 call stack에 생성된다.
6-17 호출 스택이 다음과 같은 상황일 때 옳지 않은 설명은? (모두 고르시오) b
a. main 제일 먼저 호출 스택에 저장된 것은 메서드이다.
b. println 메서드를 제외한 나머지 메서드들은 모두 종료된 상태이다.
c. method2 메서드를 호출한 것은 main 메서드이다.
d. println 메서드가 종료되면 메서드가 method1 수행을 재개한다.
e. main-method2-method1-println. 의 순서로 호출되었다
f. 현재 실행 중인 메서드는 println 뿐이다.
b 다른 메서드들은 대기 중인 상태이다.
6-18 다음의 코드를 컴파일하면 에러가 발생한다 컴파일 에러가 발생하는 라인과 그 이유를 설명하시오.
class MemberCall {
int iv = 10;
static int cv = 20;
int iv2 = cv;
static int cv2 = iv; // A 라인
static void staticMethod1() {
System.out.println(cv);
System.out.println(iv); // B 라인
}
void instanceMethod1() {
System.out.println(cv);
System.out.println(iv); // C 라인
}
static void staticMethod2() {
staticMethod1();
instanceMethod1(); // D 라인
}
void instanceMethod2() {
staticMethod1(); // E 라인
instanceMethod1();
}
}
A라인 static변수의 초기화에 인스턴스를 사용할 수 없다.
B라인 static메서드에서는 인스턴스변수를 사용할 수 없다.
D라인 static메서드에서는 인스턴스메서드를 사용할 수 없다.
6-19 다음 코드의 실행 결과를 예측하여 적으시오.
public class Exercise6_19 {
public static void change(String str) {
str += "456";
}
public static void main(String[] args) {
String str = "ABC123";
System.out.println(str);
change(str);
System.out.println("After change:" + str);
}
}
ABC123
After change:ABC123
6-20 다음과 같이 정의된 메서드를 작성하고 테스트하시오.
class Exercise6_20 {
/*
(1) shuffle . 메서드를 작성하시오
*/
}
public static void main(String[] args) {
int[] original = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
System.out.println(java.util.Arrays.toString(original));
int[] result = shuffle(original);
System.out.println(java.util.Arrays.toString(result));
}
}
public static int[] shuffle(int[] arr) {
if (arr == null || arr.length == 0) {
return arr;
}
for (int i = 0; i < arr.length - 1; i++) {
int j = (int) (Math.random() * arr.length);
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
return arr;
}
public static void main(String[] args) {
int[] original = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
System.out.println(java.util.Arrays.toString(original));
int[] result = shuffle(original);
System.out.println(java.util.Arrays.toString(result));
}
}
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[4, 5, 2, 9, 6, 3, 7, 8, 1]
일단 메모리를 공유해야하기 때문에 static으로 int형 shuffle 매서드를 만들고 배열의 자리를 바꾸는 코드를 짜주고 배열을 리턴하면 된다.
'JAVA06강 객체지향 프로그래밍1 > 객체지향 프로그래밍1 자바200제' 카테고리의 다른 글
객체지향 프로그래밍 21~24 (0) | 2021.07.21 |
---|---|
객체지향프로그래밍1 자바200제 1~10문 (0) | 2021.07.20 |