💡 switch문은 변수의 기본형 8가지와 열거형 enum타입만 사용할 수 있어 상수를 사용자 타입으로 정의하기 보다 열거형으로 정의하는 것이 좋다.
enum 열거형이름 {
상수명1, // 정수값 0 할당
상수명2, // 정수값 1 할당
상수명3, // 정수값 2 할당
...
}
열거형이름.상수명
💡 클래스 변수인 static 변수를 참조할 때 클래스이름.변수명으로 했던 것과 같다.4
class Basket {
private String item;
Basket(String item) {
this.item = item;
}
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
}
Basket<String> basket1 = new Basket<String>("어쩌고");
Basket<Integer> basket1 = new Basket<Integer>(123); // 에러 발생!!
class Basket<T> {
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> basket1 = new Basket<Integer>(123);
💡 클래스 이름 옆에 T 를 추가하고, 클래스 내부에 변경할 변수들의 타입을 T로 바꿔 사용. -> 클래스 내의 T를 다 뫄뫄로 바꿔라.
T : 타입 매개변수라고 한다.
💡 기본 타입의 객체화! (풀네임! 앞글자만 대문자 사용!)
클래스명<변환할타입> 인스턴스명 = new 클래스명<변환할타입(생략가능)>();
class Basket {
...
public <T> void add(T element) {
...
}
}
반환타입 앞에서 타입 매개변수 선언을 한다.
제네릭 메서드의 타입 매개변수는 제네릭 클래스의 타입 매개변수는 별개의 것.
이름이 동일하더라도 다른 타입 매개변수로 간주된다.
💡 클래스 : 클래스에서 선언된 타입 매개변수는 클래스가 인스턴스화 될 때 타입이 지정
메서드 : 메서드가 호출될 때 타입이 지정
제네릭 메서드 호출
클래스A<String> a = new 클래스A<>(); // 인스턴스 생성
a.<Integer>add(10); // 메서드 호출
a.add(10); // 타입 지정 생략 가능
static <T> int price (T element) {}
💡 제네릭 메서드는 메서드 호출 시, 타입이 결정되므로 String 클래스와 같은 타입이 지정되어야 사용 가능한 메서드는 사용이 불가능하다.
❗ 클래스의 최상위 클래스인 Object 클래스의 메서드는 사용이 가능하다.
1. <? extends T> : 상한 제한, T와 T를 상속받는 하위클래스만 타입으로 지정
2. <? super T> : 하한 제한, T와 T의 상위클래스만 타입으로 지정
3. <?> = <? extends Object> : 모든 클래스를 타입으로 지정
java: ')' expected
public class RuntimeErrorTest {
public static void main(String[] args) {
System.out.println(4 * 4);
System.out.println(4 / 0); // 예외 발생
}
}
//출력값
16
Exception in thread "main" java.lang.ArithmeticException: / by zero
at RuntimeErrorTest.main(RuntimeErrorTest.java:5)
try {
// 예외가 발생할 가능성이 있는 코드를 삽입
}
catch (ExceptionType1 e1) {
// ExceptionType1 유형의 예외 발생 시 실행할 코드
}
catch (ExceptionType2 e2) {
// ExceptionType2 유형의 예외 발생 시 실행할 코드
}
finally {
// finally 블럭은 옵셔널
// 예외 발생 여부와 상관없이 항상 실행
}
반환타입 메서드명(매개변수, ...) throws 예외클래스1, 예외클래스2, ... {
...생략...
}
throw 예외클래스;