模块  java.base
软件包  java.lang

Class System


  • public final class System
    extends Object
    System类包含几个有用的类字段和方法。 它无法实例化。 System类提供的设施包括标准输入,标准输出和错误输出流; 访问外部定义的属性和环境变量; 加载文件和库的方法; 以及用于快速复制阵列的一部分的实用方法。
    从以下版本开始:
    1.0
    • 方法详细信息

      • setIn

        public static void setIn​(InputStream in)
        重新分配“标准”输入流。 首先,如果有安全管理器,则调用其checkPermission方法并获得RuntimePermission("setIO")权限,以查看是否可以重新分配“标准”输入流。
        参数
        in - 新标准输入流。
        异常
        SecurityException - 如果存在安全管理器且其 checkPermission方法不允许重新分配标准输入流。
        从以下版本开始:
        1.1
        另请参见:
        SecurityManager.checkPermission(java.security.Permission)RuntimePermission
      • setOut

        public static void setOut​(PrintStream out)
        重新分配“标准”输出流。 首先,如果有安全管理器,则调用其checkPermission方法并获得RuntimePermission("setIO")权限,以查看是否可以重新分配“标准”输出流。
        参数
        out - 新标准输出流
        异常
        SecurityException - 如果存在安全管理器且其 checkPermission方法不允许重新分配标准输出流。
        从以下版本开始:
        1.1
        另请参见:
        SecurityManager.checkPermission(java.security.Permission)RuntimePermission
      • setErr

        public static void setErr​(PrintStream err)
        重新分配“标准”错误输出流。 首先,如果有安全管理器,则调用其checkPermission方法并获得RuntimePermission("setIO")权限,以查看是否可以重新分配“标准”错误输出流。
        参数
        err - 新的标准错误输出流。
        异常
        SecurityException - 如果存在安全管理器且其 checkPermission方法不允许重新分配标准错误输出流。
        从以下版本开始:
        1.1
        另请参见:
        SecurityManager.checkPermission(java.security.Permission)RuntimePermission
      • console

        public static Console console()
        返回与当前Java虚拟机关联的唯一Console对象(如果有)。
        结果
        系统控制台(如果有),否则为 null
        从以下版本开始:
        1.6
      • inheritedChannel

        public static Channel inheritedChannel()
                                        throws IOException
        返回从创建此Java虚拟机的实体继承的通道。 此方法返回通过调用系统范围的默认SelectorProvider对象的inheritedChannel方法获得的通道。

        除了inheritedChannel描述的面向网络的信道之外 ,该方法将来可以返回其他类型的信道。

        结果
        继承的渠道,如果有的话,否则 null
        异常
        IOException - 如果发生I / O错误
        SecurityException - 如果存在安全管理器且不允许访问该通道。
        从以下版本开始:
        1.5
      • setSecurityManager

        public static void setSecurityManager​(SecurityManager s)
        设置系统安全性。 如果已安装安全管理器,则此方法首先使用RuntimePermission("setSecurityManager")权限调用安全管理器的checkPermission方法,以确保可以替换现有安全管理器。 这可能会导致投掷SecurityException

        否则,该参数将建立为当前安全管理器。 如果参数为null建立安全管理器,则不执行任何操作,并且该方法仅返回。

        参数
        s - 安全经理。
        异常
        SecurityException - 如果已设置安全管理器且其 checkPermission方法不允许替换它。
        另请参见:
        getSecurityManager()SecurityManager.checkPermission(java.security.Permission)RuntimePermission
      • currentTimeMillis

        public static long currentTimeMillis()
        以毫秒为单位返回当前时间。 请注意,虽然返回值的时间单位是毫秒,但值的粒度取决于底层操作系统,并且可能更大。 例如,许多操作系统以几十毫秒为单位测量时间。

        有关“计算机时间”和协调世界时(UTC)之间可能出现的轻微差异的讨论,请参阅类Date的说明。

        结果
        当前时间与UTC时间1970年1月1日午夜之间的差异,以毫秒为单位。
        另请参见:
        Date
      • nanoTime

        public static long nanoTime()
        返回正在运行的Java虚拟机的高分辨率时间源的当前值,以纳秒为单位。 此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。 返回的值表示纳秒,因为某些固定但任意的原始时间(可能在将来,因此值可能为负)。 在Java虚拟机的实例中,此方法的所有调用都使用相同的原点; 其他虚拟机实例可能使用不同的来源。

        此方法提供纳秒级精度,但不一定是纳秒级分辨率(即,值的变化频率) - 除了分辨率至少与currentTimeMillis()的分辨率一样好之外,不做任何保证。

        由于数值溢出,跨越大于约292年(2 63纳秒)的连续调用的差异将无法正确计算经过的时间。

        仅当计算在Java虚拟机的同一实例中获得的两个此类值之间的差异时,此方法返回的值才有意义。

        例如,要测量某些代码执行所需的时间:

           long startTime = System.nanoTime(); // ... the code being measured ... long elapsedNanos = System.nanoTime() - startTime; 

        要将经过时间与超时进行比较,请使用

           if (System.nanoTime() - startTime >= timeoutNanos) ... 
        代替
           if (System.nanoTime() >= startTime + timeoutNanos) ... 
        因为数字溢出的可能性。
        结果
        运行Java虚拟机的高分辨率时间源的当前值,以纳秒为单位
        从以下版本开始:
        1.5
      • arraycopy

        public static void arraycopy​(Object src,
                                     int srcPos,
                                     Object dest,
                                     int destPos,
                                     int length)
        将指定源数组中的数组从指定位置开始复制到目标数组的指定位置。 阵列组件的一个子序列被从通过引用的源阵列复制src被引用的目标阵列dest 复制的组件数等于length参数。 在位置的部件srcPos通过srcPos+length-1源阵列中的被复制到的位置destPos通过destPos+length-1分别,目的地阵列。

        如果srcdest参数引用相同的数组对象,则执行复制,就好像位置srcPossrcPos+length-1的组件首次复制到具有length组件的临时数组,然后临时数组的内容被复制到位置destPos通过目标数组的destPos+length-1

        如果destnull ,则抛出NullPointerException

        如果srcnull ,则抛出NullPointerException并且不修改目标阵列。

        否则,如果满足以下任何条件,则抛出ArrayStoreException并且不修改目标:

        • src参数引用的对象不是数组。
        • dest参数引用的对象不是数组。
        • src参数和dest参数引用其组件类型为不同基元类型的数组。
        • src参数引用具有基本组件类型的数组,而dest参数引用具有引用组件类型的数组。
        • src参数引用具有引用组件类型的数组,而dest参数引用具有基本组件类型的数组。

        否则,如果满足以下任何条件,则抛出IndexOutOfBoundsException并且不修改目标:

        • srcPos论点是否定的。
        • destPos参数为负数。
        • length参数为负数。
        • srcPos+length大于src.length ,源数组的长度。
        • destPos+length大于dest.length ,目标数组的长度。

        否则,如果通过赋值转换无法将位置srcPossrcPos+length-1的源阵列的任何实际组件转换为目标阵列的组件类型,则抛出ArrayStoreException 在这种情况下,令k为小于length的最小非负整数,使得src[srcPos+ k ]无法转换为目标数组的组件类型; 当抛出异常时,位置srcPossrcPos+ k -1源阵列组件已经被复制到目标阵列位置destPosdestPos+ k -1并且目标阵列的其他位置都不会被修改。 (由于已经逐项列出的限制,本段有效仅适用于两个数组都具有引用类型的组件类型的情况。)

        参数
        src - 源数组。
        srcPos - 源数组中的起始位置。
        dest - 目标数组。
        destPos - 目标数据中的起始位置。
        length - 要复制的数组元素的数量。
        异常
        IndexOutOfBoundsException - 如果复制会导致访问数组边界外的数据。
        ArrayStoreException - 如果由于类型不匹配, src阵列中的元素无法存储到 dest阵列中。
        NullPointerException - 如果 srcdestnull
      • identityHashCode

        public static int identityHashCode​(Object x)
        返回与默认方法hashCode()返回的给定对象相同的哈希码,无论给定对象的类是否覆盖hashCode()。 空引用的哈希码为零。
        参数
        x - 要为其计算hashCode的对象
        结果
        hashCode
        从以下版本开始:
        1.1
        另请参见:
        Object.hashCode()Objects.hashCode(Object)
      • getProperties

        public static Properties getProperties()
        确定当前系统属性。 首先,如果有安全管理器,则调用其checkPropertiesAccess方法时不带参数。 这可能会导致安全性异常。

        getProperty(String)方法使用的当前系统属性集将作为Properties对象返回。 如果没有当前的系统属性集,则首先创建并初始化一组系统属性。 这组系统属性始终包含以下键的值:

        Shows property keys and associated values Key Description of Associated Value java.version Java Runtime Environment version, which may be interpreted as a Runtime.Version java.version.date Java Runtime Environment version date, in ISO-8601 YYYY-MM-DD format, which may be interpreted as a LocalDate java.vendor Java Runtime Environment vendor java.vendor.url Java vendor URL java.vendor.version Java vendor version java.home Java installation directory java.vm.specification.version Java Virtual Machine specification version, whose value is the feature element of the runtime version java.vm.specification.vendor Java Virtual Machine specification vendor java.vm.specification.name Java Virtual Machine specification name java.vm.version Java Virtual Machine implementation version which may be interpreted as a Runtime.Version java.vm.vendor Java Virtual Machine implementation vendor java.vm.name Java Virtual Machine implementation name java.specification.version Java Runtime Environment specification version, whose value is the feature element of the runtime version java.specification.vendor Java Runtime Environment specification vendor java.specification.name Java Runtime Environment specification name java.class.version Java class format version number java.class.path Java class path (refer to ClassLoader.getSystemClassLoader() for details) java.library.path List of paths to search when loading libraries java.io.tmpdir Default temp file path java.compiler Name of JIT compiler to use os.name Operating system name os.arch Operating system architecture os.version Operating system version file.separator File separator ("/" on UNIX) path.separator Path separator (":" on UNIX) line.separator Line separator ("\n" on UNIX) user.name User's account name user.home User's home directory user.dir User's current working directory

        系统属性值中的多个路径由平台的路径分隔符分隔。

        请注意,即使安全管理器不允许getProperties操作,它也可以选择允许getProperty(String)操作。

        API Note:
        除非另有说明,否则更改标准系统属性可能会产生不可预测的结果。 可以在初始化期间或首次使用时缓存属性值。 使用初始化后设定一个标准属性getProperties()setProperties(Properties)setProperty(String, String) ,或clearProperty(String)可能不具有期望的效果。
        Implementation Note:
        除标准系统属性外,系统属性还可能包括以下键: Shows property keys and associated values Key Description of Associated Value jdk.module.path The application module path jdk.module.upgrade.path The upgrade module path jdk.module.main The module name of the initial/main module jdk.module.main.class The main class name of the initial module
        结果
        系统属性
        异常
        SecurityException - 如果存在安全管理器且其 checkPropertiesAccess方法不允许访问系统属性。
        另请参见:
        setProperties(java.util.Properties)SecurityExceptionSecurityManager.checkPropertiesAccess()Properties
      • lineSeparator

        public static String lineSeparator()
        返回依赖于系统的行分隔符字符串。 它始终返回相同的值 - system property line.separator的初始值。

        在UNIX系统上,它返回"\n" ; 在Microsoft Windows系统上,它返回"\r\n"

        结果
        系统相关的行分隔符字符串
        从以下版本开始:
        1.7
      • setProperties

        public static void setProperties​(Properties props)
        将系统属性设置为Properties参数。 首先,如果有安全管理器,则调用其checkPropertiesAccess方法时不带参数。 这可能会导致安全性异常。

        该参数成为getProperty(String)方法使用的当前系统属性集。 如果参数为null ,则忘记当前的系统属性集。

        API Note:
        除非另有说明,否则更改标准系统属性可能会产生不可预测的结果 有关详细信息,请参见getProperties
        参数
        props - 新的系统属性。
        异常
        SecurityException - 如果存在安全管理器且其 checkPropertiesAccess方法不允许访问系统属性。
        另请参见:
        getProperties()PropertiesSecurityExceptionSecurityManager.checkPropertiesAccess()
      • getenv

        public static String getenv​(String name)
        获取指定环境变量的值。 环境变量是依赖于系统的外部命名值。

        如果存在安全管理器,则使用{@link RuntimePermission}("getenv."+name)权限调用其checkPermission方法。 这可能导致抛出SecurityException 如果没有抛出异常,则返回变量name的值。

        System properties and environment variables都是名称和值之间的概念映射。 这两种机制都可用于将用户定义的信息传递给Java进程。 环境变量具有更全局的效果,因为它们对定义它们的进程的所有后代都是可见的,而不仅仅是直接的Java子进程。 它们可以在不同的操作系统上具有微妙的不同语义,例如不区分大小写。 由于这些原因,环境变量更可能产生意想不到的副作用。 最好尽可能使用系统属性。 当需要全局效果时,或者当外部系统接口需要环境变量(例如PATH )时,应使用环境变量。

        在UNIX系统上, name的字母大小写通常很重要,而在Microsoft Windows系统上通常不是。 例如,表达式System.getenv("FOO").equals(System.getenv("foo"))可能在Microsoft Windows上为true。

        参数
        name - 环境变量的名称
        结果
        变量的字符串值,如果未在系统环境中定义变量, null
        异常
        NullPointerException - 如果 namenull
        SecurityException - 如果存在安全管理器且其 checkPermission方法不允许访问环境变量 name
        另请参见:
        getenv()ProcessBuilder.environment()
      • getLogger

        public static System.Logger getLogger​(String name)
        返回Logger的实例以供调用者使用。
        API Note:
        例如,此方法可以推迟调用 LoggerFinder.getLogger方法来创建由日志记录后端提供的实际记录器,以允许在系统初始化期间获取记录器。
        实现要求:
        此方法返回的实例将消息路由到通过调用LoggerFinder.getLogger(name, module)获得的记录器,其中模块是调用者的模块。 如果从堆栈中没有调用者帧的上下文调用System.getLogger (例如,直接从JNI附加线程调用时),则抛出IllegalCallerException 要在此类上下文中获取记录器,请使用将隐式标识为调用者的辅助类,或使用系统LoggerFinder来获取记录器。 请注意,执行后者可能会急切地初始化基础日志记录系统。
        参数
        name - 记录器的名称。
        结果
        调用类可以使用的System.Logger的实例。
        异常
        NullPointerException - 如果 namenull
        IllegalCallerException - 如果堆栈上没有Java调用者帧。
        从以下版本开始:
        9
      • getLogger

        public static System.Logger getLogger​(String name,
                                              ResourceBundle bundle)
        返回Logger的可本地化实例,供调用者使用。 返回的记录器将使用提供的资源包进行消息本地化。
        API Note:
        该方法旨在在系统完全初始化后使用。 此方法可能会触发System.LoggerFinder服务的立即加载和初始化,如果Java Runtime尚未准备好初始化具体服务实现,则可能会导致问题。 可以在引导序列的早期加载并需要记录本地化消息的系统类应使用getLogger(java.lang.String)创建记录器,然后使用将资源束作为参数的日志方法。
        实现要求:
        返回的记录器将执行LoggerFinder.getLocalizedLogger(name, bundle, module)指定的消息本地化,其中模块是调用者的模块。 如果从堆栈中没有调用者帧的上下文调用System.getLogger (例如,直接从JNI附加线程调用时),则抛出IllegalCallerException 要在此类上下文中获取记录器,请使用将隐式标识为调用者的辅助类,或使用系统LoggerFinder来获取记录器。 请注意,执行后者可能会急切地初始化基础日志记录系统。
        参数
        name - 记录器的名称。
        bundle - 资源包。
        结果
        System.Logger一个实例,它将使用提供的资源包进行消息本地化。
        异常
        NullPointerException - 如果 namenullbundlenull
        IllegalCallerException - 如果堆栈上没有Java调用者帧。
        从以下版本开始:
        9
      • exit

        public static void exit​(int status)
        终止当前运行的Java虚拟机。 该参数用作状态代码; 按照惯例,非零状态代码表示异常终止。

        此方法调用类Runtimeexit方法。 此方法永远不会正常返回。

        呼叫System.exit(n)实际上等同于呼叫:

         Runtime.getRuntime().exit(n)
         
        参数
        status - 退出状态。
        异常
        SecurityException - 如果存在安全管理器且其 checkExit方法不允许以指定状态退出。
        另请参见:
        Runtime.exit(int)
      • gc

        public static void gc()
        运行垃圾收集器。 调用gc方法表明Java虚拟机花费了大量精力来回收未使用的对象,以使其当前占用的内存可用于快速重用。 当控制从方法调用返回时,Java虚拟机已尽最大努力从所有丢弃的对象中回收空间。

        呼叫System.gc()实际上等同于呼叫:

         Runtime.getRuntime().gc()
         
        另请参见:
        Runtime.gc()
      • runFinalization

        public static void runFinalization()
        运行待完成的任何对象的终结方法。 调用此方法表明Java虚拟机花费了finalize来运行已被发现被丢弃但尚未运行其finalize方法的对象的finalize方法。 当控制从方法调用返回时,Java虚拟机已尽最大努力完成所有未完成的终结。

        呼叫System.runFinalization()实际上等同于呼叫:

         Runtime.getRuntime().runFinalization()
         
        另请参见:
        Runtime.runFinalization()
      • load

        public static void load​(String filename)
        加载filename参数指定的本机库。 filename参数必须是绝对路径名。 如果filename参数在剥离任何特定于平台的库前缀,路径和文件扩展名时,表示名称为L的库,并且名为L的本机库与VM静态链接,则表示JNI_OnLoad_L函数调用库导出而不是尝试加载动态库。 与参数匹配的文件名不必存在于文件系统中。 有关详细信息,请参阅JNI Specification 否则,filename参数将以依赖于实现的方式映射到本机库映像。

        呼叫System.load(name)实际上等同于呼叫:

         Runtime.getRuntime().load(name)
         
        参数
        filename - 要加载的文件。
        异常
        SecurityException - 如果存在安全管理器且其 checkLink方法不允许加载指定的动态库
        UnsatisfiedLinkError - 如果文件名不是绝对路径名,则本机库不与VM静态链接,或者主机系统无法将库映射到本机库映像。
        NullPointerException - 如果 filenamenull
        另请参见:
        Runtime.load(java.lang.String)SecurityManager.checkLink(java.lang.String)
      • loadLibrary

        public static void loadLibrary​(String libname)
        加载libname参数指定的本机库。 libname参数不得包含任何特定于平台的前缀,文件扩展名或路径。 如果名为libname的本机库与VM静态链接,则调用库导出的JNI_OnLoad_ libname函数。 有关详细信息,请参阅JNI Specification 否则,libname参数从系统库位置加载,并以依赖于实现的方式映射到本机库映像。

        呼叫System.loadLibrary(name)实际上等同于呼叫

         Runtime.getRuntime().loadLibrary(name)
         
        参数
        libname - 库的名称。
        异常
        SecurityException - 如果存在安全管理器且其 checkLink方法不允许加载指定的动态库
        UnsatisfiedLinkError - 如果libname参数包含文件路径,则本机库不与VM静态链接,或者主机系统无法将库映射到本机库映像。
        NullPointerException - 如果 libnamenull
        另请参见:
        Runtime.loadLibrary(java.lang.String)SecurityManager.checkLink(java.lang.String)