System类
getProperties()方法
- System类的getProperties()方法用于获取当前系统的全部属性,该方法会返回一个Properties对象,其中封装了系统的所有属性,这些属性都是以键值对的形式存在的
- 方法全名:static Properties getProperties()
package com.sgl;
import java.util.Properties;
import java.util.Set;
public class Test {
public static void main(String[] args) {
//获取当前系统属性
Properties properties = System.getProperties();
System.out.println(properties);
//获取所有系统的key(属性名),返回Set对象
Set<String> peopertyNames = properties.stringPropertyNames();
for (String key : peopertyNames) {
//获取当前见key(属性名)所对应的值(属性值)
String value = System.getProperty(key);
System.out.println(key+"---->"+ value);
}
}
}
/*
代码简述:
首先通过System的getProperties()方法获取封装系统了系统的Properties集合,然后对Properties集合进行迭代,将系统所有的键以及对应的值打出来
*/
运行结果:
//运行结果复制部分
java.runtime.name---->Java(TM) SE Runtime Environment
sun.boot.library.path---->F:\environment\java\jdk1.8\jre\bin
java.vm.version---->25.301-b09 //JVM版本号java.vm.version---->25.301-b09
java.vm.vendor---->Oracle Corporation
java.vendor.url---->http://java.oracle.com/
path.separator---->;
java.vm.name---->Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg---->sun.io
user.script---->
user.country---->CN //用户国家user.country---->CN
sun.java.launcher---->SUN_STANDARD
sun.os.patch.level---->
java.vm.specification.name---->Java Virtual Machine Specification
user.dir---->E:\Idea\JavaSE
java.runtime.version---->1.8.0_301-b09
java.awt.graphicsenv---->sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs---->F:\environment\java\jdk1.8\jre\lib\endorsed
os.arch---->amd64 //操作系统架构os.arch---->amd64
java.io.tmpdir---->C:\Users\shiga\AppData\Local\Temp\
line.separator---->
java.vm.specification.vendor---->Oracle Corporation
user.variant---->
os.name---->Windows 10 //操作系统名称os.name---->Windows 10
sun.jnu.encoding---->GBK
java.library.path---->F:\environment\java\jdk1.8\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;F:\environment\java\jdk1.8\bin;F:\environment\java\jdk1.8\jre\bin;C:\Users\shiga\AppData\Local\Microsoft\WindowsApps;E:\Bandizip\;.
java.specification.name---->Java Platform API Specification
java.class.version---->52.0
sun.management.compiler---->HotSpot 64-Bit Tiered Compilers
os.version---->10.0
user.home---->C:\Users\shiga
user.timezone---->
java.awt.printerjob---->sun.awt.windows.WPrinterJob
file.encoding---->UTF-8
java.specification.version---->1.8
user.name---->shiga
java.class.path----
java.vm.specification.version---->1.8
sun.arch.data.model---->64
java.home---->F:\environment\java\jdk1.8\jre
sun.java.command---->com.sgl.Test
java.specification.vendor---->Oracle Corporation
user.language---->zh
awt.toolkit---->sun.awt.windows.WToolkit
java.vm.info---->mixed mode
java.version---->1.8.0_301
java.ext.dirs---->F:\environment\java\jdk1.8\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
sun.boot.class.path---->F:\environment\java\jdk1.8\jre\lib\resources.jar;F:\environment\java\jdk1.8\jre\lib\rt.jar;F:\environment\java\jdk1.8\jre\lib\sunrsasign.jar;F:\environment\java\jdk1.8\jre\lib\jsse.jar;F:\environment\java\jdk1.8\jre\lib\jce.jar;F:\environment\java\jdk1.8\jre\lib\charsets.jar;F:\environment\java\jdk1.8\jre\lib\jfr.jar;F:\environment\java\jdk1.8\jre\classes
java.vendor---->Oracle Corporation
file.separator---->\
java.vendor.url.bug---->http://bugreport.sun.com/bugreport/
sun.cpu.endian---->little
sun.io.unicode.encoding---->UnicodeLittle
sun.desktop---->windows
sun.cpu.isalist---->amd64
Process finished with exit code 0
currentTimeMills()方法
- currentTimeMills()方法返回一个long类型的值,该值表示当前时间与1970年1月1日0点0时0分0秒之间的时间差,单位毫秒,通常也称作时间戳
package com.sgl;
public class Test {
public static void main(String[] args) {
long startTime = System.currentTimeMillis(); //循环开始时的当前时间
int sum = 0;
for (int i = 0; i < 100000000; i++) {
sum = sum+i;
}
long endTime = System.currentTimeMillis(); //循环结束时的当前时间
System.out.println("程序运行时间为:"+(endTime - startTime)+"毫秒"); //程序运行时间为:28毫秒
//由于处理器性能等原因,程序运行时间也会有所不同
}
}
演示数字求和操作,程序在求和开始和结束时,分别调用了currentTimeMills()方法获得了两个时间戳,两个时间戳之间的差值便是求和操作耗费的时间;
arraycopy(Object src,int srcPos,Object dest,int destPos,int length)方法
- arraycopy()方法是将一个数组中的元素快速拷贝到另一个数组
- src:表示源数组
- dest:表示目标数组
- srcPos:表示源数组中拷贝元素的起始位置
- destPos:表示拷贝到目标数组的其实位置
- length:表示拷贝元素的个数
注意:
- 在进行数组拷贝时,目标数组必须有足够的空间来放拷贝的元素,否则会发生角标越界异常
- 保证源数组元素类型与目标数组元素类型一样,否则程序会出现ArrayStoreException异常
package com.sgl;
public class Test {
public static void main(String[] args) {
long startTime = System.currentTimeMillis(); //循环开始时的当前时间
int[] scrArray = new int[]{101,102,103,104,105,106};//源数组
int[] destArray = new int[]{201,202,203,204,205}; //目标数组
System.arraycopy(scrArray,2,destArray,0,4);
//打印目标数组的元素
for (int i = 0; i < destArray.length; i++) {
System.out.println(i+":"+destArray[i]);
}
long endTime = System.currentTimeMillis(); //循环结束时的当前时间
System.out.println("程序运行时间为:"+(endTime - startTime)+"毫秒"); //程序运行时间为:28毫秒 值不确定
}
}
Runtime类
- Runtime类用于表示Java虚拟机运行时的状态,它用于封装Java虚拟机进程
- 启动Java虚拟机时都会对应一个Runtime实例,并且只有一个实例
- 应用程序不能创建自己的Runtime实例,通过getRuntime()方法获取与之相关的Runtime对象
获取方式如下:
Runtime run = Runtime.getRuntime();
- 由于Runtime类封装了Java虚拟机,因此可以通过该类的实例对象来获取当前虚拟机的相关信息
package com.sgl;
public class Test {
public static void main(String[] args) {
long startTime = System.currentTimeMillis(); //循环开始时的当前时间
Runtime rt = Runtime.getRuntime();
System.out.println("处理器的个数:"
+rt.availableProcessors()+"个");//处理器的个数:16个
System.out.println("空闲内存大小:"
+rt.freeMemory()+"M");//空闲内存大小:244317232M
System.out.println("最大可用内存空间:"
+rt.maxMemory()+"M");//最大可用内存空间:3679977472M
long endTime = System.currentTimeMillis(); //循环结束时的当前时间
System.out.println("程序运行时间为:"+(endTime - startTime)+"毫秒"); //程序运行时间为:28毫秒 值不确定
}
}
/*简述:
通过Runtime().getRuntime()方法创建一个Runtime的实例对象,分别调用该对象的availableProcessors(),freeMemory(),和
maxMemory()方法,将当前虚拟机的个数,空间内存数和可用最大空间的信息打印出来
*/
exec()方法
- 调用Runtime对象的exec()方法,并将系统命名”notepad.exe“作为参数传递给方法。运行时会打开一个记事本,可通过任务管理器进行观察
代码和运行结果:
package com.sgl;
public class Test {
public static void main(String[] args) {
long startTime = System.currentTimeMillis(); //循环开始时的当前时间
Runtime rt = Runtime.getRuntime();
rt.exec("notepad.exe"); //调用exec()方法
long endTime = System.currentTimeMillis(); //循环结束时的当前时间
System.out.println("程序运行时间为:"+(endTime - startTime)+"毫秒"); //程序运行时间为:28毫秒 值不确定
}
}
Runtime()类的exec()方法会返回一个Process对象,该对象表示操作系统的一个进程,此处为notepad.exe进程,通过Process对象可以对产生新进程进行管理,如关闭进程,只需调用destory()方法,如下:
打开记事本后3秒后自动关闭功能
package com.sgl;
public class Test {
public static void main(String[] args) {
long startTime = System.currentTimeMillis(); //循环开始时的当前时间
//创建一个Runtime的实例对象
Runtime rt = Runtime.getRuntime();
//rt.exec("notepad.exe"); //调用exec()方法
//得到表示进程的Process对象
Process process = rt.exec("notepad.exe");
//程序休眠5秒
Thread.sleep(5000); //在多线程进行详细讲解
//关闭程序
process.destroy();
long endTime = System.currentTimeMillis(); //循环结束时的当前时间
System.out.println("程序运行时间为:"+(endTime - startTime)+"毫秒"); //程序运行时间为:28毫秒 值不确定
}
}
效果自己测