Java中的系统类 - Properties,System.out.println
java中的系统类是核心类之一,我从未见过任何不使用它的java开发人员。记录调试信息的最简单方法之一是System.out.print()功能。系统类是最终的,它的所有成员和方法都是静态的,因此我们不能通过继承来子类化和覆盖它的行为。
Java中的系统类
java中的系统类不提供任何公共构造函数。所以我们不能实例化这个类(为了论证,我们可以使用Java Reflection实例化它),这就是为什么它的所有方法都是静态的。
在这里,我们将研究java.lang.System类提供的不同功能。
Java系统阵列复制
Java System类提供了一种将数据从一个数组复制到另一个数组的本机方法。这是一个本机实现,并且应该比其他复制数组数据的方式更快。
IndexOutOfBoundsException如果复制会导致数组边界外的数据访问,则抛出系统数组复制方法。ArrayStoreException如果源数组中的元素由于类型不匹配而无法存储到目标数组中,并且如果源数组或目标数组为null ,则也会抛出NullPointerException。
下面的示例程序显示了如何使用此方法。int [] array1 = {1,2,3,4,5};int[] array2 = {10,20,30,40,50};
//copying first two elements from array1 to array2 starting from index 2 of array2System.arraycopy(array1, 0, array2, 2, 2);
System.out.println(Arrays.toString(array2)); //prints "[10, 20, 1, 2, 50]"
Java系统属性
System类包含获取System属性列表,获取特定属性,设置系统属性和清除任何现有属性的有用方法。下面的示例程序显示了不同的方法及其用法。//Get System Defined PropertiesProperties systemProps = System.getProperties();Set keySet = systemProps.keySet();for(Object obj : keySet){String key = (String) obj;
System.out.println("{"+obj+"="+systemProps.getProperty(key)+"}");}//Get Specific PropertySystem.out.println(System.getProperty("user.country"));//Clear property exampleSystem.clearProperty("user.country");System.out.println(System.getProperty("user.country")); //print null//Set System propertySystem.setProperty("user.country", "IN");System.out.println(System.getProperty("user.country")); //prints "IN"
如果我们在java程序中运行上面的代码,我们得到以下输出。请注意,输出将根据您的系统配置而有所不同。{java.runtime.name=Java(TM) SE Runtime Environment}{sun.boot.library.path=/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib}{java.vm.version=23.5-b02}{gopherProxySet=false}{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.country=US}{sun.java.launcher=SUN_STANDARD}{sun.os.patch.level=unknown}{java.vm.specification.name=Java Virtual Machine Specification}{user.dir=/Users/pankaj/CODE/MyProject}{java.runtime.version=1.7.0_09-b05}{java.awt.graphicsenv=sun.awt.CGraphicsEnvironment}{java.endorsed.dirs=/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/endorsed}{os.arch=x86_64}{java.io.tmpdir=/var/folders/f1/25ry1vy5675_30mkwqp7p46r0000gn/T/}{line.separator=}{java.vm.specification.vendor=Oracle Corporation}{os.name=Mac OS X}{sun.jnu.encoding=US-ASCII}{java.library.path=/Users/pankaj/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.}{java.specification.name=Java Platform API Specification}{java.class.version=51.0}{sun.management.compiler=HotSpot 64-Bit Tiered Compilers}{os.version=10.8.3}{http.nonProxyHosts=local|*.local|169.254/16|*.169.254/16}
{user.home=/Users/pankaj}
{user.timezone=}
{java.awt.printerjob=sun.lwawt.macosx.CPrinterJob}
{file.encoding=MacRoman}
{java.specification.version=1.7}
{java.class.path=/Users/pankaj/CODE/bin:/Users/pankaj/}
{user.name=pankaj}
{java.vm.specification.version=1.7}
{sun.java.command=com.journaldev.util.SystemClassExamples}
{java.home=/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre}
{sun.arch.data.model=64}
{user.language=en}
{java.specification.vendor=Oracle Corporation}
{awt.toolkit=sun.lwawt.macosx.LWCToolkit}
{java.vm.info=mixed mode}
{java.version=1.7.0_09}
{java.ext.dirs=/Users/pankaj/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java}
{sun.boot.class.path=/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/JObjC.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/classes}
{java.vendor=Oracle Corporation}
{file.separator=/}
{java.vendor.url.bug=http://bugreport.sun.com/bugreport/}
{sun.io.unicode.encoding=UnicodeBig}
{sun.cpu.endian=little}
{socksNonProxyHosts=local|*.local|169.254/16|*.169.254/16}{ftp.nonProxyHosts=local|*.local|169.254/16|*.169.254/16}
{sun.cpu.isalist=}
US
null
IN
读写控制台
Java System Class提供了一种获取与正在运行的JVM关联的唯一Console对象的方法。
Console类在1.6 中的Java IO中引入,提供了有用的方法来打印格式化数据和安全地读取密码。
如果没有控制台与当前JVM关联,例如,通过Eclipse运行或作为后台程序运行,则返回null。
下面的示例程序显示从System类获取Console对象并使用它。Console console = System.console();if(console != null){
Calendar c = new GregorianCalendar(); console.printf("Welcome %1$s%n", "Pankaj"); //prints "Welcome Pankaj"
console.printf("Current time is: %1$tm %1$te,%1$tY%n", c); //prints "Current time is: 08 5,2013"
console.flush();} else{//No console is attached when run through Eclipse, background process
System.out.println("No Console attached");}
java系统获取当前时间
java中的系统类提供了两种获取当前时间的方法,以毫秒和纳秒为单位。
我们可以用毫秒来创建Date对象,纳米时间主要用于科学实验或基准测试。
下面的代码片段显示了使用System类方法获取与时间相关的信息。long currentTimeMillis = System.currentTimeMillis();Date date = new Date(currentTimeMillis);System.out.println("Current time in millis="+currentTimeMillis);System.out.println(date); //prints 2013-08-05long nanoTime = System.nanoTime();System.out.println("Current nano time="+nanoTime);
Java系统环境变量
Java System类提供了一种以Map形式获取环境变量数据的方法,返回的Map是不可修改的,它包含String对象中的键值对。//get unmodifiable environment variables mapMap envMap = System.getenv();Set keySet = envMap.keySet();for(String key : keySet){
System.out.println("Key="+key+",value="+envMap.get(key));}//Get Specific environment variableString pathValue = System.getenv("PATH");System.out.println("$PATH="+pathValue);
安全经理
SecurityManager类用于实现应用程序的安全策略,System类提供有用的方法来获取当前运行的JVM的SecurityManager并为应用程序设置SecurityManager。SecurityManager secManager = System.getSecurityManager();if(secManager == null){
System.out.println("SecurityManager is not configured");}SecurityManager mySecManager = new SecurityManager();System.setSecurityManager(mySecManager);secManager = System.getSecurityManager();if(secManager != null){
System.out.println("SecurityManager is configured");}
文件IO操作
系统类包含三个字段 - 输入,输出和错误。它们用于从InputStream读取数据并将数据写入OutputStream。
System类提供了设置不同类型的InputStream和OutputStream以用于记录目的的方法。
例如,我们可以将FileOutputStream设置为out和err字段,以便将控制台输出写入文件。
下面的代码片段显示了这些字段的用法,以及如何使用setter方法设置它们。try(FileInputStream fis = new FileInputStream("input.txt");
FileOutputStream fos = new FileOutputStream("server.log");) {//set input streamSystem.setIn(fis);char c = (char) System.in.read();System.out.print(c); //prints the first character from input stream//set output streamSystem.setOut(new PrintStream(fos));System.out.write("Hi Pankaj\n".getBytes());//set error streamSystem.setErr(new PrintStream(fos));System.err.write("Exception message\n".getBytes());} catch (IOException e) {
e.printStackTrace();}
请注意在上面的try-block中使用Java 7尝试使用资源功能。
其他任务
System类为其他任务提供了一些其他方法。例如,要运行垃圾收集器,加载外部库,将库名称映射到特定于操作系统的字符串,对等待完成的任何对象运行finalize方法并终止JVM。Copy//run the garbage collectorSystem.gc();System.out.println("Garbage collector executed.");//map library nameString libName = System.mapLibraryName("os.name");System.out.println("os.name library="+libName);//load external librariesSystem.load("lixXYZ.so");System.loadLibrary("libos.name.dylib");//run finalizationSystem.runFinalization();//terminates the currently running JVMSystem.exit(1);// this line will never print because JVM is terminatedSystem.out.println("JVM is terminated");
这都是关于java中的System类的,我希望它能帮助你最大限度地利用java System类。