Как выполнить статический блок после основного метода в Java? - PullRequest
0 голосов
/ 05 февраля 2019

Я хочу "выполнить" метод main () перед вызовом статического блока.Согласно правилам Java, статический блок будет выполняться при загрузке класса, а затем вызывается метод main ().Есть ли способ сначала «выполнить» метод main, а затем статический блок?

public class StaticDemo {
    static {
        System.out.println("in  static block");
    }

    public static void main(String  args[]){
        System.out.println("in main method");
    }
}

Вывод будет ...

in  static block
in main method

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

import com.sun.javaws.Main;

public class StaticDemo {
        static {
        main(null);
        System.out.println("in  static block");
    }

    public static void main(String  args[]){
        System.out.println("in main method");
    }
}

Вывод будет ...

in main method
in  static block
in main method

Мой ожидаемый вывод - ....

in main method
in  static block

Ответы [ 2 ]

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

Есть ли способ сначала "выполнить" основной метод, а затем статический blk

Нет.НетНе , что статический блок.

Предполагая, что вы хотите выполнить некоторый код после завершения метода main, вы можете:

  • поместить код вметод, который вы вызываете в конце метода main,
  • помещает код в необработанный обработчик исключений для основного потока и намеренно генерирует исключение в main() или
  • поместите код в ловушку отключения.

Вы также можете поместить код в статический блок для другого класса и динамически загрузить / инициализировать его или вызвать его вРазличные пути.Но вызвать метод проще.

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

Это невозможно для статического блока, но вы можете использовать блок инициализатора экземпляра:

открытый класс Loader {

{
    System.out.println("in instance initializer");
}

public static void main(final String[] args) {
    System.out.println("in main method");
    new Loader();
}

}

...