System 类
代表的是当前 Java 程序运行的平台(操作系统),该类被关键字 final 修饰,即该类不能够派生子类,同时该类的构造器被关键字 private 修饰,因此不能够创建 System 类型的实例对象。
System 类中定义声明的都是 static 关键字修饰的静态成员变量和静态成员方法,可以直接通过类名的方式去访问。
常用方法
(1)long currentTimeMillis()
返回当前系统时间对应的时间戳,单位是毫秒。
示例:
public class Test {public static void main(String[] args) {System.out.println(System.currentTimeMillis());}
}
打印结果:
(2)long nanoTime()
返回当前系统时间对应的时间戳,单位是纳秒。
(3)void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
数组拷贝操作,src 表示源数组对象,srcPos 表示源数组对象的起始位置,dest 表示目标数组对 象,destPos 表示目标数组对象的起始位置,length 表示要拷贝的元素的个数,即从源数组对象 src 的 srcPos 位置开始,拷贝 length 个元素到目标数组 dest 的 destPos 位置。
示例:
import java.util.Arrays;public class Test {public static void main(String[] args) {//源数组int[] src = {123,245,678,36,568,36,5,7,457};//目标数组int[] dest = new int[20];//输出 copy 前的目标数组System.out.println(Arrays.toString(dest));//把源数组中从索引位置 3 开始,copy 5 个元素到目标数组索引为 10 的位置System.arraycopy(src, 3, dest, 10, 5);//输出 copy 后的目标数组System.out.println(Arrays.toString(dest));}
}
打印结果:
(4)Properties getProperties()
返回所有的系统属性,返回值是一个 Properties 集合。
示例:
import java.util.Map;
import java.util.Properties;public class Test {public static void main(String[] args) {Properties properties = System.getProperties();//对 properties 集合进行遍历输出for (Map.Entry<Object, Object> entry : properties.entrySet()) {System.out.println("系统属性:" + entry.getKey() + ",属性值:" +entry.getValue());}}
}
打印结果:
(5)String getProperty(String key)
返回系统指定属性 key 对应的属性值。
(6)String getProperty(String key, String def)
返回系统指定属性 key 对应的属性值,如果找到了系统指定属性 key 对应的属性值则直接返回,如果找不到,即找到的是 null,则返回默认的提示信息 def。
(7)String getenv(String name)
返回指定的环境变量 name 的值。
示例:
System.out.println(System.getenv("path"));
打印结果:
(8)java.util.Map getenv()
返回所有的环境变量及其对应的值的键值对构成的 Map 集合。
(9)void exit(int status)
终止当前正在运行的 Java 虚拟机,该方法内部间接调用了 Runtime 类型实例对象的 exit(status)。
示例:
public class Test {public static void main(String[] args) {for(int i = 0;i < 1000;i++) {if(i == 300) {// status 为 0 的时候,表示正常退出程序,即结束当前正在运行的 Java 虚拟机;// status 为 非0 的整数时候,表示非正常退出程序;System.exit(0); //终止虚拟机的运行}System.out.println(i);}}public static void exit(int status) {Runtime.getRuntime().exit(status);}}
(10)void gc()
运行垃圾回收器,释放垃圾空间,该方法内部间接调用了 Runtime 类型实例对象的 gc()。
源码:
public static void gc() {Runtime.getRuntime().gc();
}
Runtime 类
代表的是当前 Java 程序的运行环境,每一个 Java 程序的运行都会有一个与之对应的唯一的 Runtime 类型的实例对象。
Runtime 类的构造器被关键字 private 修饰,即我们不能够直接创建 Runtime 类型的实例对象,同时在 Runtime 类中声明定义了一个 private 修饰的 Runtime 类型的静态成员变量 currentRuntime:
private static Runtime currentRuntime = new Runtime();
该静态成员变量 currentRuntime 会在 Runtime 类第一次被使用的时候初始化,这就是典型的单例模式。
Runtime 类中提供了一个静态成员方法 Runtime getRuntime() 用来返回 Runtime 类型的实例对象,该方法的源码如下:
public static Runtime getRuntime() {return currentRuntime;
}
getRuntime() 方法的源码中返回的是 currentRuntime 变量指向的 Runtime 类型的实例对象,即把Runtime 类型的唯一实例返回。
常用方法
(1)void exit(int status)
终止当前正在运行的 Java 虚拟机,System 类中的 exit(int status)方法的底层就是间接的调用了 Runtime 类型实例对象的 exit(status)。
(2)Process exec(String command) throws IOException
单独启动一个线程来运行指定的命令。
示例:
import java.io.IOException;
import java.util.Scanner;public class Test {public static void main(String[] args) throws IOException {System.out.println("1、QQ音乐");System.out.println("2、腾讯视频");System.out.print("请选择打开应用:");Scanner scanner = new Scanner(System.in);if(scanner.nextInt() == 1) {Runtime.getRuntime().exec("D:\\Program Files (x86)\\Tencent\\QQMusic\\QQMusic2039.19.59.45\\QQMusic.exe");} else if (scanner.nextInt() == 2){Runtime.getRuntime().exec("D:\\Users\\Lenovo\\LenovoSoftstore\\Install\\tengxunshibin\\QQLive.exe");}else {System.out.println("暂无此选项");}}
}
打印结果:
(3)int availableProcessors()
可用于 JVM 的处理器的数量。
(4)long maxMemory()
返回 JVM 能够从操作系统那挖掘使用的最大内存空间。
(5)long totalMemory()
当前 JVM 使用的总内存,程序实际运行的时候总是从操作系统那慢慢的挖掘内存,即用多少挖掘多少,一般是随着程序运行的过程中使用的内存越来越大,最终达到 maxMemory()。
(6)long freeMemory()
表示 JVM 从操作系统那挖掘过来的没有使用的内存。
(7)void gc()
运行垃圾回收去,释放垃圾空间,System 类中的 gc() 方法的底层就是调用的 Runtime 类型实例对象的 gc() 方法。
什么是 gc?java 是如何处理的?
GC(Garbage Collector):垃圾收集器,它可以用来释放垃圾空间所占用的内存。 Java 中 GC 有两种操作方式:
(1)由 JVM 不定期的执行 GC 操作。
(2)由程序员手动的调用 Runtime 类型实例对象的 gc() 方法或者 System 类中的 gc() 方法进行垃圾空间的释放。