黑马程序员技术交流社区

标题: Runtime类的对象创建的问题 [打印本页]

作者: whocases    时间: 2012-6-26 18:56
标题: Runtime类的对象创建的问题
本帖最后由 whocases 于 2012-6-28 18:56 编辑

Runtime rt;                                \\声明一个对象。
rt=Runtime.getRuntime();            \\使用Runtime类的方法创建对象。
为什么不用new来创建,而用方法创建对象?
作者: 韦念欣    时间: 2012-6-26 18:59
本帖最后由 韦念欣 于 2012-6-26 19:02 编辑

Runtime属于单例类,采用单例模式,不能new,只能通过方法获取对象。
单例类最重要的特点是构造方法私有化,这样在类得外部就不能构造和创建类得实例。

下面是Runtime类的源码
通过源码,我们就可以看出它确实是单例类。
  1. public class Runtime {
  2.           private static Runtime currentRuntime = new Runtime();

  3.                /**
  4.                 * Returns the runtime object associated with the current Java application.
  5.                 * Most of the methods of class <code>Runtime</code> are instance
  6.                 * methods and must be invoked with respect to the current runtime object.
  7.                 *
  8.                 * @return the <code>Runtime</code> object associated with the current
  9.                 * Java application.
  10.                 */
  11.           public static Runtime getRuntime() {
  12.                 return currentRuntime;
  13.           }
  14. ……
  15. }
复制代码

作者: 邱国    时间: 2012-6-26 19:06
这是API对Runtime的说明:
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。 应用程序不能创建自己的 Runtime 类实例。

由上面可以看出:
Java中的Runtime对象并没有提供构造函数,所以无法用new来创建对象,
作者: 邹颖    时间: 2012-6-26 19:12
因为 Runtime类封装了运行时的环境,这个java封装的特性。其实java这样做主要是不想你new对象,对象由类自身维护.方便于管理.
      跟单例设计模式的实现差不多,它的构造方法的修饰符是private,外面不能创建对象,只能调用内部方法static修饰调用。
作者: 李伟    时间: 2012-6-26 19:15
Runtime是一个用单例设计模式设计的类,这个类保证了对象在内存中的唯一性,由于这种类的构造函数被私有化,所以对象不能用new来创建,而是用对外提供的方法来获取对象。
作者: 游洪波    时间: 2012-6-26 19:46
你仔细看看老毕的视频中有一节讲到了Rumtime类,Runtime是典型的一个单例模式,也就是只能创建一次对象。所以Runtime不可以再外部使用new关键字再创建,而是可以使用它本身提供的方法来获取Runtime的实例。所以你在上边看到的是Runtime ru=Runtime.getRuntime();
下边是Runtime类的大致思路
public class Runtime{
    private Runtime runtime =new Runtime()
   private Runtime(){

}
public Runtime getRuntime(){
    return this.Runtime;
}
}
大致的思路就是这样的,有什么不明白的可以随时找我探讨!
作者: Forever。    时间: 2012-6-26 22:13
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。

既然是应用程序去连接运行环境的,一定是通过一个对象去和运行环境交流。就像io流,你复制一个文件需不需要建立两个outputstream呢?
所以在这里runtime类将构造函数私有化,搞了一个单例模式。这样你用的永远是那一个对象实例。

部分Runtime源码如下:
public class Runtime {
    private static Runtime currentRuntime = new Runtime();//静态属性成员,代表实例
    /**
     * @return  the <code>Runtime</code> object associated with the current
     *          Java application.
     */
    public static Runtime getRuntime() {//静态方法,获得Runtime实例
return currentRuntime;
    }

    /** Don't let anyone else instantiate this class */
    private Runtime() {}//私有的构造方法
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2