Java构造方法私有化-->单例模式-->Runtime类的设计

来源:互联网 发布:大数据 传统零售业 编辑:程序博客网 时间:2024/06/03 17:43

在学了Java这么久的过程中,发现构造方法私有化,即用private修饰符修饰构造方法,那么这个类就不能用new进行实例化,否则会报错。既然不能用new进行实例化,那么能产生该类的实例么?这种设计难道没有意义么?其实这就是设计模式中的单例模式的设计。

Java中不用实例化就能调用的方法可以用static修饰,private修饰符仅有在该类中能访问,因此可以提供static的方法,返回该类的实例(getInstance),这样就能实例化该类,同时能保证单例的设计,即只存在一个实例,这样的设计在开发中的特定情况下具有重要的意义,如Java中Runtime类的设计,每个应用程序对应于一个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() {}//私有的构造方法

}

以上就是Runtime的单例设计。

关于Runtime一些别的常见用法如下:

1)、在单独的进程中执行指定的字符串命令。(下例打开系统中的计算器,停留两秒,然后关闭。)

import java.io.IOException;
public class RuntimeTest {
public static void main(String[] args) {
Runtime run = Runtime.getRuntime();
Process pro = null;
try {
pro = run.exec("calc");//相当于运行calc命令
} catch (IOException e) {
e.printStackTrace();
}
try {
Thread.sleep(2000);//当前线程停留两秒
} catch (InterruptedException e) {
e.printStackTrace();
}
pro.destroy();
run.exit(1);// System.exit()实际上是调用此方法
}
}

结果如下:

2)、用于计算耗费的系统内存。

public class RuntimeTest1 {
public static void main(String[] args) {
Runtime run = Runtime.getRuntime();
System.out.println("试图使用的最大内存:" + run.maxMemory()/1024/1024.0+ "MB");
System.out.println("总共内存:" + run.totalMemory()/1024/1024.0+ "MB");
System.out.println("空闲内存:"+run.freeMemory()/1024/1024.0+ "MB");
String str = "" ;
for (int i = 0; i<15000; i++){
str += i;
}
System.out.println("产生垃圾后的空闲内存:"+run.freeMemory()/1024/1024.0+ "MB");
run.gc();
System.out.println("GC垃圾收集后的空闲内存:"+run.freeMemory()/1024/1024.0+ "MB");

}
}

结果如下:

完。