throws
는 메서드나 생성자 선언부에서 사용, 내부에서 발생할 수 있는 예외를 호출한 쪽으로 전달하는 역할
throws
→ 예외 전달(떠넘기기) (선언부에서 사용)throw
→ 예외 발생시키기 (메서드나 블록 내부에서 사용)
자세한 내용은 아래에 있습니다.
java.lang.Exception
클래스 상속java.lang.ClassNotFoundException
, java.lang.InterruptedException
등등java.lang.RuntimeException
을 상속1. NullPointerException
String data = null;
System.out.println(data.tostring());
객체 참조가 없는 상태
즉, null 값을 갖는 참조 변수로 객체 접근 연산자인 도트(.)를 사용할 때 발생
2. ArrayIndexOutOfBoundsException
int[] arr = new int[3]; // 인덱스 0~2 사용 가능
int value = arr[3];
인덱스를 0~2까지만 사용이 가능한데 3을 사용해서 발생
3. NumberFormatException
String data1 = "100";
String data2 = "a100";
int A = Integer.parseInt(data1);
int B = Integer.parseInt(data2);
A 변수는 해당 문자열을 숫자로 변환이 가능하지만
B 변수는 숫자로 변환이 불가능 하기 때문에 발생
4. ClassCastException
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}
Animal a = new Dog();
Cat c = (Cat) a; // ClassCastException 발생
Animal a = new Dog();
: a 변수의 타입은 Animal 이지만, 실제로 가리키는 객체는 Dog
Cat c = (Cat) a;
: a 가 참조하는 실제 객체는 Dog인데, Cat 타입으로 변환하기 때문에 발생
try-catch-finally
사용
정상 실행 되는 코드
try {
// 예외 발생 가능 코드
} catch(예외 클래스 e) {
// 예외 처리
} finally {
// 항상 실행
}
try
→finally
순으로 실행
try {
// 예외 발생 가능 코드
} catch(예외 클래스 e) {
// 예외 처리
} finally {
// 항상 실행
}
try
→catch
→finally
순으로 실행
finally
는 생략 가능, 예외 발생 여부 상관 없이 항상 실행try {
int[] arr = new int[3];
arr[5] = 10; // ArrayIndexOutOfBoundsException 발생
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("배열 인덱스 오류");
} catch (NullPointerException e) {
System.out.println("널 참조 오류");
} catch (Exception e) {
System.out.println("기타 예외");
}
Exception
클래스는 모든 예외 클래스의 상위 클래스ArrayIndexOutOfBoundsException
와 NullPointerException
은 Exception
클래스의 하위 클래스상위 클래스 타입인
Exception
을 제일 위에 적었을 경우 모든 예외를 처리하기 떄문에, 하위 예외 클래스가 실행이 안됨
다중 catch문을 작성할 때는 순서가 매우 중요
public class Test {
public static void main(String[] args) {
try {
accessArray();
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("배열 인덱스 범위 초과 예외 처리");
}
}
static void accessArray() throws ArrayIndexOutOfBoundsException {
int[] arr = new int[3];
System.out.println(arr[5]); // 인덱스 범위 초과 → 예외 발생
}
}
진짜 예외 처리 정처기 단골 문제임,, 매번 1문제씩 나옴,,
1. 객체 비교(equals())
equals()
메소드는 비교 연산자인 ==과 동일한 결과 리턴보통
(변수.equals(변수))
사용
2. 객체 해시코드(hashCode())
3. 객체 문자 정보(toString())
클래스이름@16진수해시코드
로 구성1. 프로그램 종료(exit())
2. 현재 시각 읽기(currentTimeMillis(), nanoTime())
1. Class 객체 얻기(getClass(), forName())
리턴타입 | 메소드 이름 | 설명 |
---|---|---|
char | charAt() | 특정 위치의 문자를 리턴 |
boolean | equals() | 두 문자열을 비교 |
byte | getBytes() | bytes[]로 리턴 |
byte | 주어진 문자셋으로 인코딩한 byte[]로 리턴 | |
int | index() | 문자열 내에서 주어진 문자열의 위치를 리턴 |
int | length() | 총 문자의 수를 리턴 |
string | replace(A, b) | A 부분을 b로 대치한 새로운 문자열을 리턴 |
string | substring(A) | A 위치에서 끝까지 잘라낸 새로운 문자열을 리턴 |
string | substring(A, B) | A 위치에서 B 전까지 잘라낸 새로운 문자열을 리턴 |
string | toLowerCase() | 알파벳 소문자로 변환한 새로운 문자열을 리턴 |
string | toUpperCase() | 알파벳 대문자로 변환한 새로운 문자열을 리턴 |
string | trim() | 앞뒤 공백을 제거한 새로운 문자열을 리턴 |
string | value() / valueOf() | 기본 타입 값을 문자열로 리턴 |
개인적으로 String 클래스가 제일 중요한 듯
언박싱은 코테 문제 풀면서 자주 사용 했다
왜? → 코테에서는 입력 처리 속도를 높이기 위해 BufferedReader
요새 연습하는 중이다 ㅎㅎ
메소드 | 설명 |
---|---|
abs() | 절대값 |
ceil() | 올림값 |
floor() | 버림값 |
max() | 최대값 |
min() | 최소값 |
random() | 랜덤값 |
rint() | 가까운 정수의 실수값 |
round() | 반올림값 |