Статические методы в частном классе

Недавно я начал изучать Java, и это мой первый язык OOP. Я читал, что static methods не требует, чтобы класс создавался, когда они запускаются, когда вы загружаете класс в JVM. Мой вопрос: что произойдет, если staticmethod находится внутри 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");
    }
}
}

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

почему бы не попробовать?

Kartik 09.02.2019 05:55

Попробовал, не запустилось, хотел узнать, что происходит в фоновом режиме.

Mrak Vladar 09.02.2019 05:56

когда вы загружаете классы в JVM, он автоматически вызывает только статический метод main(String []args), который является основной точкой входа компилятора. остальные статические методы не вызываются автоматически. их нужно вызывать по ссылке на класс без создания экземпляра класса. как и статические переменные, статические методы также имеют одни и те же данные для всех экземпляров.

JAMSHAID 09.02.2019 06:00

Ваш вопрос не ясен. Статические методы запускаются при их вызове. «кормить jvm» не имеет смысла. Итак, когда у вас уже есть код, рассмотрите возможность редактирования вашего вопроса, чтобы он содержал минимальный воспроизводимый пример.

GhostCat 09.02.2019 06:00

Будет лучше, если вы приложите фрагмент кода, чтобы показать, что и как вы делаете.

Ken Bekov 09.02.2019 06:00

Как вы пытались это запустить? По крайней мере, вам нужно будет указать правильное имя класса. Возможно, java tester.estupid сработает. Но вложенный класс, вероятно, также должен был быть public (смысл создания вещей private в том, что они не может просто используются извне).

Thilo 09.02.2019 06:02

как насчет сейчас @KenBekov

Mrak Vladar 09.02.2019 06:03

Ваш фрагмент неполный. Как вы пытаетесь вызвать этот метод?

Ken Bekov 09.02.2019 06:05

Я хотел посмотреть, запускается ли статический метод в приватном классе при запуске кода. Поскольку у вас не может быть приватного высшего класса, я объявил приватный вложенный класс, а затем скомпилировал код с помощью javac tester.java.

Mrak Vladar 09.02.2019 06:08

Ваш код действителен, не знаю, что вы хотите узнать больше ??

Vishwa Ratna 09.02.2019 06:16
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
10
520
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Ответ принят как подходящий

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

  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. Итак, добавьте основной метод в класс тестера, и да, вы можете вызывать статический метод в статическом внутреннем классе. Измененный код будет таким, который будет работать правильно:

    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");
            }
        }
    
    
    
    public static void main(String[] args) {
        estupid.main(args);
    }
    
    }

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

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

Это просто для того, чтобы исправить ваш код и сделать его компилируемым и работоспособным, НО писать основной метод во вложенном классе не рекомендуется. Другое дело, что вы создаете частный вложенный класс, поэтому вы делаете его недоступным из-за пределов удерживающего класса (класса тестировщика в вашем случае). класс тестера является общедоступным и доступен для 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. тестер.класс 2. тестер$estupid.класс

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

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

Другие вопросы по теме