java的System类

来源:互联网 发布:汇编语言转换成c语言 编辑:程序博客网 时间:2024/05/22 00:16

java.lang.System类包含很多有用的字段和方法,该类包含一个私有的构造器,因此不能被实例化。System类提供的基础设施包括标准输入流,标准输出流,错误输出流;访问环境变量和外部定义属性的方法;载入文件和库的手段;以及用于快速复制一个数组的方法。

 

输入输出及终端

System类中包含三个public静态类型的标准输入输出对象in, out, err,这三个输入输出对象通过本地方法设置成系统的标准输入输出。System类中有个console()方法用于返回和当前虚拟机相连的唯一console对象(如果存在,否则为null)。虚拟机是否存在console,这和安装平台以及启动虚拟机的方式有关;如果虚拟机通过交互式命令行启动,并且没有重定向标准输入和输出,此时该虚拟机存在一个console和它绑定在一起;如果虚拟机是自动启动的(如作为一个后台进程),那么此时虚拟机不存在console。例如:

import java.io.Console;

public class ConsoleTest {
       public static void main(String[] args) {
            Console console = System.console();
  
            if(console != null){
                   String username = new String(console.readLine("Enter UserName: "));
                   String password = new String(console.readPassword("Enter PassWord: "));
                   System.out.println("UserName: " + username);
                   System.out.println("PassWord: " + password);
           } 
      }
}

 

在命令行中执行的结果如下:

C:\Java>java -cp . ConsoleTest
Enter UserName: ConsoleUser
Enter PassWord:
UserName: ConsoleUser
PassWord: ConsolePass

环境变量及外部属性

 System类中与外部属性有关的方法有getProperties(), setProperties(), getProperty(), setProperty();这些方法的签名如下:

 

public static Properties getProperties();   //获取System中java.util.Properties类型的静态变量props

public staticvoid setProperties(Propertiesprops);  // 安全检查 + System.props = props

public static String getProperty(String key);   // 安全检查 + props.get(key)

public static String getProperty(String key, String def);// if props.get(key) is null, then props.get(key, def)

public static String setProperty(String key, Stringvalue);// props.set(key, value)

public static String clearProperty(String key); // props.remove(key)

 

和环境变量有关的方法是getEnv(), getEnv(String name);其中getEnv()返回一个键值对map, 该map包含所有系统环境变量,这些系统环境变量通过父进程传递给子进程;getEnv(String name)用于获取其中的一个环境变量。

 

publicstatic java.util.Map<String,String> getenv();

publicstatic String getenv(String name) ;

 

文件、库的载入

 System类中的方法load用于从当前文件系统中载入一个代码文件作为动态链接库,其参数为文件的完整路径;loadLibrary方法用于载入以libname命名的系统库,libname和系统库之间的映射由系统决定。

public staticvoid load(String filename);

public staticvoid loadLibrary(String libname);

 

时间获取

System类中包含两个获取时间的方法currentTimeMillis(), nanoTime(),他们的方法签名分别如下:

 

public static nativelong currentTimeMillis();

该函数获取标准格林威治时间的偏移量,精确到毫秒

 

publicstaticnativelong nanoTime();

该函数的返回值和任何系统时间无关,该函数用于衡量两个操作之间经历的时间,精确到纳秒;使用方法如下:

long startTime = System.nanoTime();

// ... the code being measured ...

long estimatedTime = System.nanoTime() - startTime;

拷贝数组

System类中包含一个arraycopy本地方法,该方法的签名如下:

public static native void arraycopy(Object src,             int srcPos,             Object dest,             int destPos,             int length)

其中为src为源数组,srcPos为源数组中拷贝开始的位置,dest为目标数组,destPos为目标数组中拷贝开始的位置,length为拷贝的长度;如果src或dest为null,则抛出NullPointerException异常,如果src中存在数据无法再dest中存储(如类型不同),则抛出ArrayStoreException;如果存储越界,则抛出IndexOutOfBoundsException。

 

其他

System类中还包含其他一些方法,如exit()方法停止当前运行的虚拟机;gc()用于运行一次垃圾回收

原创粉丝点击