1️⃣ cannot find symbol 또는 cannot resolve symbol
지정된 변수나 메서드를 찾을 수 없다는 뜻.
선언되지 않은 변수나 메서드를 사용하거나, 변수 또는 메서드의 이름을 잘못 사용한 경우에 발생한다.
✅ 자바에서는 대소문자 구분을 하기 때문에 철자뿐만 아니라 대소문자의 일치 여부도 꼼꼼하게 확인해야 함.
2️⃣ ';' expected
세미콜론';'이 필요한 곳에 없다는 뜻.
✅ 자바의 모든 문장의 끝에는 ';'을 붙여주어야 하는데 가끔 이를 잊고 실수하기 쉽다.
3️⃣ Exception in thread "main" java.lang.NoSuchMethodError: main
'main 메서드를 찾을 수 없다.'라는 뜻.
실제로 클래스 내에 main 메서드가 존재하지 않거나 메서드의 선언부 'public static void main(String[] args)'에 오타가 존재하는 경우 발생한다.
✅ main 메서드가 클래스에 정의되어 있는지 확인하고, 정의되어 있다면 main메서드의 선언부에 오타가 없는지 확인한다. 자바는 대소문자를 구별하므로 대소문자의 일치 여부까지 정확히 확인해야 한다.
🔑 arg는 매개변수의 이름이므로 args대신 argv나 arg와 같이 다른 이름을 사용할 수 있다.
4️⃣ Exception in tread "main" java.lang.NoClassDefFoundError: Hello
'Hello 라는 클래스를 찾을 수 없다.'라는 뜻.
✅ 클래스 'Hello'의 철자, 특히 대소문자를 확인해보고 이상이 없으면 클래스파일(*.class)이 생성되었는지 확인한다.
예를 들어 'Hello.java'가 정상적으로 컴파일되었다면 클래스파일 'Hello.class'가 있어야 한다. 클래스파일이 존재하는데도 동일한 메시지가 반복해서 나타난다면 클래스경로(classpath)의 설정이 바르게 되었는지 다시 확인해본다.
5️⃣ illegal start or expression
직역하면 문장(또는 수식)의 앞부분이 문법에 맞지 않다는 의미.
문장에 문법적 오류가 있다는 뜻.
✅ 괄호'(' 나 '{'를 열고서 닫지 않거나 수식 if문, for문 등에 문법적 오류가 있을 때 또는 public이나 static과 같은 키워드를 잘못 사용한 경우에도 발생한다. 문법적 오류가 있는지 확인해보자.
6️⃣ class, interface, or enum expected
키워드 class나 interface 또는 enum이 없다.라는 뜻. 보통 괄호의 개수가 일치하지 않는 경우 발생한다.
✅ 열린괄호와 닫힌괄호의 개수가 같은지 확인하기.
📌 에러가 발생하였을 때의 대처
1) 에러 메시지를 잘 읽고 해당 부분의 코드를 살펴본다.
이상이 없으면 해당 코드의 주위(윗줄과 아래 줄)도 함께 살펴본다.
2) 그래도 이상이 없으면 에러 메시지는 잊어버리고 기본적인 부분을 재확인한다.
대부분의 에러는 사소한 것인 경우가 많다.
3) 의심이 가는 부분을 주석 처리하거나 따로 떼어내서 테스트한다.
대부분의 경우 에러 메시지만 잘 이해해도 문제가 해결되는 경우가 많으므로
에러 해결을 위해서 제일 먼저 해야 할 일은 에러 메시지를 잘 읽는 것임을 명심하자.
참고자료 -
'Java' 카테고리의 다른 글
[Java] String배열 (0) | 2022.12.27 |
---|---|
[Java] 배열과 배열의 복사 (0) | 2022.12.22 |
[Java] 기본형(Primitive type) - 논리, 문자형 (2) | 2022.12.15 |
[Java] 변수의 명명규칙과 네이밍컨벤션 (0) | 2022.12.13 |
[Java] 논리 연산자와 그 외 연산자 (0) | 2022.12.08 |