A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© whocases 黑马帝   /  2012-6-26 18:56  /  2723 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 whocases 于 2012-6-28 18:56 编辑

Runtime rt;                                \\声明一个对象。
rt=Runtime.getRuntime();            \\使用Runtime类的方法创建对象。
为什么不用new来创建,而用方法创建对象?

6 个回复

倒序浏览
本帖最后由 韦念欣 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
这是API对Runtime的说明:
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。 应用程序不能创建自己的 Runtime 类实例。

由上面可以看出:
Java中的Runtime对象并没有提供构造函数,所以无法用new来创建对象,
回复 使用道具 举报
因为 Runtime类封装了运行时的环境,这个java封装的特性。其实java这样做主要是不想你new对象,对象由类自身维护.方便于管理.
      跟单例设计模式的实现差不多,它的构造方法的修饰符是private,外面不能创建对象,只能调用内部方法static修饰调用。
回复 使用道具 举报
Runtime是一个用单例设计模式设计的类,这个类保证了对象在内存中的唯一性,由于这种类的构造函数被私有化,所以对象不能用new来创建,而是用对外提供的方法来获取对象。
回复 使用道具 举报
你仔细看看老毕的视频中有一节讲到了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;
}
}
大致的思路就是这样的,有什么不明白的可以随时找我探讨!
回复 使用道具 举报
每个 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() {}//私有的构造方法
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马