try catch 예외처리



  • 오류와 예외
  • Try Catch


1 에러와 예외


error => 심각한 오류 except => 심각하지 않은 오류

	try{
		//예외 발생 구문
	}catch(){
	 	//예외가 발생한 후의 구문
	}finally{
	 	// 예외 발생 여부 상관없이  무조건 실행 구문
		}


사용예시

String str[]= {"맛점","우산","즐거운 화요일"};

		try{
			for(int i=0; i <str.length+1; i++) {
				System.out.println(str[i]);
				}
		System.out.println("예외가 발생할 여지가 있는 구문");
		return; 	// return을 사용해도 finally는 출력
		}catch (Exception ex) {
			System.out.println("예외 발생"+ ex.getMessage()); // or ex.toString
			ex.printStackTrace();
		}finally {
			System.out.println("무조건 실행 구문");
		} // connecton 닫는 부분
		System.out.println("프로그램 정상 종료");
		}


2. 범용 예외 처리


// java에서는 외부프로그램 시 무조건 예외처리

		FileInputStream  fis = null; //변수 선언 바깥에서

		try {
			fis = new FileInputStream("abc.txt");
			System.out.println("파일 연결");
			fis.read(); //

		} catch (FileNotFoundException e) { // 범용적인 예외처리 구문 Exception e // or 구체적 상황에 따른 예외 처리
			System.out.println("파일 없는 예외 :"+e.getMessage());

		} catch (IOException e) {
			System.out.println("입출력 예외:" + e.getMessage());

		} catch(Exception e) { // 범용예외처리 // 범용예외처리 구문은 맨 마지막에 넣어줘야 한다
			System.out.println("그 외 예외처리");

		}finally { //닫아주는 과정 // finally 구문에 있는 문장들은 예외여부와 상관없이 무조건 실행하는데 대표적으로 파일스트림, 네트워크 스트림, 디비의 커넥션 등을 닫을 때 사용한다
			try{ fis.close(); } catch (Exception ex) {}
		}
	}


3. throws Exception


메서드의 예외를 메인으로 반환

//		readFile(); //메서드만 호출할 경우 메서드에서 발생한 예외 처리 못해서 아래처럼 try/catch 해줌

		try{
			readFile();
			System.out.println("파일 처리");
		}catch (Exception ex) {
			System.out.println("예외 발생");
		}
	}

	// 메소드 내에서 예외가 발생한 경우 메소드 뿐만 아니라 main에서의 메소드 실행까지 정상 처리가 되지 않는다 이에 물론 메소드 내부에서 예외처리를 할 수 있지만,
	// 해당 메소드가 main으로 값을 반환할 경우  메인에서는 예외처리가 되어있지 않기 때문에

	static void readFile() throws Exception  { // 예외를 메서드를 호출한곳으로 반환한다
		FileInputStream fis = new FileInputStream("xxx.txt");
		System.out.println("파일연결");


//====================================================================================================

//
try {
  readArray();
} catch (Exception ex) {
  System.out.println("예외 발생:" + ex.getMessage());
}
System.out.println("정상종료");

} // end of main

// 오류가 어떤 부분에서 발생하였는지 명확히 파악하기 위해

static void readArray() throws Exception  { //여기 throws 에는 s붙음
String str[] = {"우리는 한 배","공부","자격증공부"};
try {
for(int i=0; i<=str.length; i++) {
  System.out.println(str[i]);
}
}catch(Exception ex) { // 예외처리해준 후,
  throw new MyException(); //throw 통해 예외를 일부로 발생시킨다. 발생 된 예외는 throws에 의해 main으로 넘어간다. 그 후 main에서 해당 예외를 catch // 여기서는 s안붙음
}
}
	}

//====================================================================================

// 예외를 따로 class화 시킴
public class MyException extends Exception { // extends Exception => Exception이라는 class를 상속한다.

	//예외 만들기


	public String getMessage(){
		return "우리가 자주 실수하는 예외";
	}
}