Fairy ' s

[JAVA] Exception / try ~ catch 본문

Study/JAVA

[JAVA] Exception / try ~ catch

berafairy 2023. 1. 11. 14:24

// 참고 

 


 

예외처리 Exception

  • 코딩을 하며 에러가 나면 적절한 처리를 하고 싶을 때 자바가 제공해주는 문법 (try, catch, throw 등)
Scanner scan=new Scanner(System.in);
System.out.print("숫자 입력:");
//숫자 형식의 문자열을 입력 받는다. "10" "20" "10.1" 등등
String inputNum=scan.nextLine();
double num=Double.parseDouble(inputNum);
//변환한 숫자에 100 을 더하고
double result = num+100;
//더한 결과 값을 출력한다.
System.out.println("입력한 숫자 + 100 :"+result);
  • 숫자를 문자열로 입력받아 숫자로 변환하고 변환한 숫자에 100을 더해서 출력하는 코드
  • 이 코드를 실행하고 숫자가 아닌 문자를 입력하게 되면 오류가 발생
  • try 문 안에서 오류가 발생하면 예외에 해당되는 catch문이 실행되고, 오류가 발생하지 않으면 실행되지 않는다.
  • catch문은 여러개 만들 수 있고, finally문은 try 문에서 예외 발생 여부에 관계없이 무조건 실행

 

Scanner scan=new Scanner(System.in);
System.out.print("숫자 입력:");
//숫자 형식의 문자열을 입력 받는다. "10" "20" "10.1" 등등
String inputNum=scan.nextLine();
try{
	double num=Double.parseDouble(inputNum);
	//변환한 숫자에 100 을 더하고
	double result = num+100;
	//더한 결과 값을 출력한다.
	System.out.println("입력한 숫자 + 100 :"+result);
	} catch(NumberFormatException e) {
		e.printStackTrace();
	}
  • printStackTrace() 메서드는 예외 정보를 콘솔창에 출력해준다.

try ~ catch문 추가 시 출력되는 예외문

 

 


예제 1

Scanner scan=new Scanner(System.in);
System.out.print("나눌수 입력:");
String inputNum1=scan.nextLine();
System.out.print("나누어 지는 수 입력:");
String inputNum2=scan.nextLine();

//입력한 문자열을 정수로 변환하고 
int num1=Integer.parseInt(inputNum1);
int num2=Integer.parseInt(inputNum2);

//num2 를 num1 으로 나눈 몫
int result=num2/num1;
//num2 를 num1 으로 나눈 나머지
int result2=num2%num1;

System.out.println(num2+" 를  "+num1+" 으로 나눈 몫:"+result);
System.out.println(num2+" 를  "+num1+" 으로 나눈 나머지:"+result2);	

System.out.println("main 메소드가 정상 종료됩니다.");
  • 위 코드에서 숫자가 아닌 것과 0을 나눌 수에 입력하게 되면 예외가 발생합니다.
  • 0으로 나눌 경우 ArithmeticException 발생
  • 숫자가 아닌 경우 NumberFormatException

 

Scanner scan=new Scanner(System.in);
System.out.print("나눌수 입력 : ");
String inputNum1=scan.nextLine();
System.out.print("나누어 지는 수 입력 : ");
String inputNum2=scan.nextLine();

try {
	//입력한 문자열을 정수로 변환하고 
	int num1=Integer.parseInt(inputNum1);
	int num2=Integer.parseInt(inputNum2);
	//num2 를 num1 으로 나눈 몫
	int result=num2/num1;
	//num2 를 num1 으로 나눈 나머지
	int result2=num2%num1;

	System.out.println(num2+" 를  "+num1+" 으로 나눈 몫:"+result);
	System.out.println(num2+" 를  "+num1+" 으로 나눈 나머지:"+result2);	

	System.out.println("작업 성공입니다.");
}catch(NumberFormatException nfe) {
	nfe.printStackTrace();
}catch(ArithmeticException ae) {
	ae.printStackTrace();
}finally { //예외가 발생 하던 안하던 실행이 보장되는 블럭
	System.out.println("무언가 마무리 작업을 합니다.");
}

System.out.println("main 메소드가 정상 종료됩니다.");
  • 발생한 예외 오류에 try catch 처리로 예외 발생 여부에 관계 없이 마무리 작업을 한다는 내용 출력
  • 오류가 발생해도 finally 구문을 정상처리 되는 것을 볼 수 있다.

 


예제 2 / 직접 예외 발생 시키기

 

// SleepException 클래스 생성

public class SleepyException extends Exception{
	
	//예외 메세지를 생성자의 인자로 전달받아서 부모 생성자에 전달하기
	public SleepyException(String msg) {
		super(msg);
	}
}
  • SleepException 클래스에 Exception을 상속해 준다.
  • Exception 말고도 RuntimeException 을 상속받을 수 있다.

Exception / RuntimeException

  • Exception을 상속받으면 반드시 try ~ catch 로 묶어 주어야 한다.
  • RuntimeException을 상속받으면 try ~ catch 로 묶어 주지 않아도 오류가 나지 않는다. 필요 시 사용

 

public class test {
	public static void study() throws SleepyException {
		Random ran = new Random();
		int ranNum = ran.nextInt(3);
		if(ranNum==0) {
			throw new SleepyException("너무 졸려서 공부를 할 수가 없어요!");
		}
		System.out.println("열심히 공부합니다!!");
	}
	   
	public static void main(String args[]) {
		System.out.println("main 메소드가 시작되었습니다.");

		try {
			test.study();
		} catch (SleepyException e) {
			e.printStackTrace();
		}
	}
}
  • 0 ~ 3 까지 랜덤한 숫자가 나오게 하고 나온 숫자가 0이면 졸려서 공부를 할 수 없다는 예외 발생
  • main 메서드에서 try catch 문을 통해 test.study() 함수를 실행시키고 예외가 발생하면 어떠한 예외가 발생했는지 표시

 

SleepyException 예외 발생 / 랜덤 숫자 0

 

'Study > JAVA' 카테고리의 다른 글

[JAVA] Thread ?  (0) 2023.01.12
[JAVA] 입출력스트림  (0) 2023.01.11
[JAVA] Wrapper Class ?  (0) 2023.01.11
[JAVA] Generics Class ?  (0) 2023.01.10
[JAVA] ArrayList ?  (0) 2023.01.10
Comments