4

new当您不将结果对象分配给引用时,关键字的用途是什么?

这是样本。

public static void main(String[] args) {ample.
    Display display = new Display();

    new SWTApp(display);

    display.dispose();
}
4

6 回答 6

10

在您的情况下,构造函数很可能有副作用(在线程中启动应用程序?)并且您只对这种副作用感兴趣。

将其视为调用方法的丑陋方式。

于 2012-07-30T12:14:18.097 回答
4

大概在这种情况下,构造函数SWTApp实际运行应用程序直到它关闭。对我来说,这听起来不是一个伟大的设计,但语言中没有任何东西可以真正阻止它。

于 2012-07-30T12:12:58.557 回答
2

当您不将结果对象分配给引用时,新关键字的用途是什么

当您只想调用类的某个方法一次并且不想存储对象的引用以供将来使用时。在下面的示例中,我只对调用类的方法showMessage()感兴趣Display

public class XYTest {

    public static void main(String[] args) {
        new Display().showMessage();
    }
}

class Display {

    public void showMessage() {
        System.out.println("Hey! I am here.");
    }
}
于 2012-07-30T12:22:57.497 回答
1

如果您只想创建一个新对象但不需要为该对象设置任何内容,则无需将其分配给变量。

于 2012-07-30T12:08:00.263 回答
0

在 Java 中,new 关键字用于创建对象。现在创建对象时会发生什么,JVM 为所有成员变量和方法分配内存,并调用构造函数。在正常情况下,您希望将变量引用存储到某个对象,但是如果您知道构造函数已经完成了您想要从新对象中获得的任何内容,则可以进行您提到的初始化(尽管这是一个非常糟糕的做法)

例如

public class PrintFile{
public PrintFile(String fileName)
{
//code to print the file on printer or file system
}
}

现在我们可以简单地说

new PrintFile(filetoprint);

无需保存对象引用,因为工作是在构造函数本身中完成的。

于 2012-07-30T12:26:39.203 回答
0

标准小部件工具包 (SWT) 是用于 Java 编程语言的图形小部件工具包。

无论平台如何,图形应用程序都有离散的入口点,这些入口点创建可视资源和队列机制以在这些资源之间触发事件并因此在应用程序中调用控制器对象。(例如按钮动作事件、窗口打开事件)

您不需要保存对这些对象之一的引用这一事实并不重要,因为像这样的构造函数通常是您不需要直接处理的应用程序入口点的表示。

构造函数不操作您传递给它的对象,它接受它作为在上下文中执行应用程序的起点,可能使用您传入的初始状态作为初始窗口或初始配置。

以下是您好奇的构造函数的代码:

public SWTApp(Display display) {

    Shell shell = new Shell(display);
    shell.setText("Center");
    shell.setSize(250, 200);

    center(shell);

    shell.open();

    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }
}

构建您的应用程序,不要担心这一点,它不是与用户相关的实例,它是应用程序入口点。顺便说一句,这个图形应用程序的初始构造看起来就像几乎任何语言的图形应用程序的所有其他入口点。

干杯!

于 2012-07-30T13:46:07.513 回答