코테를 연습하거나 프로젝트를 실행시키면 많이 마주하는 대표적인 2가지 에러에대해서 알아볼거에요!!
#컴파일 에러
- 자바코드를 컴파일하는 중 발생하는 에러입니다
예를들어)
- 구문 오류 ex) int j = i에서 ;를 까먹었을때!
- 타입 오류 ex) int a = 5.5; (정수형인데 실수형으로 적을 때)
- 잘못된 import 구문
ex)import java.util.*.ArrayList;
(util패키지 안에있는 모든것을 import하려하고, ArrayList클래스를 모두 import하려했기 때문에)
import java.utillll.ArrayList
(utillll 라고 적어 오타가 났기때문에)- 중복된 클래스 이름
ex)public class Car{//Car의 내용} class Car{//Car의 내용}
이렇게 Car 클래스를 만들고 또 Car 클래스를 만들게 되면 컴파일러는 이름이 같은 클래스가 2개 있어서 어떤 클래스를 사용해야 할지 혼란스러워지기 때문에 컴파일 오류가 발생합니다!
(But!! 패키지를 분리하면 방지할 수 있긴합니다!!)
#런타임 에러
- 자바 프로그램 실행중 발생하는 오류입니다!
예를들어)
- 배열 인덱스 초과 ex)
int[] arr = new int[5]; arr[5] = 10; //인덱스 5는 배열의 범위를 벗어나므로 오류가 발생해요
- 0으로 나누기
- 클래스 캐스팅오류
class Animal { public void eat() { System.out.println("Animal is eating"); } } class Dog extends Animal { public void bark() { System.out.println("Dog is barking"); } } class Main { public static void main(String[] args) { Animal animal = new Animal(); Dog dog = (Dog) animal; // 클래스 캐스팅 오류 발생 dog.bark(); } }위의 코드에서는 Dog은 Animal을 상속받은 클래스입니다
하지만 Main코드에서 Animal타입으로 선언된 객체 animal을
(Dog)타입으로 캐스팅할 때 오류가 발생해요!왜냐? Animal객체는 Dog클래스의 인스턴스가 아니기때문이에요!
- nullpointexception(널 포인트 참조 오류)
ex)String str = null; System.out.println(str.length());String 객체 str을 보시면 null;즉 비어있는 쓰레기값인데 바로 밑에 코드에서 그 쓰레기의 길이를 검사하려고 하네요 그러면 오류가 발생해요!
쓰레기(null)객체에 대해서 메서드나 인스턴스 변수를 참조하면 발생하는 오류입니다!
둘의 차이점 이해하셨나요? 이해 안되셨다면 한번더 정리들어갑니다!
- 컴파일에러는 프로그램 실행 전에 발생한다!=>코드를 수정해서 해결가능!
- 런타임에러는 프로그램 실행 중에 발생한다!
=>프로그램 실행중 에러메시지를 통해 확인해서 수정한다!(자바에의 경우)
컴파일 에러=> 클래스 파일을 생성할 수 없다는 메시지를 보낸다
런타임 에러=> 예외(Exception) 또는 오류(Error) 메시지를 보낸다.