목차
1. 예외처리
2. Thread
1. 예외처리
1) 예외의 정의와 목적
• 예외: 프로그램이 실행되는 동안에 발생하는 예기치 않은 에러를 의미
• 예외처리: 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
• 예외처리를 하는 목적: 프로그램의 비정상적인 종료를 막기 위해서 사용
2) 예외 메시지 종류
① printStackTrace(): 예외 정보를 자세하게 출력
형식: ex. e.printStackTrace();
결과: e.printStackTrace() = java.lang.Exception: 에러내용입니다.
at ExeThrowException.main(ExeThrowException.java:5)
* printStackTrace() 메소드는 자료형이 void이므로 getMessage(), toString()과는 다르게 리턴값이 없다.
이 메소드를 호출하면 메소드가 내부적으로 예외 결과를 화면에 출력한다.
② getMessage(): 예외 정보를 문자열로 반환
형식: ex. System.out.println(e.getMessage() );
결과: e.getMessage() = 에러내용입니다.
③ toString(): 간단한 예외 메시지 확인
형식: ex. System.out.println(e.toString() );
결과: java.lang.Exception: 에러내용입니다.
3) 예외처리 형식
① try ~ catch 구문 → ★DivideZeroExceptionHandling2 참고
try{
예외가 발생할 가능성이 있는 문장;
}catch(예외클래스명 매개변수){
예외 메시지;
}
② try ~ catch ~ catch 구문 → ★MultiExceptionHandling / ExceptionEx3 참고
try{
예외가 발생할 가능성이 있는 문장;
}catch(예외클래스명 매개변수){
예외 메시지;
}catch(예외클래스명 매개변수){
예외 메시지;
}
③ try ~ catch ~ finally 구문 → ★MultiExceptionHandling1 참고
try{
예외가 발생할 가능성이 있는 문장;
}catch(예외클래스명 매개변수){
예외 메시지;
}finally{ // 주로 파일을 닫을 때, 데이터베이스 연결 끊을 때 사용됨
예외가 발생하든, 발생하지 않든 무조건 실행됨;
}
④ 예외 떠넘기기(throws) → ★ThrowsException / ThrowsExceptionHandling1 / ThrowsEx 참고
- 예외가 발생하는 메소드를 호출한 클래스에서 객체 생성 후 예외를 처리한다.
• 형식: throws 예외클래스
ex. public void check() throws Exception
⑤ 프로그래머가 고의로 예외를 발생시키는 경우(throw) → ★ThrowException 참고
• 형식: throw new 예외클래스();
ex. if( I == 3 ){ throw new ArrayIndexOutOfBoundsException();
*유의사항*
- 다중 catch 구문에서 Exception은 가장 마지막에 사용 가능
- throws로 예외를 던지는 클래스가 exception인데, 받는 클래스가 하위 클래스면 오류
4) 사용자 정의 예외처리 클래스 → ★UserDefineException / UserExceptionTest 참고
- 사용자 정의 예외처리 클래스를 만들 때, ‘extends’로 Exception 클래스를 상속받는다.
5) 예외처리 클래스
• ArithmeticException : 0으로 나눌 때
• ArrayIndexOutOfBoundsException : 배열의 범위를 벗어났을 때
• NumberFormatException : 숫자외의 값을 사용할 때
• NullPointerException : 객체를 생성하지 않고 멤버변수나 메소드를 호출할 때
• IOException : 입출력에 관련된 예외
• FileNotFoundException : 파일이 없을 때 발생
• SQLException : 데이터베이스 관련 예외
2. Thread
1) Thread의 정의와 사용
• thread: 각 프로세스를 구성하는 작업 단위
• 동시에 여러가지 작업을 하는 경우에 사용 (ex. 게임, 채팅)
2) Thread 생성 방법
① Thread 클래스를 상속받아 생성(extends) → ★ThreadEnd 참고
② Runnable 인터페이스를 상속받아서 생성(implements) → ★RunnableTest 참고
- 이미 다른 클래스를 상속받는 경우, 클래스의 다중 상속이 되지 않으므로 Runnable 인터페이스 상속
- Runnable 객체 생성 후, Thread 객체를 생성해서 Runnable 객체를 담고, Thread 객체로 run() 메소드 호출
3) Thread 생명 주기 → ★ThreadLife 참고
• Runnable : 새로 생성한 Thread를 start하면 Runnable 상태가 됨
실행 가능한 상태( start() 메소드 호출한 상태)
• Running : CPU를 점유하고 run() 메소드 내의 명령문을 실행하는 상태
실행상태(run() 메소드를 실행한 상태)
• Block : 특정 메소드의 호출에 의해서 현재 실행중인 Thread가 CPU의 제어권을 잃어버린 상태
• Dead : run() 메소드의 명령 수행이 끝났을 경우
4) Thread 우선순위 → ★ThreadPriority / ThreadPriorityControl / ThreadSleep 참고
- Thread의 우선순위를 따로 설정하지 않으면 기본값은 5가 된다.
- 우선순위를 지정해도 출력 결과가 우선순위에 맞게 출력되지는 않는다.
- sleep() 메소드를 사용해 프로그래머가 강제로 block 상태로 만들 수 있다.
- 최저 순위 (MIN_PRIORITY:1)
- 순위 미지정 (NORM_PRIORITY:5)
- 최고 순위 (MAX_PRIORITY:10),
'Java' 카테고리의 다른 글
18일차: Java java.io/java.net패키지- 2021.07.08 (0) | 2021.07.08 |
---|---|
17일차: Java Thread/java.io패키지- 2021.07.07 (0) | 2021.07.07 |
15일차: Java 자료구조/제네릭/예외처리 - 2021.07.05 (0) | 2021.07.05 |
14일차: Java 레퍼런스 형변환/자료구조 - 2021.07.02 (0) | 2021.07.02 |
13일차: Java 추상클래스/인터페이스/레퍼런스형변환 - 2021.07.01 (0) | 2021.07.01 |