System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。
由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员方法和成员变量都是static(静态)的。
system中包含了in、out和err三个成员变量,分别代表标准输入流(键盘输入)、标准输出流(显示器)和标准错误输出流(显示器),这里看到有下面三个setter方法,所以这几个流是可以更改的,比如从文件输入输出。
setIn(InputStream)
setOut(PrintStream)
setErr(PrintStream)
console()
返回与当前 Java 虚拟机关联的唯一 Console 对象(如果有),我在eclipse上执行反回 null。
inheritedChannel()【未搞明白】
返回从创建此 Java 虚拟机的实体中继承的信道,此方法返回通过调用系统级默认 selectorprovider 对象的 inheritedchannel 方法获得的信道。除了 inheritedchannel 中描述的面向网络的信道之外,此方法以后还可能返回其他种类的信道
setSecurityManager(SecurityManager)【未搞明白】
getSecurityManager() 【未搞明白】
获取和设置系统安全接口
currentTimeMillis()
返回时间毫秒,和Date类中的getTime方法一样
nanoTime()
返回时间纳秒
arraycopy(a,b,c,d,e)
其中,a是被复制的数组,b是复制的起始位置,c是复制到的数组,d是复制到这个数组的起始位置,e是复制到这个数组的结束位置
identityHashCode(Object)
返回给定对象的哈希码,该代码与默认的方法 hashCode() 返回的代码一样,无论给定对象的类是否重写 hashCode()
lineSeparator()
换行符,如果要实现程序跨平台运行,则必须使用 System.lineSeparator()进行换行。不然会出现windows上可以运行,linux上无法运行的情况。
获取系统属性
setProperties(Properties)
getProperty(String)
getProperty(String, String)
setProperty(String, String)
clearProperty(String)
获取环境变量
getenv(String)
getenv()
下面是我本机执行getenv()的结果
{
USERDOMAIN_ROAMINGPROFILE = DESKTOP - ADQH966, LOCALAPPDATA = C: \Users\ admin01\ AppData\ Local, PROCESSOR_LEVEL = 6, USERDOMAIN = DESKTOP - ADQH966, FPS_BROWSER_APP_PROFILE_STRING = Internet Explorer, LOGONSERVER = \\DESKTOP - ADQH966, JAVA_HOME = D: \Program Files\ Java\ jdk1 .8 .0 _112, SESSIONNAME = Console, ALLUSERSPROFILE = C: \ProgramData, PROCESSOR_ARCHITECTURE = AMD64, GRADLE_HOME = E: \env\ gradle - 5.5 .1, PSModulePath = C: \Program Files\ WindowsPowerShell\ Modules;
C: \WINDOWS\ system32\ WindowsPowerShell\ v1 .0\ Modules, SystemDrive = C: , MAVEN_HOME = E: \env\ apache - maven - 3.3 .9 - roc, OneDrive = C: \Users\ admin01\ OneDrive, APPDATA = C: \Users\ admin01\ AppData\ Roaming, USERNAME = admin01, ProgramFiles(x86) = C: \Program Files(x86), VBOX_MSI_INSTALL_PATH = C: \Program Files\ Oracle\ VirtualBox\, CommonProgramFiles = C: \Program Files\ Common Files, Path = D: /Program Files/Java / jre1 .8 .0 _112 / bin / server;
D: /Program Files/Java / jre1 .8 .0 _112 / bin;
D: /Program Files/Java / jre1 .8 .0 _112 / lib / amd64;
C: \Program Files(x86)\ NetSarang\ Xftp 6\;
C: \Program Files(x86)\ NetSarang\ Xshell 6\;
C: \Perl64\ site\ bin;
C: \Perl64\ bin;
C: \ProgramData\ Oracle\ Java\ javapath;
C: \Program Files(x86)\ Intel\ Intel(R) Management Engine Components\ iCLS\;
C: \Program Files\ Intel\ Intel(R) Management Engine Components\ iCLS\;
C: \WINDOWS\ system32;
C: \WINDOWS;
C: \WINDOWS\ System32\ Wbem;
C: \WINDOWS\ System32\ WindowsPowerShell\ v1 .0\;
C: \Program Files(x86)\ Intel\ Intel(R) Management Engine Components\ DAL;
C: \Program Files\ Intel\ Intel(R) Management Engine Components\ DAL;
C: \Program Files(x86)\ Intel\ Intel(R) Management Engine Components\ IPT;
C: \Program Files\ Intel\ Intel(R) Management Engine Components\ IPT;
D: \Program Files\ TortoiseGit\ bin;
D: \Program Files\ TortoiseSVN\ bin;
E: \env\ apache - maven - 3.3 .9 - roc\ bin;
E: \env\ gradle - 5.5 .1;
d: \Program Files\ Git\ cmd;
C: \WINDOWS\ System32\ OpenSSH\;
C: \Program Files\ mingw - w64\ x86_64 - 8.1 .0 - posix - seh - rt_v6 - rev0\ mingw64\ bin;
E: \env\ gradle - 5.5 .1\ bin;
C: \Programs\ Python\ Python37\ Scripts\;
C: \Programs\ Python\ Python37\;
C: \Users\ admin01\ AppData\ Local\ Microsoft\ WindowsApps;
C: \Users\ admin01\ AppData\ Local\ GitHubDesktop\ bin;
d: \Program Files\ Docker Toolbox;
C: \Users\ admin01\ AppData\ Local\ Microsoft\ WindowsApps;;
E: \env\ eclipse - roc;, FPS_BROWSER_USER_PROFILE_STRING = Default, PATHEXT = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC, DriverData = C: \Windows\ System32\ Drivers\ DriverData, OS = Windows_NT, COMPUTERNAME = DESKTOP - ADQH966, PROCESSOR_REVISION = 9e09, CommonProgramW6432 = C: \Program Files\ Common Files, ComSpec = C: \WINDOWS\ system32\ cmd.exe, ProgramData = C: \ProgramData, ProgramW6432 = C: \Program Files, = D: = D: \, HOMEPATH = \Users\ admin01, SystemRoot = C: \WINDOWS, TEMP = C: \Users\ admin01\ AppData\ Local\ Temp, HOMEDRIVE = C: , PROCESSOR_IDENTIFIER = Intel64 Family 6 Model 158 Stepping 9, GenuineIntel, USERPROFILE = C: \Users\ admin01, TMP = C: \Users\ admin01\ AppData\ Local\ Temp, CommonProgramFiles(x86) = C: \Program Files(x86)\ Common Files, ProgramFiles = C: \Program Files, PUBLIC = C: \Users\ Public, NUMBER_OF_PROCESSORS = 8, windir = C: \WINDOWS, DOCKER_HOME = tcp: //120.25.208.44:2375, =::=::\, DOCKER_TOOLBOX_INSTALL_PATH=d:\Program Files\Docker Toolbox}
gc
java垃圾回收器,这个方法不需要我们去调用,jvm发现系统有未使用的对象,会自己进行执行。通常会有两种情况下会调用gc:a、当jvm内存不足时会调用,b、当cpu空闲的时候调用。详细请看一下jvm的具体的垃圾回收机制。
exit
退出虚拟机。exit(int)方法是终止当前正在运行的java虚拟机。参数是状态码。根据惯例,非0的状态码表示异常终止,0表是终止。而且,该方法永远不会正常返回。
runFinalization()
将被垃圾收集的对象的“finalize()“ 这个方法。但并不确定肯定会运行,向gc()方法一样,只是建议虚拟机运行。
runFinalizersOnExit(boolean)
已过时。 该方法具有固有的不安全性。它可能对正在使用的对象调用终结方法,而其他线程同时正在操作这些对象,从而导致不正确的行为或死锁
load(String)
loadLibrary(String)
从作为动态库的本地文件系统中以指定的文件名加载代码文件。
System.load 参数为库文件的绝对路径,可以是任意路径。
System.loadLibrary方法load的为相对路径,即在java.library.path定义下的lib文件,文件名会更具不同的系统实现加上不同的前缀、后缀。
例如:System.loadLibrary("foo")
在window中load的是java.library.path路径下的名字为foo.dll的本地类库。
在linux中load的是java.library.path路径下的名字为libfoo.so的本地类库。
在mac中load的是java.library.path路径下的名字为libfoo.jnilib/libfoo.dylib的文件
mapLibraryName(String)
该方法返回一个与平台相关的指定名称的本地库的名字
下面的例子显示java.lang.System.mapLibraryName()方法的使用。
public static void main(String[] args) {
// prints the name of the Operating System
System.out.println(System.getProperty("os.name"));
/* maps a library name into a platform-specific string representing
a native library */
String str = System.mapLibraryName("os.name");
System.out.println(str);
}
让我们来编译和运行上面的程序,这将产生以下结果:
Windows XP
os.name.dll