class OurBadException extends Exception {
public OurBadException() {
super("위험한 행동을 하면 예외처리를 꼭 해야합니다!");
}
}
throw
throws
class OurClass {
private final Boolean just = true;
// 신규 문법 throws!
public void thisMethodIsDangerous() throws OurBadException {
if (just) {
// 신규 문법 throw!
throw new OurBadException();
}
}
}
public class StudyException {
public static void main(String[] args) {
OurClass ourClass = new OurClass();
try {
// 1. 위험한 메소드의 실행을 일단 시도!!
ourClass.thisMethodIsDangerous();
} catch (OurBadException e) {
// 2. 예외가 발생하면, "잡아서" handling
// 예외가 발생하는경우 "handling" 하는 코드가 들어가는 블럭입니다.
// 즉 try 블럭 내의 구문을 실행하다가 예외가 발생하면
// 예외가 발생한 줄에서 바로 코드 실행을 멈추고 (잡아!!)
// 여기 있는 catch 블럭 내의 코드가 실행됩니다.
System.out.println(e.getMessage());
} finally {
// 3. 예외의 발생 여부와 상관없이, 실행시켜야 하는 코드가 들어갑니다.
// 무조건 여기는 거친다!!
System.out.println("우리는 방금 예외를 handling 했습니다!");
}
}
}
public class Generic {
public String plusReturnFunction(int a, int b) { ... }
public String plusReturnFunction(int a, long b) { ... }
public String plusReturnFunction(int a, String b) { ... }
}
-> 이처럼 똑같은 로직 수행하는 함수를 세 차례나 구현 (타입 지정 위해)
public class Generic {
public Object plusReturnFunction(Object a,Object b) { ... }
}
-> Object 사용해 타입 상관없이 두 매개변수 전달은 가능하나, 타입 안정성이 침해된다.
// 1. 자주 사용되는 변수명: T, U, V, E
public class Generic<T> {
// 2. t의 타입이 들어가야 할 자리에 선언한 타입 변수 T 들어감
private T t;
// 3. 메서드 리턴 타입에도 마찬가지
public T get() {
return this.t;
}
public void set(T t) {
this.t = t;
}
public static void main(String[] args) {
// 4. 클래스에 선언했기에 인스턴스 만들기 위해 타입 변수에 실제 변수 값 넣음
Generic<String> stringGeneric = new Generic<>();
// 5. 타입 변수로 대체해둔 곳에 String 들어가 있음
stringGeneric.set("Hello World");
String tValueTurnOutWithString = stringGeneric.get();
System.out.println(tValueTurnOutWithString);
}
}
public class Generic<T, U, E> {
public E multiTypeMethod(T t, U u) { ... }
}
Generic<Long, Integer, String> instance = new Generic();
instance.multiTypeMethod(longVal, intVal);
public class ParkingLot<T extends Car> { ... }
ParkingLot<BMW> bmwParkingLot = new ParkingLot();
ParkingLot<Iphone> iphoneParkingLot = new ParkingLog(); // error!
3주차 보다는 들을 만 했지만 이해한 개념을 응용하려니까 잘 안된다. 자바 왜 이렇게 어렵니