컴파일러가 하는 일은 기본적으로 '구문 체크 및 번역'이다. 문법에 맞아야 번역을 할 수 있기 때문에 '구문체크'를 먼저 한다. 그리고 소스코드 '최적화'기능도 한다. 옛날에는 구문체크, 번역만 했는데 요즘에는 컴파일러가 똑똑해져서 더 많은 에러를 체크할 수 있고, 최적화까지 한다.
간단한 계산의 경우, 컴파일러가 해준다. int i = 3 + 5; 이 정도 수준의 상수 끼리의 계산은 컴파일러가 해준다. 실행 시 또는 컴파일 시에 계산 결과가 똑같기 때문이다. 컴파일러가 계산 결과를 8로 바꿔준다.
또한, '생략된 코드 추가'를 해준다. 예를 들어, extends Object와 같은 코드를 컴파일러가 자동으로 추가해준다.
IDE는 저장할 때마다 빌드 시 자동으로 컴파일해준다.(옵션 체크 시)자바 컴파일러(javac.exe) - javac 명령어를 사용하여 자바 파일을 컴파일한다.
컴파일 했을 때, ExceptionTest.java의 5번째 줄에 에러가 발생했다.
2. 런타임 에러(runtime error) : 실행 시발생하는 에러(프로그램 종료)
IDE에서 ExceptionTest.java 실행 결과자바 인터프리터(java.exe) - java 명령어를 사용하여 자바 소스파일을 실행한다.
실행 결과,ExceptionTest.java의 5번째 줄에ArrayIndexOutOfBoundsException에러가 발생했다.
3. 논리적 에러(logical error) : 실행은 되지만,작성 의도와 다르게 동작 하는 것(프로그램 종료x)
예를 들면, 미사일 게임, 미사일이 날라와서 맞았는데 비행기가 죽지 않는다. 아니면 재고 관리 프로그램에서 재고가 음수로 떨어지는 경우가 바로 논리적 에러의 한 예이다. 프로그램이 종료되지는 않지만 원치않게 동작한다.
try {
// 예외가 발생할 가능성이 있는 문장들을 넣는다.
} catch (Exception1 e1) {
// Exception1이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
} catch (Exception2 e2) {
// Exception2이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
} catch (Exception3 eN) {
// ExceptionN이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
}
if문과 달리, try블럭이나 catch블럭 내에 포함된 문장이 하나뿐이어도 괄호{}를 생략할 수 없다.