논리 에러 : 일명 버그라고 생각하면 된다. 프로그램이 실행 하고 작동하는데 문제는 없지만 결과가 예상과 달리 사용자가 의도한 작업을 수행하지 못하는것
컴파일 에러 : 컴파일 단계에서 오류 발생하면 에러 메시지를 출력 하는것. 주로 문법 구문 오류로발생을 한다(;안넣었다던가, 이상한 변수를 넣었다던가 등등)
런타임 에러 : 프로그램 실행 중에 에러가 발생해서 잘못된 결과가 나오거나, 외부적인 요인으로 기계적 결함으로 프로그램이 비정상적으로 종료 되는 상황, 대채로 개발시 설계 미숙으로 발생하는 에라 가 대부분..
자바에서는 runtime 시 발생할수 있는 오류를 애러와 예외로 구분 하였는데 아래의 차이점으로 구분 할수 있다
애러 : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
thow(예외 발생 시키기) : 메서드 안에서, 실제로 예외 객체를 던질 때 사용하는 예약어입니다.
throws(예외 떠넘기기) : 메서드 이름 뒤에 붙어 이 메서드가 어떠한 예외사항을 던질 수 있는지 알려주는 예약어입니다. 보통은 try-catch문으로 처리하는것이 기본이지만, 경우에 따라서는 다른곳에서 예외를 처리하도록 호출한 곳으로 예외를 떠넘길수도 있다.
public class BadInputException extends Exception {
public BadInputException() {
super("잘못된 입력입니다! ");
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws BadInputException // 예외 떠넘기기{
Scanner sc = new Scanner(System.in);
System.out.print("갑을 입력 하세요 : ");
String input = sc.nextLine();
throw new BadInputException(); //예외 발생 시키기
}
}

예외처리(Exception handling) : 프로그램 실행 시 발생하수 있는 예기치 못한 예외의 발생에 대한 코드를 작성하는것
try-catch, finally문 : try 구문에서 예외 발생할수 있는 코드를 작성 하고 만약에 오류가 발생 하면 종류의 맞는 catch 문으로가서 catch 구문안에 코드를 실행 시킨다.
catch 문에 예외클래스 타입과 변수가 선언 되어있고 try에서 발생한 오류가 예외 클래스가 일치하면 해당 구문으로 이동하는 형식이다 이렇게 되면 무슨 문제때문에 발생했는지 예상을 할수가 있고 대비 할 수 있다. finally는 어떤 예외가 발생하더라도 반드시 실행 해야하는 부분이 있으면 해당구문을 작성한다
try-catch ex
public class StudyException {
public static void main(String[] args) {
OurClass ourClass = new OurClass();
try {
// 1. 위험한 메소드의 실행을 "시도" 해 봅니다.
// "시도" 해보는 코드가 들어가는 블럭입니다.
ourClass.thisMethodIsDangerous();
} catch (OurBadException e) {
// 2. 예외가 발생하면, "잡아서" handling 합니다.
// 예외가 발생하는경우 "handling" 하는 코드가 들어가는 블럭입니다.
// 즉 try 블럭 내의 구문을 실행하다가 예외가 발생하면
// 예외가 발생한 줄에서 바로 코드 실행을 멈추고
// 여기 있는 catch 블럭 내의 코드가 실행됩니다.
System.out.println(e.getMessage());
} finally {
// 3. 예외의 발생 여부와 상관없이, 실행시켜야 하는 코드가 들어갑니다.
// 무조건 실행되는 코드가 들어가는 블럭입니다.
System.out.println("우리는 방금 예외를 handling 했습니다!");
}
}
}