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 |