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<Object> 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 Properties示例教程。
读写控制台
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<String, String> envMap = System.getenv();Set<String> 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类。