본문 바로가기
자바 풀스택 공부

Day 20.

by seung_nari 2022. 1. 28.

Day 16. ~ 19.는 대학교 프로젝트로 사라져버린... 8ㅅ8


try-catch문에서의 흐름

> try 블럭 내에서 예외가 발생한 경우,

  1. 발생한 예외와 일치하는 catch블럭이 있는지 확인
  2. 일치하는 catch블럭을 찾게 되면, 그 catch블럭 내의 문장들을 수행하고 전체 try-catch문을 빠져나가서 그 다음 문장을 계속해서 수행한다. 만일 일치하는 catch블럭을 찾지 못하면, 예외는 처리되지 못한다.

> try 블럭 내에서 예외가 발생하지 않은 경우,

  1. catch블럭을 거치지 않고 전체 try-catch문을 빠져나가서 수행을 계속한다.
public class ExceptionEx5 {
	public static void main(String[] args) {
		System.out.println(1);
		System.out.println(2);
		try {
			System.out.println(3);
			System.out.println(0/0);
			System.out.println(54); // 도달하지 못함
		} catch(ArithmeticException ae) {
			System.out.println(5);
		} // try-catch end
		System.out.println(6);
	}
}


메서드에 예외 선언하기

메서드에 예외를 선언하려면, 메서드의 선언부에 키워드 throws를 사용해서 메서드 내에서 발생할 수 있는 예외를 적어주기만 하면 된다. 그리고 예외가 여러 개일 경우에는 쉼표(, )로 구분단다.

 

public class ExceptionEx12 {
	public static void main(String[] args) {
		try {
			m1();
		}
		catch (Exception e) {
			e.printStackTrace();;
		}
	}
	
	static void m1() throws Exception{
		m2();
	}
	
	static void m2() throws Exception {
		throw new Exception();
	}
}

예제를 해석해보자면

main에서 m1( )을 호출을 했고.

m1( )은 m2( )를 호출하는데 m2( )에서 예외가 발생했다.

m2( )에서 발생한 예외는 m2( )에서 처리하지 않고 본인을 호출한 m1( )에서 예외를 던져준다.

이때 예외를 던졌는지 확인할 수 있는 것은 static void m2( ) throws Exception { ... } 에서 빨간색 부분이다.

m1( )은 m2( )에서 받은 예외를 처리하지 않고 본인을 호출한 main으로 예외를 던진다.

예외는 main에서 처리한다!!


파일을 다운로드할 때 예외처리!!

고양이는 귀여우니까 고양이 사진 들구와야지 ㅎㅎ

 

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

public class FileDownloadEx {
	public static void main(String[] args) {
		String url = "https://mblogthumb-phinf.pstatic.net/20131122_137/queenscat_1385114043602AutMi_JPEG/%BE%C6%B8%DE%B8%AE%C4%AD%C4%C3.JPG?type=w2";
		String targetName = "naver.html";
		
		try {
			download(url, targetName);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	static void download(String url, String targetName) throws IOException {
		URL u = new URL(url);
		InputStream is = u.openStream();
		FileOutputStream fos = new FileOutputStream(targetName);
		
		int b = 0;
		while ((b = is.read()) != -1){
			fos.write(b);
		}
		fos.close();
	}
}

'자바 풀스택 공부' 카테고리의 다른 글

Day 22.  (0) 2022.01.28
Day 21.  (0) 2022.01.28
2차원 ArrayList  (0) 2022.01.28
Day 15.  (0) 2022.01.19
Day 14.  (0) 2022.01.19

댓글