java System类解析

System类是一个由final修饰的类,所以无法被继承,只有一个私有的构造器,所以也无法实例化。

System类所有的属性和方法都是公有 static修饰的,可以由类名直接调用

属性: 
       
InputStream in;  输入流

PrintStream out; 打印输出流

PrintStream err; 标准错误打印输出流,该留已经打开,随时准备接受输出数据

SecurityManager  security;  java安全管理器

Console  cons;  控制台,用于从控制台或设备读取字符串,一般是用户名密码,尤其是密码是不可见的

Properties  props ; 系统属性数据,java默认55条属性,其中包括项目用户运行环境文件路径以及换行符等

方法:
 1、native void registerNatives();  
 该方法在类加载时执行。

  System类存在静态块

 private static native void registerNatives();
    static {
        registerNatives();
    }

  根据注释,该方法被执行,jvm会自动调用 initializeSystemClass()方法。而initializeSystemClass方法会将以上输入流,打印输出流,以及安全管理器等属性赋值。在实际应用中我们用到的System.out.println(),就是调用System类中的out打印输出流的println()方法,打印各种数据。

2、setIn(InputStream in)

      对类静态变量属性 in 赋值。在System类加载时,会自动调用该方法,创建默认的输入流,内部调用checkIO()方法,标识java安全管理器会校验操作权限

3、setOut(PrintStream out);

      对类静态属性out赋值,和setIn(InputStream in);方法类似,都会执行相同的操作

4、setErr(PrintStream err);

      赋值静态变量属性err。  和上面setOut(PrintStream out);类似

5、console();  

      用于构建默认的控制台对象,赋值给变量cons,一般idea是获取不到console的,因为没有控制台,需要在cmd控制台运行程序

6、Channel  inheritedChannel() throws IOException;

       返回创建类实体的信道 ---java虚拟机

7、checkIO();

       java安全管理器校验流操作

8、native void setIn0(InputStream in);

       由jvm对输入流进行赋值

9、native void setOut0(PrintStream in);

       和setIn0()类似

10、native  void setErr0(PrintStream in);

       和setErr0()类似

11、setSecurityManager(final SecurityManager s);

        自定义java安全管理器

12、setSecurityManager0(final SecurityManager s);

        自定义java安全管理器,同步方法,

13、getSecurityManager();

        获取java安全管理器

14、native  long  currentTimeMillis();

        获取系统当前时间,毫秒,注意:不同的操作系统对毫秒的测量单位不一样

15、native  long  nanoTime(); 

        获取当前系统时间  纳秒为单位   注意:1纳秒 = 1毫秒 *1000 * 1000

16、native  void arraycopy(object src , int srcPos , object  dest , int  destPos , int length);

        复制数组

        参数: src:被复制的数组; srcPos:指定复制索引,从哪个索引开始复制。desc:复制的数组。destPos:从复制数组中哪个索引开始拷贝。length:复制几个元素

 比如:

        String[] arr = new String[]{"1","2","3","4"};
        String[] arr1= new String[]{"5","6","7","8"};
        System.arraycopy(arr,1,arr1,0,2);

    含义:从数组arr的索引1开始(第二个元素开始)复制,复制2个元素,拷贝到数组arr1,从索引0开始拷贝(第一个元素开始拷贝)。执行完成后,会发现arr1数组的值变成  2   3   7    8

     

      注意:如果如果length长度参数数值大于可复制数组长度,或者为负数,则会抛出ArrayIndexoutofBoundException异常

17、native  int  identityHashCode(Object x);

        返回对象的hashCode值。注意:不管该对象有没有重写hashCode()方法,返回的hashCode值都是根据对象物理内存地址产生的hash值。

         此处多说一下hashCode()方法和identityHashCode(Object x);的区别

          hashCode();方法返回的是对象重写hashCode后的hashCode值,如果没有重写hashCode,则返回的值和IdentityHashCode是一样的。

           identityHashCode(Object x);返回的永远是对象的hash初始值,就是物理内存地址产生的hash值

18、Properties  getProperties();

        获取系统属性数据  默认系统属性有55种。

19、String   lineSeparator();

        返回与操作系统相关的行分隔符字符串,一般返回的值都一样。  分隔符字符串,在系统类加载时,jvm会自动获取当前操作系统默认的换行符。

         这里需要注意的是,在实际开发中常常会用到换行,介意不要直接用 "\n\r" 写死,因为在不同的操作系统中换行符可能是不同的,如果写死。就实现不了java的跨平台可移植性。  这里介意用 lineSeparator();方法或者用System.getProperty("line.separator");获取换行符

20、setProperties(Properties  props);

        设置系统属性,这里需要谨慎使用。因为一旦自定义系统属性后,会自动替换掉原先的属性列表。

21、 String  getProperty(String key);

        通过指定key值,获取系统属性value值

22、String  getProperty(String key,String def);  

        通过指定key值,获取系统属性value值,如果获取不到,使用默认值def。

23、String  setProperty(String key,String value);

        向系统属性中添加属性信息

24、clearProperty(String key);

        删除指定key值的系统属性信息

25、Map<String,String>  getenv();

       获取当前操作系统中,所有配置的环境变量

26、String getenv(String name);

       通过指定环境变量名称,获取当前系统中的环境变量值。

27、exit(int status);

        终止java虚拟机,status标识状态,不是0标识异常终止   Runtime.getRuntime().exit(int status);

28、gc();

        运行垃圾回收,建议java虚拟机花费精力回收未被使用的对象,以便使这些占据的内存快速得到重用。

29、runFinalization();

        运行处于终止状态的所有对象的终止方法,由于java虚拟机做了努力运行被丢弃对象的finalize()方法,但是由于没写原因,这些方法却并没有被运行。执行runFinalization();方法可以将被丢弃终止状态的对象最大程度的执行终止方法。

30、load(String filename);

        装在库文件,放置库文件的绝对路径

31、loadLibary(String libName);

        装在库,参数为库文件名

32、native String  mapLibaryName(String libName)

        将库名映射为特定平台的字符串

猜你喜欢

转载自blog.csdn.net/zhanglei082319/article/details/82863907