有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

这个java程序是如何工作的?

我不理解下面的程序Runnable是一个接口,任何接口中都不会有构造函数。在这个程序中,new Runnable(){...}是如何工作的

public class Threads {
    public static void main (String[] args) {
        new Thread(new Runnable() {
            public void run() {
                System.out.print("bar");
        }}).start();    
    }
}

共 (4) 个答案

  1. # 1 楼答案

    下面的代码通过重写run()方法为Runnable接口实现的线程实例化一个匿名内部类。有关内部类的详细信息,请参阅this链接

       new Thread(new Runnable() {
    public void run() {
    System.out.print("bar");
    }}).start();
    
  2. # 2 楼答案

    new Thread()需要一个可运行的类。所以你用anonymous inner class来实现这一点。下面是做同样事情的更详细的方式:

    public class Threads {
        public static void main (String[] args) {
            MyRunnable runnable = new MyRunnable();
            Thread thread = new Thread(runnable);
            thread.start();
        }
    }
    
    class MyRunnable implements Runnable {
        public void run() {
            System.out.print("bar");
        }
    }
    
  3. # 3 楼答案

    首先,这个程序正在从主方法中实例化一个新线程,将文本打印到控制台

    现在,线程类构造函数接受一个实现Runnable接口的类。我们可以通过两种方式向线程构造函数提供一个实例。我们可以使用一个实现Runnable的具体类,或者提供一个匿名的内部类。在这种情况下,你要做的是后者

    根据Oracle关于匿名内部类的文档。匿名类使您的代码更加简洁。它们使您能够同时声明和实例化一个类。它们与本地类类似,只是没有名称。如果只需要使用一次本地类,请使用它们

     new Thread(new Runnable() {
         public void run() {
             System.out.print("bar");
         }
     }).start();
    

    因此,您可以将其视为传递一个Runnable接口类,该接口通过重写run方法并在构造函数参数中定义它来满足约定

  4. # 4 楼答案

    它正在此处创建匿名类的实例:

    new Runnable() {
    

    而不是界面可运行