자바 에러

조수경·2021년 10월 1일
0

JAVA

목록 보기
19/26
package h_exceprion;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class ExceptionHandling {

public static void main(String[] args) {

에러
- 컴파일 에러: 컴파일 시에 발생되는 에러(빨간줄)
- 논리적 에러: 실행은 되지만, 의도와 다르게 동작하는 것(버그)
- 런타임 에러: 실행 시에 발생되는 에러

런타임에러
- 런타임 에러 발생시 발생한 위치에서 프로그램이 비정상적으로 종료된다.
- 에러: 프로그램 코드에 의해 수습될 수 없는 심각한 오류(처리 불가)
- 예외: 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류(처리 가능)

예외

  • 모든 예외는 Exception 클래스의 자식 클래스 이다.

  • RuntimeException 클래스와 그 자식들은 예외처리가 강제되지 않는다.

  • [RuntimeException 클래스와 그 자식들을 제외한]
    Exception 클래스의 자식들은 예외처리가 강제된다.

    예외처리(try-catch)

  • 예외처리를 통해 크로그램이 비정상적으로 종료되는 것을 방지할 수 있다.

  • try {} catch(Exception e){}

  • try 블럭 안의 내용을 실행 중 예외가 발생하면 catch로 넘어간다.

  • catch의 ()안에는 처리할 예외를 지정해 줄 수 있다.

  • 여러 종류의 예외를 처리할 수 있도록 catch는 하나 이상 올 수 있다.

  • 발생한 예외와 일치하는 catch블럭안의 내용이 수행된 후 try-catch를 빠져나간다.

  • 발생한 예외와 일치하는 catch가 없는 경우 예외는 처리되지 않는다.

    기본 형태
      try{
          int result = 10 / 0; //정수는 0으로 나눌 수 없어서 예외가 발생함-> 프로그램 종료
          System.out.println(result); //발생할수 있는 예외의 객체가 생성됨

      }catch(ArithmeticException | IndexOutOfBoundsException e){
      // 파라미터에는 try에서 발생할 수 있는 에러를 넣어주는 것
          //catch가 실행됨, 내용이 없어도 예외는 처리됨 -> 콘솔창에 아무것도 안뜸
          e.printStackTrace();
          //콘솔창에 에러 메세지가 뜨게 만드는 것
      }catch(NullPointerException e){

      }catch(Exception e){
      //exception: 모든 예외의 부모 클래스 사용, 모든 예외 처리 가능
          e.printStackTrace();
      }


          try {
              Thread.sleep(1);
          } catch (InterruptedException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          } // control 1 눌러보기


     //java.lang.ArithmeticException:(발생한 클래스) / by zero(발생한 원인)
      //at h_exceprion.ExceptionHandling.main(ExceptionHandling.java:39)(예외가 발생한 위치)

      //예외가 여러개 발생 -> 가장 위에 있는 링크로 들어가기(항상 가장위의 문제가 아닐수 있음)
      test1();


  }

  private static void test1() {
      test2();

  }

  private static void test2() {

// System.out.println(10 / 0);
try {
new FileInputStream("");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

package h_exceprion;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Finally {

public static void main(String[] args) {

finally

  • 필요에 따라 try-catch 뒤에 finally를 추가할 수 있다.
  • finally는 예외의 발생여부와 상관 없이 가장 마지막에 수행된다.
  • 주로 close를 호출하고 싶을때 사용

자동 자원 반환

  • try(변수 선언; 변수 선언){} catch(Exception e){}

  • 사용 후 반환이 필요한 객체를 try의 ()안에서 선언하면 try 블럭 종료시 자동을 반환된다.

  • finally를 쓰기 너무 길때 사용

    		FileInputStream fis = null; //파일 읽기
    	
    		try {
    			fis = new FileInputStream("d:file.txt");
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}finally{
    			try {
    				fis.close();
    			} catch (Exception e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}//사용 후 반납(반드시 호출 되야 함) 운영체제로 자원을 빌려왔다가 반납하는 것
    		
    		}
    	
    	
    		//예외 발생 : try -> catch -> finally
    		//예외 미발생: try -> finally  
    	
    		//자동 자원 반환(JDK1.7버전부터 사용 가능)
    		try(FileOutputStream fos = new FileOutputStream ("d:/file.txt")){
     //FileOutputStream파일을 만드는것
    			String str ="아무 내용이나 적어";
    		
    			byte[] bytes =str.getBytes();
    			for(int i = 0; i < bytes.length; i++){
    				fos.write(bytes[i]);
    			}
    		
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    	
}

}

profile
신입 개발자 입니다!!!

0개의 댓글