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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黄丽慧 于 2012-7-10 10:31 编辑

在IO的视频中老师用一个视频讲了runtime类,我有一些困惑,希望大家能帮忙解决。
class  RuntimeDemo
{
        public static void main(String[] args) throws Exception
        {
                Runtime r = Runtime.getRuntime();//这里创建了一个runtime对象,一个类能创建自己的 Runtime 类实例吗?为什么?
                Process p = r.exec("notepad.exe  SystemDemo.java");
               
                //Thread.sleep(4000);
                //p.destroy();

        }
}

每一个程序是不是都有 Runtime 类实例,这个实例是谁创建的啊?是怎么创建的?


。。。。。。。。。。。
看了楼下的回答,我又看了一遍题目,发现是我没有把我的问题表达好:

在JDK API中有这么一句话,每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。那么这个runtime实例是谁来获取的,
调用了哪些方法?我真的是相当困惑,有哪位理解能力好的,能看出来我真正要表达的问题,帮我表达一下吧。。。。





9 个回复

正序浏览
Runtime 类由系统也就是java虚拟机的运行的时候创建,getRuntime()可不是创建!
回复 使用道具 举报
韦念欣 发表于 2012-7-9 13:05
很简单,Runtime这个类在java.lang包中,在进行Java编程时,该包是必不可少的,在编译时,java.lang包被 ...

你解释得很清楚,我理解了。不过按你这种说法,这个runtime类实例是被动创建的,而这句话读起来的感觉是主动创建的,是使应用程序能够与其运行的环境相连接而建立的。
回复 使用道具 举报
黄丽慧 发表于 2012-7-9 12:36
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。那这句话是怎么理解 ...

很简单,Runtime这个类在java.lang包中,在进行Java编程时,该包是必不可少的,在编译时,java.lang包被自动导入源文件,你不写,JAVA编译器自动帮你写,所以在运行的时候,这个包中的类都会被加载到内存中。

既然每个JAVA程序都要使用这个包,那么每个JAVA程序运行时都会加载Runtime类,又因为Runtime类是单例类,所以每个Java应用程序都会有一个Runtime类实例。
回复 使用道具 举报
韦念欣 发表于 2012-7-9 12:07
高原同学说的没错,这些都是JVM干的事,拿来用就行,如果楼主硬要知道怎么申请出来的,可以去看一下JVM的 ...

每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。那这句话是怎么理解的啊
回复 使用道具 举报
高原 发表于 2012-7-9 11:53
……你问的是Runtime实例是由谁来获取的?
当你要使用Runtime类的时候,Runtime类就会加载到内存中,一旦 ...

高原同学说的没错,这些都是JVM干的事,拿来用就行,如果楼主硬要知道怎么申请出来的,可以去看一下JVM的源代码,
回复 使用道具 举报
黄丽慧 发表于 2012-7-9 11:40
你说的这些我都懂,runtime类将自己的构造函数私有化了,只对外提供了getRuntime方法来获取对象。你再看 ...

……你问的是Runtime实例是由谁来获取的?
当你要使用Runtime类的时候,Runtime类就会加载到内存中,一旦被加载,它的静态成员变量就自动初始化了,那个实例对象自己就new出来了,这都是JVM干的事,你要用那个实例的时候拿来用就行了嘛,JVM帮你new对象,你通过getRuntime拿来用
我就只能解释成这样了
回复 使用道具 举报
高原 发表于 2012-7-9 11:22
Runtime类是典型的单例设计模式的体现,哥们你看到Runtime的时候,想必已经看过毕老师的单例设计模式的视频 ...

你说的这些我都懂,runtime类将自己的构造函数私有化了,只对外提供了getRuntime方法来获取对象。你再看看我的题目,看能不能看懂我真正要问的问题。。。。
回复 使用道具 举报
Runtime类是典型的单例设计模式的体现,哥们你看到Runtime的时候,想必已经看过毕老师的单例设计模式的视频了吧
你看看Runtime类的源代码就可以明白了:
  1. private static Runtime currentRuntime = new Runtime();        //饿汉式,提前加载

  2.     /**
  3.      * Returns the runtime object associated with the current Java application.
  4.      * Most of the methods of class <code>Runtime</code> are instance
  5.      * methods and must be invoked with respect to the current runtime object.
  6.      *
  7.      * @return  the <code>Runtime</code> object associated with the current
  8.      *          Java application.
  9.      */
  10.     public static Runtime getRuntime() {         //对外提供获取实例的方法
  11.         return currentRuntime;
  12.     }

  13.     /** Don't let anyone else instantiate this class */
  14.     private Runtime() {}                                 //私有的构造方法
复制代码
明白了吧,getRuntime()返回的就是Runtime自己类内部的那个对象,而外界是不可以new出Runtime对象的。另外再附上饿汉式单例模式的标准代码吧
  1. //饿汉式
  2. public class Single1 {
  3.         private static Single1 instance = new Single1();
  4.         private Single1() {}
  5.         public static Single1 getInstance() {
  6.                 return instance;
  7.         }
  8. }
复制代码
如果你还没有看单例设计模式,可以看看毕老师第6天的视频

点评

Runtime类实例是在JVM加载这个类时创建的,是通过静态变量初始化代码new出来的,是饿汉式的哦!  发表于 2012-7-9 12:12

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我之前也有LZ这样的问题!

一句话:
Runtime是一个单例模式类。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马