1

概述

JAVA入门深究之sysout中我们深究了System.out.println,关于System类,可能这个类方法用的最多就是sout以及System.currentTimeMillis(),下面我们在研究一下这个类其他相对重要方法。

botian_002.jpg

常用方法

arraycopy 数组拷贝

/**
@param      src      源数组
@param      srcPos   源数组中的起始位置。
@param      dest     目标数组。
@param      destPos  在目标数据中的起始位置。
@param      length   要复制的数组元素的数量。
@exception  IndexOutOfBoundsException  如果复制会导致在数组范围之外访问数据。
@exception  ArrayStoreException  类型不匹配是,必须是数组类型
@exception  NullPointerException 
*/
public static native void arraycopy(Object src,  int  srcPos,
                                    Object dest, int destPos,
                                    int length);

示例:

int[] arr1 = { 6, 7, 8, 2, 4 };
int[] arr2 = { 3, 4,5, 8, 9 };

System.arraycopy(arr1, 1, arr2, 1, 3);

arr1[3] = 8;

for (int i = 0; i < 5; i++) {
    System.out.print(arr2[i] + " ");
}
//   3 7 8 2 9 

gc垃圾回收

用于运行jvm中的垃圾回收器,完成内存中垃圾清除

class Demo {
    /**
     * 垃圾回收器准备释放内存的时候,会先调用finalize()
     */
    @Override
    public void finalize() {
        System.out.println("gc is comming!!!");
    }
}

public class HelloWorld {
    public static void main(String[] args) {
        new Demo();
        System.gc();
    }
}

getProperties()获取系统属性

Properties properties = System.getProperties();
for (String key : properties.stringPropertyNames()) {
    System.out.println(key + "=" + properties.getProperty(key));
}
//打印可参考最下方表格

当然可以通过System.getProperty(key)获取指定键值

String oName = System.getProperty("os.name");
System.out.println(oName);//Windows 10

System.setProperty(key,value) 可以设置键值对

System.setProperties(properties) 可以设置Properties对象

System.clearProperty(key) 根据key删除property

getSecurityManager()安全管理器

jvm运行到未知java程序时,为了防止恶意代码对系统影响,需要对运行代码权限进行控制,这样就要启用Java安全管理器

使用安全管理器,您可以控制对:

  1. 文件操作
  2. 反射设施
  3. 读/写IO
  4. 线程/线程组操作
  5. 套接字操作(监听,接受等)
  6. 创建您自己的类加载器的能力。

对于每一个这样的事情,SecurityManager中都有一个check *()方法

自定义 securityManager

private static class MySecurityManager extends SecurityManager {

    @Override
    public void checkRead(String file) {
        if ("java".contains(file)) {
            throw new AccessControlException("cannot read file:" + file);
        }
        super.checkRead(file);
    }

}

public static void main(String[] args) throws FileNotFoundException {
    //install
    System.setSecurityManager(new MySecurityManager());
    //read
    InputStream in = new FileInputStream(new File("Hello.java"));
    //uninstall
    SecurityManager sm = System.getSecurityManager();
    if (sm != null) {
        System.setSecurityManager(null);
    }
}

System.setout重定向输出

以下代码会将打印内容输出到txt文本中

PrintStream pStream = new PrintStream("F:/hcx.txt");
pStream.println("666666666666");
System.setOut(pStream);
System.out.println("88888888")
//hcx.txt内容
//666666666666
//88888888

小结

System还有很多方法没有列出来,不过日常使用已足够了,希望看完有所获。如有错误,请指正,谢谢

botian_001.jpg

参考

System.properties参考值:

描述
java.runtime.nameJava(TM) SE Runtime Environment
sun.boot.library.pathC:\Program Files\Java\jdk1.8.0_231\jre\bin
java.vm.version25.231-b11Java虚拟机实现版本
java.vm.vendorOracle CorporationJava 虚拟机实现供应商
java.vendor.urlhttp://java.oracle.com/Java 供应商的URL
path.separator;路径分隔符(在UNIX系统中是“:”)
java.vm.nameJava HotSpot(TM) 64-Bit Server VM
file.encoding.pkgsun.io
user.countryCN国家
sun.java.launcherSUN_STANDARD
java.vm.specification.nameJava Virtual Machine SpecificationJava虚拟机规范名称
user.dirD:\chrome download\dubbo-admin-develop\docker-file-springboot用户当前工作目录
java.runtime.version1.8.0_231-b11jdk版本
java.awt.graphicsenvsun.awt.Win32GraphicsEnvironment
java.endorsed.dirsC:\Program Files\Java\jdk1.8.0_231\jre\lib\endorsedendorsed目录
os.archamd64操作系统的架构
java.io.tmpdirC:\Users\12640\AppData\Local\Temp\io操作历史文件
java.vm.specification.vendorOracle Corporation
os.nameWindows 10系统版本
sun.jnu.encodingGBK
java.library.pathC:\Program Files\Java\jdk1.8.0_231\bin;C:\windows\Sun ........
java.specification.nameJava Platform API SpecificationJava运行时环境规范名称
java.class.version52.0Java类格式版本号
sun.management.compilerHotSpot 64-Bit Tiered Compilers
os.version10.0
java.awt.printerjobsun.awt.windows.WPrinterJob
file.encodingUTF-8
java.specification.version1.8
user.name12640用户的账户名称
java.class.pathC:\Program Files\Java\jdk1.8.0 ......
java.vm.specification.version1.8java虚拟机规范版本
sun.arch.data.model64
java.homeC:\Program Files\Java\jdk1.8.0_231\jreJava安装目录
sun.java.commandcom.example.HelloWorld 12
java.specification.vendorOracle Corporation
user.languagezh用户语言
awt.toolkitsun.awt.windows.WToolkit
java.vm.infomixed mode混合模式执行
java.version1.8.0_231
java.ext.dirsC:\Program Files\Java\jdk1.8.0_231\jre\lib\ext;C:\windows\Sun\Java\lib\ext
sun.boot.class.pathC:\Program Files\Java\jdk1.8.0_231\jre .....
java.vendorOracle Corporation
java.vendor.url.bughttp://bugreport.sun.com/bugr...
sun.cpu.endianlittle
sun.io.unicode.encodingUnicodeLittle
sun.desktopwindows
sun.cpu.isalistamd64

微信公众号【Java搬砖小伙子】关注一波,更多资源等着你哦
您的支持是我前进路上最大的动力,谢谢!

qrcode_for_wx.jpg


每天搬砖小伙子
10 声望0 粉丝

Java开发,每天搬砖中。。。