Improves the program structure because exceptions must be handled in the method in which they occurred
- 틀림:
- Java 예외는 발생한 메서드에서 반드시 처리해야 하는 것이 아님
- 예외는 **발생한 메서드에서 처리할 수도 있고, 호출한 메서드로 전파(throws)**가능
public void methodA() throws IOException { // methodA에서는 처리하지 않고 호출자에게 예외를 전파
throw new IOException("Error occurred");
}
public void methodB() {
try {
methodA(); // methodA에서 발생한 예외를 methodB에서 처리
} catch (IOException e) {
System.out.println("Handled in methodB");
}
}
checkAge(list, (Person p) -> { p.getAge() > 40; });
>>>>>>>>>>>>>>>
checkAge(list, (Person p) -> { return p.getAge() > 40; });
- 중괄호 블록 안에서 return 키워드가 없는 문제
- 람다 표현식의 본문이 중괄호로 감싸인 경우, 값을 반환하려면 명시적으로 return 키워드를 작성
public class Person {
String name;
int age;
public Person(String name, int age) { // 매개변수 이름이 필드 이름과 동일
this.name = name; // this를 사용하지 않으면 매개변수 name에 접근
this.age = age; // this를 사용하지 않으면 매개변수 age에 접근
}
}
위와 같이 매개변수와 실제 필드의 이름이 같을 경우에는 구별하기 위해서 this를 쓰지만
문제에서는 매개변수명이 n,a 이런 식으로 설정되어 있기 때문에 굳이 this 안써도 됨
public class MyException extends RuntimeException {}
public class Test {
public static void main(String[] args) {
try {
method1();
} catch (MyException ne) {
System.out.print("A");
}
}
public static void method1() { // line n1
try {
throw Math.random() > 0.5 ? new MyException() : new RuntimeException();
} catch (RuntimeException re) {
System.out.print("B");
}
}
}
catch (RuntimeException re)는 자신의 타입과 하위 타입의 예외를 모두 처리
** 예외 처리 우선순위:
- 예외는 처음 매칭된 catch 블록에서 처리
- method1()의 catch (RuntimeException re)는 MyException도 처리할 수 있으므로, 여기서 예외가 처리
- 예외가 한 번 catch 블록에서 처리되면, 해당 예외는 "소멸"
- 따라서 main 메서드의 catch (MyException) 블록은 실행되지 않음
객체에 값이 저장되는 원리:
- 객체는 클래스에 정의된 필드를 가지며, 이 필드는 객체마다 독립적으로 유지
public class MyField {
int x; // 객체의 상태를 저장하는 필드 x
int y; // 객체의 상태를 저장하는 필드 y
}
m2.x = 100;
m2.y = 200;
public void doStuff(int x, int y) {
this.x = x; // 필드 x에 매개변수 x의 값을 설정
this.y = y; // 필드 y에 매개변수 y의 값을 설정
}
체이닝 > 메서드 호출을 연속적으로 이어서 사용하는 것
>> append() 메서드는 호출된 StringBuilder 객체를 반환하므로, 바로 insert() 같은 메서드를 이어서 호출할 수 있음
>> 체이닝을 사용하지 않는 경우
StringBuilder sb = new StringBuilder("Hello");
// append() 호출 후, 다시 변수에 저장
sb.append(" World");
sb.insert(0, "Say: ");
sb.replace(4, 8, "Hi");
System.out.println(sb); // 출력: Say: Hi World
>> 체이닝을 사용하는 경우
StringBuilder sb = new StringBuilder("Hello");
// 체이닝으로 메서드 호출
sb.append(" World")
.insert(0, "Say: ")
.replace(4, 8, "Hi");
System.out.println(sb); // 출력: Say: Hi World
StringBuilder 주요 메서드
append(String s)
insert(int offset, String s)
replace(int start, int end, String s)
delete(int start, int end)
deleteCharAt(int index)
reverse()
substring(int start, int end)
charAt(int index)
setCharAt(int index, char ch)
length()
capacity()
trimToSize() : 현재 문자열의 길이에 맞게 용량을 줄임
toString() : StringBuilder 객체를 String으로 변환
'Certification > OCAJP' 카테고리의 다른 글
OCAJP 복습(4) (0) | 2024.12.10 |
---|---|
OCAJP 복습(3) (0) | 2024.12.09 |
OCAJP 복습(1) (1) | 2024.12.05 |
OCAJP 준비 (Q219 - Q236) (1) | 2024.11.28 |
OCAJP 준비 (Q201 - Q218) (2) | 2024.11.27 |