Object
|
Throwable
|
Error Exception
(개발자가 핸들링 불가) |
- RuntimeException
(런타임 계열, 컴파일 unchecked 계열)
- IOException, SQLException
(비런타임 계열, 컴파일 checked 계열
: 런타임시 (실행) 발생
: 컴파일시 발생
main {
try {
실행문1;
실행문2;
} catch (예외클래스 변수) { // 아무 예외클래스가 아닌 적합한 예외클래스 지정, 다형성 가능 (권장 X)
예외 발생시처리하는 문장;
} finally {
반드시 수행해야되는 문장
}
문장;
문장;
}
public void a() throws ArithmeticException {
}
@Override
public(확대) void a() (축소) {} // 가능
@Override
public(확대) void a() throws ArithmeticException (축소) {} // 가능
@Override
public(확대) void a() throws RuntimeException (축소) {} // 불가능
@Override
public(확대) void a() throws Exception (축소) {} // 불가능
@Override
public(확대) void a() throws IOException (축소) {} // 불가능
String name = null;
if(name!=null)
System.out.println(name.length()); // if 안 쓰면 NullPointerException 발생
if (n == 0) throw new MyException("예외메세지");
public class MyException extends Exception {
// 문자열을 하나 받는 생성자
public MyException(String msg) {
super(msg); // 부모 클래스에 msg 보내주기
}
}
다양한 타입을 다루는 메서드 및 클래스에서 컴파일 시점에 타입체크를 해서 예외를 미리 알 수 있도록 지원 가능
: 타입 파라미터라고 부른다
- <T> : reference type
- <E> : Element
- <K, V> : Key, Value
- <T, R> : Return Type
Collection<E> (인터페이스) Map<K,V> (인터페이스)
| (상속) |
Set<E> (인터페이스) List<E> (인터페이스) |
| | HashMap<K,V> (★)
| (구현) | (구현)
HashSet<E> (★) ArrayList<E> (★)
cf) 데이터 저장 방식에 따른 3가지 종류
1. set 계열
: 저장되는 데이터의 순서가 없음
: 중복 저장이 안 됨
2. list 계열
: 저장되는 데이터의 순서가 있음
: 중복 저장이 가능
3. map 계열
: 데이터뿐만 아니라 데이터의 이름(키)까지 같이 저장됨 (key/value 쌍)
: 저장 순서가 없다
: key를 이용해서 값을 찾는다
Comparator<Cat> comp = new Comparator<Cat>() {
@Override
public int compare(Cat c1, Cat c2) {
int result = c1.age - c2.age; // 오름차순 정렬
// int result = c2.age - c1.age; // 내림차순 정렬
return result;
}
};
Comparator<Cat> comp = (c1, c2) -> c1.age - c2.age; // 오름차순 정렬