Back/Java

Java의 정석 [CHAPTER1.-16 자주 발생하는 에러와 해결방법]

자바꿈나무00 2022. 12. 26. 16:35
cannot find symbol / cannot resolve symbol  - 의미: 지정된 변수나 메서드를 찾을 수 없다. 

- 이유: 선언되지 않은 메서드를 사용하거나,
변수 또는 메서드의 이름을 잘못 사용.

- 해결:  대소문자 구분, 스펠링 체크.
';' expeted - 의미: 세미콜론';'이 필요한 곳에 없다.

- 이유:  모든 문장 끝에 붙여주지 않음.

- 해결:  세미콜론';'을 점검
Exception in thread "main" java.lang.NoSuchMethodError:main - 의미: main메서드를 찾을 수 없다.

- 이유: 클래스 내에 main메서드가 없거나
메서드의 선언부 'public static  void mian(String[] args)'에 오타가 존재.

- 해결: main메서드가 클래스에 정의되어 있는지 확인, 정의되어 있다면 main메서드의 선언부에 오타가 없는지 확인. 
Eception in thread "main" java.lang.NoClassDefFoundError: Hello - 의미: 'Hello'라는 클래스를 찾을 수 없다. 

- 이유: 대소문자 구분이 잘못된 상태거나 클래스파일(*.class)이 생성되지 않았을 것.

- 해결: 대소문자 구분과 클래스파일 생성을 체크한다.
 'Hello.java'가 정상적으로 컴파일 되었다면 클래스파일 'Hello.class'가 있어야 한다. 
 클래스파일이 존재하는데도 동일한 메세지가 반복해서 나타난다면 클래스패스의 설정이 제대로 되었는지 확인.
illegal start of expression  - 의미: 문장(또는 수식)의 앞 부분이 문법에 맞지 않는다. 

- 이유: 괄호'(' 나 '{'의 짝이 맞지 않는 경우,
수식이나 if문, for문 등에 문법적 오류가 있는 경우, 
public이나 static과 같은 키워드를 잘못 사용한 경우.

- 해결: error가 발생한 부분이 문법적으로 맞는지 확인.
class, iterface, or enum expected - 의미: 키워드 class나 interface 또는 enum이 없다.

- 이유: '{'의 짝이 맞지 않는 경우.

- 해결: 괄호 '{'점검

 

<에러 대처>

  1.  실제 에러와 에러 메시지가 관계없는 경우도 있지만 대체로 에러 메시지를 잘 읽고 해당 부분의 코드를 살펴보면 해결할 수 있다. 이상이 없으면 해당 코드의 주위(윗줄과 아래 줄)도 함께 살펴본다.
  2.  그래도 이상이 없으면 에러 메시지는 잊어버리고 기본적인 부분을 재확인한다. 대부분의 에러는 사소한 것인 경우가 많다.
  3.  의심이 가는 부분을 주석 처리하거나 따로 떼어내서 테스트한다.

 

 내 경우 처음에  오류를 낸건 'prinln'에서 LN인데 몰라서 IN으로 생각하고 적은 것이다. 그 다음 오류들은 셀 수 없이 많지만 초심자인 내 오류는 스펠링 오타와 괄호 짝을 맞추지 않아서 오류나는 경우가 90%, 그 다음 이유는 내용을 잘 이해하지 못하거나 오해해서 이상한 구조를 만들어 놓는 오류가 많다. 

 처음엔 오류가 나면 당황했었지만 이제는 하도 많이 틀려보다 보니 오히려 침착하게 메시지를 읽고 수정하고, 그래도 안 되면 구글링해서 다른 사람들의 기록을 보며 해결한다. 침착하자.