🚀 자바 프로그래밍을 하면서 발생하는 에러들에 대해 알아봅시다!
1. ArrayIndexOutOfBoundsException
배열의 범위를 넘어선 인덱스를 참조할 때 발생하는 에러입니다.
알고리즘 문제 풀 때 가장 자주 발생하는 에러라고 생각됩니다.
📋 코드
import java.util.*;
public class Main {
public static void main(String[] args) {
int arr[] = new int[10];
System.out.println(arr[10]);
}
}
👨🏻💻 결과
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
2. ArithmeticException
정수를 0으로 나눌 때 발생하는 에러입니다.
📋 코드
import java.util.*;
public class Main {
public static void main(String[] args) {
System.out.println(12/0);
}
}
👨🏻💻 결과
Exception in thread "main" java.lang.ArithmeticException
3. NullPointerException
null은 유효한 객체 인스턴스가 아니므로 할당되는 메모리가 없습니다.
null 객체에 접근하거나 method를 호출하는 경우 발생하는 에러입니다.
📋 코드
import java.util.*;
public class Main {
public static void main(String[] args) {
String s = null;
System.out.println(s.length());
}
}
👨🏻💻 결과
Exception in thread "main" java.lang.NullPointerException
4. FileNotFoundException
파일에 접근하려고 하는데 파일을 찾지 못했을 때 발생하는 에러입니다.
📋 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new FileReader("test.txt"));
br.readLine();
br.close();
}
}
👨🏻💻 결과
Exception in thread "main" java.io.FileNotFoundException
5. NumberFormatException
숫자형 포맷 에러입니다. 문자를 숫자로 변경할 때 자주 발생합니다.
📋 코드
import java.util.*;
public class Main {
public static void main(String[] args){
String s = "이건 숫자 아님";
System.out.println(Integer.parseInt(s));
}
}
👨🏻💻 결과
Exception in thread "main" java.lang.NumberFormatException
6. cannot find symbol 또는 cannot resolve symbol
지정된 변수나 메서드를 찾을 수 없다는 뜻으로 선언되지 않은 변수나 메서드를 사용하거나, 변수나 메서드의 이름을 잘못 사용한 경우에 발생합니다. 자바에서는 대소문자 구분을 하기 때문에 철자뿐만 아니라 대소문자의 일치 여부도 꼼꼼하게 확인해야 합니다.
7. ';' expected
‘;’(세미콜론)이 필요한 곳에 ‘;’이 없다는 뜻입니다. 자바의 모든 문장 마지막에는 ‘;’을 붙여주어야 하는데 가끔 이를 잊고 실수할 때가 있습니다.
8. Exception in thread "main" java.lang.NoSuchMethodError: main
‘main메서드를 찾을 수 없다.’는 뜻인데 실제로 클래스 내에 main메서드가 존재하지 않거나 메서드의 선언부(public static void main(String[] args))에 오타가 존재하는 경우에 발생합니다.
이 에러의 해결방법은 main메서드가 클래스에 정의되어 있는지 확인하고, 정의되어 있다면 main메서드의 선언부에 오타가 없는지 확인합니다. 자바는 대소문자를 구별하므로 대소문자의 일치 여부까지 정확히 확인해야 합니다.
[참고] args는 변수의 이름이기 때문에 다른 이름을 사용해도 상관없습니다.
예를 들어 args 대신 argv나 arg라고 해도 됩니다.
9. Exception in thread "main" java.lang.NoClassDefFoundError: Hello
‘Hello라는 클래스를 찾을 수 없다.’는 뜻입니다. 클래스의 ‘Hello'의 철자, 특히 대소문자를 확인해보고 이상이 없으면 클래스 파일(*. class)이 생성되었는지 확인합니다.
예를 들어 ‘Hello.java’가 정상적으로 컴파일되었다면 클래스 파일 ‘Hello.class’가 있어야 합니다. 클래스 파일이 존재하는데도 동일한 메시지가 반복해서 나타난다면 클래스 패스(classpath)의 설정이 바르게 되었는지 다시 확인해봐야 합니다.
10. illegal start of expression
직역하면 문장(또는 수식, expression)의 앞부분이 문법에 맞지 않는다는 의미인데, 간단히 말해서 문장에 문법적 오류가 있다는 뜻입니다. 괄호‘(’를 열고서 닫지 않거나, 수식이나 if문, for문 등에 문법적 오류가 있을 때 또는 public이나 static과 같은 키워드를 잘못 사용한 경우에도 발생합니다. 에러가 발생한 곳이 문법적으로 옳은지 확인해야 합니다.
11. class, interface, or enum expected
이 메시지의 의미는 ‘키워드 class나 interface 또는 enum가 없다.’ 이지만, 보통 괄호(‘{’ 또는 ‘}’)의 개수가 일치하지 않는 경우에 발생합니다. 열린 괄호 '{' 와 닫힌괄호 '}' 의 개수가 같은지 확인해야 합니다.
📚 참고
참고 서적 - 자바의 정석
'🚫ERROR' 카테고리의 다른 글
[Git] "! [rejected] master -> master (fetch first)" 에러 (0) | 2021.10.25 |
---|---|
[Git] "error: Unknown subcommand: origin" 해결법 (0) | 2021.10.25 |
[mySQL 오류] ERROR 1045 (28000): Access denied for user 'root'@'localhost' (0) | 2021.04.19 |
[LINK1104, LNK1168, Visual Studio] 컴파일 에러 해결 방법 (~를 쓰기용으로 열 수 없습니다.) (0) | 2020.12.27 |
[BOJ] 백준 JAVA코드 제출 방법 (0) | 2020.12.10 |