Я хочу запустить этот код без создания экземпляра класса (объекта). Является ли это возможным? почему бы и нет? - PullRequest
0 голосов
/ 10 января 2019
public class Constructor_benifit{
public static void main(String[] args){
    System.out.println("In primary Thread");
    A a=new A("Test string for secondary thread");
    Thread thread_object=new Thread(a);
    thread_object.start();
}
static class A implements Runnable
{
    String to_print;
    public A(String to_print){
        this.to_print=to_print;
    }
    public void run(){
        System.out.println(to_print);
    }

}}

Я хочу запустить этот код без создания объекта ... Я сделал класс A статическим, чтобы вызывать его без объекта, но до сих пор не знаю, как его вызвать. Этот код работает нормально. Я просто хотел узнать, может ли какой-нибудь другой метод выполнить этот код простым способом?

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Я просто хотел узнать, может ли какой-нибудь другой метод выполнить этот код простым способом?

Если вы просто хотите выполнить его простым способом, вы можете использовать Лямбда-выражения в Java 8

public class TestClass{
    public static void main(String[] args){
        System.out.println("In primary Thread");
        String to_print = "Test string for secondary thread";
        Thread thread_object=new Thread(()->System.out.println(to_print));
        thread_object.start();
    }
}
0 голосов
/ 10 января 2019

Нет, вы не можете запустить поток без создания объекта.

Реализуя Runnable, вы должны переопределить этот метод:

public void run(){

И этот метод уже был определен как виртуальный (нестатический) в интерфейсе Runnable.

Если вы хотите создать поток без реализации интерфейса Runnable, вам следует расширить класс Thread. Который не предоставляет статические методы для запуска и запуска потока. Снова вам нужно будет создать экземпляр класса A.

Если вам просто нужно избежать создания дополнительного объекта, вы можете использовать этот код. Мы снова создаем объект. Но только один объект вместо двух.

public class Constructor_benifit{
    public static void main(String[] args){
        System.out.println("In primary Thread");
        Thread thread_object=new A("Test string for secondary thread");
        thread_object.start();
    }
    static class A extends Thread
    {
        private String to_print;
        public A(String to_print){
            this.to_print=to_print;
        }
        public void run(){
            System.out.println(to_print);
        }

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