본문 바로가기

Certification/OCAJP

OCAJP 준비 (Q166 - Q176)

1.

각 행의 배열은 독립적으로 초기화 가능

chs[0] = new String[3]; // 첫 번째 행의 크기를 3으로 변경
chs[1] = new String[5]; // 두 번째 행의 크기를 5로 변경
chs[2] = new String[1]; // 세 번째 행의 크기를 1로 변경
chs[3] = null;          // 네 번째 행은 null 상태 유지
chs[4] = new String[10]; // 다섯 번째 행의 크기를 10으로 변경

각 행의 배열은 초기 선언된 크기와 달리 재정의할 수 있음

이는 Java에서 2차원 배열이 고정된 "행렬"이 아니라, 배열의 배열로 구현

 

2.

public class Test {
    public static void main(String[] args) {
        String[][] arr = {{"A", "B", "C"}, {"D", "E"}};
        
        for (int i = 0; i < arr.length; i++) { // 바깥 루프
            for (int j = 0; j < arr[i].length; j++) { // 내부 루프
                System.out.print(arr[i][j] + " "); // 현재 요소 출력
                
                if (arr[i][j].equals("B")) {
                    continue; // 내부 루프의 다음 반복으로 넘어감
                }
            }
            continue; // 바깥 루프의 다음 반복으로 넘어감
        }
    }
}

 

continue 쓰임 생각해보기

 

3.

LocalDateTime dt = LocalDateTime.of(2014, 7, 31, 1, 1);
dt.plusDays(30); // dt는 여전히 변경되지 않음
dt.plusMonths(1); // dt는 여전히 변경되지 않음
System.out.println(dt.format(DateTimeFormatter.ISO_DATE_TIME));

 

dt.plusDays(30)는 새로운 LocalDateTime 객체를 반환

이 새로운 객체는 2014년 7월 31일에서 30일이 추가된 값(2014년 8월 30일)을 가집니다.

 

>>반환값은 어디에도 저장되지 않았으므로 무시

 

4.

생성자 오버로딩 시 기본 생성자도 명시적으로 작성하기

  • 기본 생성자(매개변수가 없는 생성자)를 명시적으로 작성하지 않으면, 컴파일러가 자동으로 기본 생성자를 추가
  • 하지만 다른 매개변수를 가진 생성자가 하나라도 선언되면, 기본 생성자는 자동으로 추가되지 XX
  • 따라서, 여러 생성자를 오버로딩할 때 기본 생성자가 필요한 경우, 반드시 명시적으로 작성

2. 기본 생성자가 없는 경우 발생할 수 있는 문제

  >> 기본 생성자를 호출하려고 하면 컴파일 오류가 발생

 

5.

public class Test {

    public static void doSum(Integer x, Integer y) {
    System.out.println("Integer sum is " + (x + y));
    }
    
    >>>>>> int형이 아니라 Integer로 선언되어 있음에 주목!!

    public static void doSum(double x, double y) {
    System.out.println("double sum is " + (x + y));
    }

    public static void doSum(float x, float y) {
    System.out.println("float sum is " + (x + y));
    }

    public static void main (String[] args) {
    doSum(10, 20);
    doSum(10.0, 20.0);
}

 

 

 

doSum(Integer, Integer)가 호출되지 않았는가?

  • 자바에서 int는 기본 자료형이고, Integer는 참조형
  • int가 오토박싱되어 Integer가 되는 것보다, float로의 암시적 변환이 더 높은 우선순위를 가진다.
    • 즉, doSum(float, float)가 호출

Double이 아니라 float로 변환된 이유는 이게 더 변환 비용이 적기 때문

 

 

6.

int ans; // 초기화되지 않음
try {
    int num = 10;
    int div = 0;
    ans = num / div; // 여기서 ArithmeticException 발생
} catch (ArithmeticException ae) { 
    ans = 0; // 초기화
} catch (Exception e) { 
    System.out.println("Invalid calculation");
}
System.out.println("Answer = " + ans);

 

  • ans는 지역 변수라서 초기화되지 않으면 컴파일 오류가 발생.
  • try와 catch 블록에서 초기화될 가능성이 있지만, 컴파일러는 모든 경로에서 초기화가 보장되는지 확인해야 함.
  • 초기화되지 않는 경로가 있을 가능성이 있다고 판단하면 컴파일 오류가 발생.

 

'Certification > OCAJP' 카테고리의 다른 글

OCAJP 준비 (Q201 - Q218)  (2) 2024.11.27
OCAJP 준비 (Q177 - Q200)  (0) 2024.11.26
OCAJP 준비 (Q146 - Q165)  (0) 2024.11.21
OCAJP 준비 (Q126 - Q145)  (1) 2024.11.18
OCAJP 준비 (Q106 - Q125)  (8) 2024.11.13