Java:对象声明

时间:2015-10-14 07:59:09

标签: java object initialization

在Java中声明对象时:

Runtime rt = Runtime.getRuntime();
Process lsProc = rt.exec("who -q");
InputStream in = lsProc.getInputStream();

为什么lsproc没有这样声明 - > Process lsproc = new Process? 对象lsproc如何保存另一个函数的值?

3 个答案:

答案 0 :(得分:2)

 Process lsProc = rt.exec("who -q");

仅此一行意味着,

这意味着exec类的方法Runtime返回类型为IsProc的实例Process

查看source code of exec method

public Process exec(String[] cmdarray, String[] envp, File dir)
609        throws IOException {
610        return new ProcessBuilder(cmdarray)
611            .environment(envp)
612            .directory(dir)
613            .start();
614    }

它返回的ProcessBuilder实例的类型为Process,这意味着Process是一个抽象类,ProcessBuilder是它的具体类。

现在您可能会遇到一个如何

的问题
Process pro = new ProcessBuilder(..); 

是有效的,可以让您了解多态性。

答案 1 :(得分:0)

因为它返回Process。见here #exec(java.lang.String)

答案 2 :(得分:0)

方法rt.exec("who -q")可以返回对Process类型实例的引用。它可以通过调用new Process (..)来创建该实例本身(或者实际上,因为Process是一个抽象类,通过创建一个Process的子类的实例),或者它可以检索它来自其他地方。

Runtime.exec(String)方法的调用链之后会导致此调用:

    return new ProcessBuilder(cmdarray)
        .environment(envp)
        .directory(dir)
        .start();

start方法调用实际创建ProcessImpl.start实例的Process