Java:对象声明
在Java中声明对象时:Java:对象声明,java,object,initialization,Java,Object,Initialization,在Java中声明对象时: Runtime rt = Runtime.getRuntime(); Process lsProc = rt.exec("who -q"); InputStream in = lsProc.getInputStream(); 为什么lsproc没有这样声明->Process lsproc=new Process? 对象lsproc如何保存另一个函数的值?因为它返回一个进程。看 这句话本身就意味着 这意味着Runtime类的exec方法返回Process类型的实例IsP
Runtime rt = Runtime.getRuntime();
Process lsProc = rt.exec("who -q");
InputStream in = lsProc.getInputStream();
为什么lsproc
没有这样声明->Process lsproc=new Process
?
对象
lsproc
如何保存另一个函数的值?因为它返回一个进程。看
这句话本身就意味着
这意味着Runtime
类的exec
方法返回Process
类型的实例IsProc
看这张照片
它返回类型为Process
的ProcessBuilder
实例,这意味着Process是一个抽象类,ProcessBuilder
是它的具体类
现在你可能会遇到一个问题
Process pro = new ProcessBuilder(..);
是有效的,这将引导您阅读多态性。方法rt.exec(“who-q”)
可以返回对类型为Process
的实例的引用。它可以通过调用newprocess(..)
(或者实际上,由于Process
是一个抽象类,所以它可以通过创建Process
的子类的实例来创建该实例本身),也可以从其他地方检索它
遵循Runtime.exec(String)
方法的调用链,将导致此调用:
return new ProcessBuilder(cmdarray)
.environment(envp)
.directory(dir)
.start();
start
方法调用ProcessImpl.start
,它实际上创建了Process
实例。这就是方法的returntype的作用……但是当我尝试这样做时:Process lsproc=new Process为什么会出错?@user5444075这是因为无法实例化抽象类。请仔细阅读我的答案。@user5444075,因为Process
是一个抽象类,所以无法实例化。正在实例化的实际类是ProcessImpl
。这意味着我必须间接初始化对象lsproc,对吗?@user5444075否。这是一种直接方式。您只是在其他方法中得到初始化,该方法返回实际的objectProcess不是接口。这是一个抽象类。
Process pro = new ProcessBuilder(..);
return new ProcessBuilder(cmdarray)
.environment(envp)
.directory(dir)
.start();