JAVA源码学习系列-System类

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值