Как выполнить статический блок несколько раз в Java - PullRequest
0 голосов
/ 03 октября 2018

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

public class Hello{
      static{
        System.out.println("helloo...");
      }
}

Я знаю, что статический блок выполняется при загрузке класса.

Но я хочу знать, есть ли способ выполнитьстатический блок несколько раз и как?

Ответы [ 4 ]

0 голосов
/ 04 октября 2018

Выполнение статического блока может быть достигнуто с помощью пользовательского загрузчика классов.

ClassReload.java

    Class<?> load = ClassLoader.getSystemClassLoader().loadClass("com.Hello");
//Assume Hello class is in "com" package 
        load.newInstance().toString();
        URL[] urls = { load.getProtectionDomain().getCodeSource().getLocation() };
        ClassLoader delegateParent = load.getClassLoader().getParent();
        try (URLClassLoader cl = new URLClassLoader(urls, delegateParent)) {
            Class<?> reloaded = cl.loadClass(load.getName());
            reloaded.newInstance().toString();              
            }
            }
        }

См. Документ Oracle для URLClassLoader

0 голосов
/ 03 октября 2018

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

public class Hello{
    public static void hello() {
        System.out.println("helloo...");
    }

    public void someMethod() {

        for(int i= 0; i < 10; i++) {
            hello();
        }
     }
}
0 голосов
/ 03 октября 2018

Вы не можете.Он будет запущен только один раз, когда класс загружен.Есть еще один шанс, что вы можете написать любое количество статических блоков в классе.

[https://beginnersbook.com/2013/04/java-static-class-block-methods-variables/][1]

0 голосов
/ 03 октября 2018

Статический блок запускается при загрузке класса, Вы не можете запустить его несколько раз.

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