Статические методы в приватном классе - PullRequest
0 голосов
/ 09 февраля 2019

Я недавно начал изучать Java и его мой первый OOP язык. Я читал, что static methods не требует, чтобы экземпляр класса запускался при подаче класса в JVM. Мой вопрос: что произойдет?если static method находится внутри private nested class.он все еще будет работать?

РЕДАКТИРОВАТЬ - Я пытался это не работает, я хочу знать, что происходит в фоновом режиме.

public class tester{
private class estupid{
    public static void main(String[] args){
        System.out.println("Hello Im a static method of a private class and main too");
    }
}
}

Для людей, голосующих вниз, предложение, Aболее продуктивная деятельность - рассказывать, что не так с фрагментом, спасибо.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Есть много ошибок, которые вы можете просто получить, скомпилировав код.Я предлагаю вам использовать командную строку javac compilation

  1. Если вы компилируете свой код, как он есть

    C:\src>javac tester.java
    tester.java:3: error: Illegal static declaration in inner class tester.estupid
                    public static void main(String[] args) {
                                       ^
      modifier 'static' is only allowed in constant variable declarations
    1 error
    
  2. В соответствии с вышеуказанной ошибкой, сделайтеВаш вложенный класс как статический вложенный класс.Теперь код будет успешно скомпилирован, но при его запуске вы получите ошибку:

    C:\src>javac tester.java
    
    C:\src>java tester
    Error: Main method not found in class tester, please define the main method as:
       public static void main(String[] args)
    or a JavaFX application class must extend javafx.application.Application
    
  3. С вышеприведенной ошибкой вы можете понять, что вы запускаете класс тестера, но он не содержит никаких основныхметод, который ищется JVM.Поэтому добавьте метод main в класс тестера, и да, вы можете вызвать статический метод в static внутреннем классе.Измененный код будет выглядеть следующим образом:

    public class tester {
        private static class estupid {
            public static void main(String[] args) {
                System.out.println("Hello Im a static method of a private class and main too");
            }
        }
    
    
    <pre><code>public static void main(String[] args) {
        estupid.main(args);
    }
    </code>
    }

После компиляции и запуска вышеуказанного кода

C:\Himanshu\GitHub\hsingh-learning\src>javac tester.java

C:\Himanshu\GitHub\hsingh-learning\src>java tester
Hello Im a static method of a private class and main too

Это просто дляисправьте ваш код и сделайте его компилируемым и работоспособным, НО писать основной метод во вложенном классе не рекомендуется.Другое дело, что вы создаете закрытый вложенный класс, поэтому вы делаете его недоступным извне класса удержания (класс тестера в вашем случае).Класс tester общедоступен и доступен для JVM, но вложенный класс помечен как закрытый, поэтому к нему нельзя получить доступ.

Это не означает, что вы не можете вызывать основной статический метод вложенного класса из JVM.Сделайте ваш вложенный класс общедоступным.

public class tester {
    public static class estupid {
        public static void main(String[] args) {
            System.out.println("Hello Im a static method of a private class and main too");
        }
    }
}

Скомпилируйте его, чтобы получить 2 файла классов.1. tester.class 2. tester $ estupid.class

Запустите второй тестер $ estupid, содержащий основной метод (который требуется JVM)

C:\Himanshu\GitHub\hsingh-learning\src>java tester$estupid
Hello Im a static method of a private class and main too
0 голосов
/ 09 февраля 2019

Основной метод должен быть членом публичного класса.Статический метод - это метод, который является потомком самого класса, а не объектом или «экземпляром» этого класса.

...