-
[Java] main메소드에서 "Cannot make a static reference to the non-static method run() from the type main" 오류 해결법Study/Java 2020. 12. 8. 16:45반응형
자바를 처음 시작하시는 분들이 자주 범하는 오류입니다.
public class main { public static void main(String[] args) { run(); } private void run() { System.out.println("Leirbag"); } }
이 코드에서 실행을 하게되면 다음과 같은 오류가 발생합니다.
Cannot make a static reference to the non-static method run() from the type main 이렇게 run()을 호출할 수 없다는 경고문이 뜨게 됩니다.
이유가 무엇일까요?
main메소드는 static 메소드로써, 클래스 객체 외부에 존재하는 메소드이기 때문입니다.
자바 프로그램이 처음 시작할 부분을 정해야 하는데 그것은 클래스 밖에 존재 해야 해당 클래스를 실행할 수 있습니다.
왜냐하면 아직 이 main클래스가 호출되지 않았기 때문입니다.
즉, static이 붙지 않은 run이라는 객체 메소드는 main 클래스가 호출된 이후에 존재할 수 있는 메소드이므로
아직 존재하지 않는 것이나 마찬가지입니다.
반면에 main메소드는 static이 붙었기 때문에 이 클래스가 불린적이 없더라도 존재할 수 있는 것입니다.
그렇다면 어떻게 해야할까요?
public class main { public static void main(String[] args) { main my = new main(); my.run(); } private void run() { System.out.println("Leirbag"); } }
이렇게 수정해주면 오류가 발생하지 않고 메소드를 정상적으로 불러올 수 있게 됩니다.
static인 main메소드에서 main이라는 클래스를 my라는 이름으로 호출하고
그 my에 들어있는 run() 메소드를 호출하겠다는 의미입니다.
따라서 run()메소드가 정상적으로 작동하여 run 안에 들어있는 값을 출력할 수 있게 되는 것입니다.
반응형'Study > Java' 카테고리의 다른 글
[정보보호개론] Java로 RSA 암호문 해독하기 (RSA 복호화) (0) 2021.04.07 [정보보호개론] Java로 AES 복호화 프로그램 만들기 (0) 2021.04.02 [Java] 클래스 메소드 vs 인스턴스 메소드 (자바 static 관련) (0) 2021.02.23 [Java] 자바 스윙 JTextField 꾸미기 (0) 2020.12.08 [Java] 자바 스윙 JButton 꾸미기 (둥근 버튼) (10) 2020.11.21