본문 바로가기
카테고리 없음

JAVA에서 자주 발생하는 에러와 해결방법

by 최로이 2020. 11. 1.

1. cannot find symbol / cannot resolve symbol

지정된 변수나 메소드를 찾을 수 없다는 의미로 선언되지 않은 병수나 메소드를 사용하거나, 변수 또는 메소드의 이름을 잘못 사용한 경우에 발생한다. 자바에서는 대소문자 구분을 하기 때문에 철자 뿐만 아니라 대소문자의 일치여부도 확인해야 한다.

 

2. ';' exprected

세미콜론(;)이 필요한 곳에 없다는 뜻이다. 자바의 모든 문장의 끝에는 ';'을 붙여주어야 하는데 가끔 이것을 잊고 실수하기 쉽다.

 

3. Exception in thread "main" java.lang.NoSuchMethodError : main

main 메소드를 찾을 수 없다는 의미로 실제로 클래스 내에 main 메소드가 존재하지 않거나 메소드의 선언부에 public static void main(String[] args)에 오타가 존재하는 경우에 발생한다.

이 에러의 해결방법은 클래스 내에 main 메소드가 정의되어 있는지 확인하고, 정의되어 있다면 main 메소드 선언부에 오타가 없는지 확인하면 된다. 자바는 대소문자를 구별하므로 대소문자의 일치 여부까지 확인해야 한다.

*args는 매개 변수의 이름이므로 args 대신에 argv나 arg와 같이 다른 이름을 사용할 수 있다.

 

4. Exception in thread "main" java.lang.NoClassDeFoundError : Hello

'Hello'라는 클래스를 찾을 수 없다는 의미다. 클래스 Hello의 철자, 특히 대소문자를 확인해보고 이상이 없으면 클래스파일(*.class)이 생성되었는지 확인한다. 예를 들어 Hello.java가 정상적으로 컴파일 되었다면 클래스파일 Hello.class가 있어야 한다. 클래스파일이 존재하는데도 동일한 메시지가 반복해서 나타난다면 클래스패스(classpath)의 설정이 바르게 되었는지 다시 확인해야 한다.

 

5. illegal start of expression

문장에 문법적 오류가 있다는 의미다. 괄호'('나 '{'를 열고서 닫지 않거나, 수식 또는 if문 for문 등에 문법적으로 오류가 있을 때 또는 public이나 static과 같은 키워드를 잘못 사용한 경우에도 발생한다. 에러가 발생한 곳이 문법적으로 옳은지 확인해야 한다.

 

6. class, interface, or enum expected

키워드 class interface, enum이 없다 라고 해석되지만 보통 괄호의 열고 닫거나 개수가 일치 하지 않는 경우에 발생한다. 열린 괄호와 닫힌 괄호의 개수가 같은지 확인하자.

 

위 내용을 토대로 마지막으로 에러가 발생했을 때 어떻게 해결할 것인가에 대한 방법을 정리하면 다음과 같다.

1) 에러 메시지를 읽고 해당 부분의 코드를 살펴본다. 만약 해당 부분에 이상이 없으면 해당 코드의 주위(위, 아래 줄)도 함께 살펴본다.

2) 그래도 이상이 없으면 에러 메시지는 잊어버리고 기본적인 부분을 재확인한다.

3) 의심이 가는 부분을 주석처리 하거나 따로 떼어내서 테스트 한다.

댓글