Недавно я начал изучать 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");
}
}
}
Для тех, кто проголосовал против, предложение, более продуктивной деятельностью было бы рассказать, что не так с фрагментом, спасибо.
Попробовал, не запустилось, хотел узнать, что происходит в фоновом режиме.
когда вы загружаете классы в JVM, он автоматически вызывает только статический метод main(String []args), который является основной точкой входа компилятора. остальные статические методы не вызываются автоматически. их нужно вызывать по ссылке на класс без создания экземпляра класса. как и статические переменные, статические методы также имеют одни и те же данные для всех экземпляров.
Ваш вопрос не ясен. Статические методы запускаются при их вызове. «кормить jvm» не имеет смысла. Итак, когда у вас уже есть код, рассмотрите возможность редактирования вашего вопроса, чтобы он содержал минимальный воспроизводимый пример.
Будет лучше, если вы приложите фрагмент кода, чтобы показать, что и как вы делаете.
Как вы пытались это запустить? По крайней мере, вам нужно будет указать правильное имя класса. Возможно, java tester.estupid сработает. Но вложенный класс, вероятно, также должен был быть public (смысл создания вещей private в том, что они не может просто используются извне).
как насчет сейчас @KenBekov
Ваш фрагмент неполный. Как вы пытаетесь вызвать этот метод?
Я хотел посмотреть, запускается ли статический метод в приватном классе при запуске кода. Поскольку у вас не может быть приватного высшего класса, я объявил приватный вложенный класс, а затем скомпилировал код с помощью javac tester.java.
Ваш код действителен, не знаю, что вы хотите узнать больше ??




Основной метод должен быть членом открытого класса. Статический метод — это метод, который является потомком самого класса, а не объектом или «экземпляром» этого класса.
Есть много ошибок, которые можно получить, просто скомпилировав код. Я предлагаю вам использовать компиляцию javac из командной строки
Если вы скомпилируете свой код как есть
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
В соответствии с приведенной выше ошибкой сделайте свой вложенный класс статическим вложенным классом. Теперь код будет успешно скомпилирован, но при его запуске вы получите ошибку:
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
С приведенной выше ошибкой вы можете понять, что вы используете класс тестера, но он не содержит основного метода, который ищет 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
почему бы не попробовать?