enum Seasons { SPRING, SUMMER, FALL, WINTER }
public class Main {
public static void main(String[] args) {
Seasons seasons = Seasons.FALL;
switch (seasons) {
case ~~
case FALL :
~~
break;
}
}
}
위와 같이 enum의 경우에는 switch 문에도 적용이 가능하다.
-> switch문 : 사용자 정의 타입에는 쓸 수 없다.
class Basket<T> { //T는 그냥 변수로 생각 (Type)
private T item;
public Basket(T item){
this.item = item;
}
public T getItem() {
return item;
}
public void setItem(T item) {
this.item = item;
}
}
Basket<String> basket1 = new Basket<String>();
Basket<Integer> basket2= new Basket<>(); // 오른쪽의 Integer는 생략 가능(유추 가능)
Basket<K,V> 또한 가능하다. (Key, Value)
class Basket<T extends Plant> {
...
}
Plant 상속받은 클래스만 타입으로 지정 가능
class ~<T> {
...
public <T> void add (T element) {
...
}
}
~<T> a = new ~<>();
a.<Integer>add(10); // 두번째 T가 Integer로 지정됨
a.add(10); // 타입 생략 가능
try {
// 실행할 코드 삽입 (예외 발생할 수도 있음)
}
catch (Exception1 e1) {
// Exception1 발생하면 실행할 코드
}
catch (Exception2 e2) {
// Exception2 발생하면 실행할 코드
}
finally {
// 예외 발생 여부와 관계 없이 항상 실행 (Optional)
}
public static void main(String[] args) {
try {
throwException();
} catch (ClassNotFoundException e) {
...
}
}
static void throwException() thorws ClassNotFoundException {
...
}
위와 같이 throws 키워드를 사용해 메서드를 호출한 곳으로 예외를 떠넘길 수도 있다.
public static void main(String[] args) {
try {
Exception intendedException = new Exception();
throw intendedException;
} catch (Exception e) {
System.out.println("고의로 예외 발생시키기 성공!");
}
}
위와 같이 throw 키워드를 사용해 의도적으로 예외를 발생시킨다. 이는 개발자의 실수 등으로 예기치 않게 발생할 수 있는 에러에 대응할 수 있는 코드를 사전 작성해 오작동과 비정상적인 종료를 방지한다.
ArrayList
-> 객체가 인덱스로 관리된다
-> 객체들이 추가되면 저장용량 자동으로 늘어난다
-> 데이터가 연속적으로 존재 (객체의 삭제와 삽입이 일어날 때 하나하나 다 뒤로 미뤄야한다)
LinkedList
-> 데이터가 불연속적으로 존재 (서로 연결되어있다)
-> 주소값만 바꿔주면 되기 때문에 삭제 혹은 삽입이 일어날 때 더 빠르다