메소드 또는 생성자에서 발생할 수 있는 예외를 호출자에게 전달하는 키워드
Checked Exception
컴파일러가 강제로 예외 처리를 요구하는 예외 유형
(IOException, SQLException, FileNotFoundException 등)
Unchecked Exception
컴파일러가 예외 처리를 강제화하지 않는 예외 유형
(Unchecked Exception은 NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException 등)
try {
int num = 6 / 0;
} catch (Exception e) {
e.printStackTrace();
} catch (InputMismatchException e) {
e.printStackTrace();
}
catch 블록은 상위 예외 클래스부터 처리해야 한다.
즉, Exception 클래스는 모든 예외의 상위 클래스이므로, catch (Exception e) 블록은 가장 마지막에 위치해야 한다.
public static void main(String[] args) throws Exception {
}
main 메서드가 Exception을 던질 수 있다는 것을 선언하는 것을 의미
이 경우, main 메서드 내에서 발생하는 예외들은 직접 처리하지 않고 상위 호출자로 예외를 전파한다.
이를 위해 try-catch 문을 사용하여 예외를 처리하거나, 예외를 처리하는 메서드를 별도로 정의하여 호출하는 방식을 사용할 수 있다.
1~100 사이에 숫자를 맞춰보세요 :
50
Down
1~100 사이에 숫자를 맞춰보세요 :
25
UP
1~100 사이에 숫자를 맞춰보세요 :
43
Down
1~100 사이에 숫자를 맞춰보세요 :
30
UP
1~100 사이에 숫자를 맞춰보세요 :
35
정답입니다.5회 만에 맞췄어요.
import java.util.Random;
import java.util.Scanner;
public class Java_03_updown {
public static void main(String[] args) {
Random random = new Random();
int secretNumber = random.nextInt(100) + 1;
int count = 0;
boolean found = false;
Scanner scanner = new Scanner(System.in);
System.out.println("1~100까지의 숫자를 맞춰보세요.");
while (!found) {
System.out.print("숫자를 입력하세요: ");
try {
int user = scanner.nextInt();
count++;
if (user == secretNumber) {
System.out.println("정답입니다! 축하합니다.");
found = true;
} else if (user < secretNumber) {
System.out.println("Up!");
} else {
System.out.println("Down!");
}
} catch (Exception e) {
System.out.println("잘못된 입력입니다. 숫자를 입력해주세요.");
scanner.next();
}
}
System.out.println(count + "회 만에 맞췄어요.");
scanner.close();
}
}
:자바는 int, long, boolean 같은 변수의 기본 자료형(Primitive Type)을 제공한다. 하지만 이런 기본자료형은 컬렉션(Collection)이나 지네릭(Generic)에서 제한적으로 사용가능하다. 따라서 자바는 각 기본 자료형에 대응되는 래퍼 클래스(Wrapper Class) 제공한다.
박싱(Boxing)
: 기본 자료형을 생성자(Constructor)에 넘겨주어 대응되는 래퍼 클래스를 생성하는 동작
언박싱(Unboxing)
: 래퍼 클래스에 담겨있는 값을 기본 자료형으로 바꾸는 작업이 언박싱
기본자료형과 래퍼 클래스간의 변환이 묵시적(Implicit)으로 일어나는 경우가 있다. 자바의 특정버전(JDK 1.5)부터는 자바 언어에서 래퍼 클래스와 기본 자료형 사이의 변환을 자동으로 해주는 동작이 추가되었다. 이를 오토 박싱(Auto Boxing)과 오토 언박싱(Auto Unboxing)이라한다.
public static void main(String[] args) {
// 정수에 대한 2진, 8진, 16진수 표현 결과를 반환하는 클래스 메소드
System.out.println("12의 2진 표현: " + Integer.toBinaryString(12));
System.out.println("12의 8진 표현: " + Integer.toOctalString(12));
System.out.println("12의 16진 표현: " + Integer.toHexString(12));
}