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

本文探讨了Java中构造方法私有化如何实现单例模式,并以Runtime类为例,阐述了其设计意义。Runtime类为每个Java应用程序提供了一个实例,实现了静态方法获取唯一实例的单例设计。此外,还展示了Runtime类在执行命令和监控内存使用方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学了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");

}
}

结果如下:

完。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值