HOME
      • 분류 전체보기 (65)
        • Life (6)
          • 사진 (6)
        • Study (21)
          • 일상·회고 (2)
          • Tools (4)
          • Computer Science (4)
          • Computer Security (1)
          • Java (6)
          • Python3 (2)
          • Android (1)
          • CodeSignal (0)
          • 임시 (1)
        • Backend (16)
          • Data Structure (0)
          • Database (2)
          • WAS with JavaEE (10)
          • WAS with Spring Boot (0)
          • Ubuntu for Raspberry Pi (4)
          • Apache Spark 2.0 (0)
        • Frontend (22)
          • HTML5 (0)
          • CSS3 (0)
          • JavaScript (11)
          • TypeScript (0)
          • React·React Native (11)
      • 트위터
      • 인스타그램
      Today
      Yesterday
      Total
        • [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

          관련글 관련글 더보기

          • [정보보호개론] Java로 AES 복호화 프로그램 만들기
          • [Java] 클래스 메소드 vs 인스턴스 메소드 (자바 static 관련)
          • [Java] 자바 스윙 JTextField 꾸미기
          • [Java] 자바 스윙 JButton 꾸미기 (둥근 버튼)

          댓글

        반응형

        인기포스트

        ABOUT ME

        LINK

        ADMIN

        admin 글쓰기
        Designed by Gabriel Ju Hyun Yoon, 2021

        티스토리툴바