Module  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
      • getSecurityManager

        public static SecurityManager getSecurityManager​()
        获取系统安全界面。
        结果
        200新200新新旗新新新旗新新旗旗新新旗新新旗旗新新旗旗新新旗旗新新旗旗新新旗新新旗新新旗新新旗新新旗新新旗新新旗新新200新新旗新新200新新旗新新200新新旗新新旗新新款: 否则返回null
        另请参见:
        setSecurityManager(java.lang.SecurityManager)
      • currentTimeMillis

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

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

        结果
        在1970年1月1日UTC之间的当前时间和午夜之间的差异,以毫秒为单位。
        另请参见:
        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参数。 源阵列中位置srcPossrcPos+length-1的组件分别复制到目标阵列的位置destPosdestPos+length-1

        如果srcdest参数指向相同的数组对象,则执行复制,就好像srcPossrcPos+length-1位置的组件首次复制到具有length组件的临时阵列,然后将临时阵列的内容复制到位置destPos通过destPos+length-1的目的地阵列。

        如果destnull ,那么抛出一个NullPointerException

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

        否则,如果满足以下条件之一,则抛出ArrayStoreException并且ArrayStoreException目的地:

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

        否则,如果满足以下条件之一,则抛出IndexOutOfBoundsException并且IndexOutOfBoundsException目的地:

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

        否则,如果来自位置srcPossrcPos+length-1的源数组的任何实际组件无法通过转换转换为目标数组的组件类型,则抛出ArrayStoreException 在这种情况下,令k是小于长度的最小非负整数, src[srcPos+无法将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
      • 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.vendor Java Runtime Environment vendor java.vendor.url Java vendor URL java.home Java installation directory java.vm.specification.version Java Virtual Machine specification version which may be interpreted as a 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 which may be interpreted as a 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 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)操作。

        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 ,则系统属性的当前集合被遗忘。

        参数
        props - 新的系统属性。
        异常
        SecurityException - 如果安全管理器存在,并且其 checkPropertiesAccess方法不允许访问系统属性。
        另请参见:
        getProperties()PropertiesSecurityExceptionSecurityManager.checkPropertiesAccess()
      • getenv

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

        如果存在安全管理员,则其checkPermission方法将被调用,具有RuntimePermission("getenv."+name)权限。 这可能会导致抛出SecurityException 如果不抛出异常,则返回变量name的值。

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

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

        参数
        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)获得的记录器发送消息,其中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运行时尚未准备好初始化具体的服务实现,则可能会导致问题。 可能在引导顺序早期加载并需要记录本地化消息的系统类应使用getLogger(java.lang.String)创建记录器,然后使用将资源束作为参数的日志方法。
        实现要求:
        返回的记录器将执行由LoggerFinder.getLocalizedLogger(name, bundle, module)指定的消息定位,其中module是呼叫者的模块。 在从堆栈中没有调用者帧的上下文调用System.getLogger的情况下(例如,当直接从JNI连接的线程调用)时,将抛出IllegalCallerException 要在这样的上下文中获取记录器,请使用将隐式标识为调用者的辅助类,或使用系统LoggerFinder来获取记录器。 请注意,做后者可能会迫切地初始化底层日志记录系统。
        参数
        name - 记录器的名称。
        bundle - 资源束。
        结果
        一个System.Logger的实例,它将使用提供的资源束进行消息定位。
        异常
        NullPointerException - 如果 namenullbundlenull
        IllegalCallerException - 如果堆栈上没有Java调用者帧。
        从以下版本开始:
        9
      • exit

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

        该方法在类Runtime调用exit方法。 此方法从不正常返回。

        呼叫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方法还没有被运行。 当控件从方法调用返回时,Java虚拟机已尽力完成所有未完成的定稿。

        呼叫System.runFinalization()有效地等效于呼叫:

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

        @Deprecated(since="1.2",
                    forRemoval=true)
        public static void runFinalizersOnExit​(boolean value)
        不推荐用于删除:此API元素将在以后的版本中被删除。 这种方法本质上是不安全的。 它可能导致在活动对象上调用finalizer,而其他线程同时操作这些对象,导致不稳定的行为或死锁。 此方法在将来的Java SE版本中可能会被删除。
        退出时启用或禁用最终化; 这样做指定了具有尚未自动调用的finalizer的所有对象的finalizer将在Java运行时退出之前运行。 默认情况下,退出时终止。

        如果有一个安全管理器,它的checkExit方法首先被调用为0作为参数,以确保退出是允许的。 这可能会导致SecurityException。

        参数
        value - 指示启用或禁用完成
        异常
        SecurityException - 如果存在安全管理员,并且其 checkExit方法不允许退出。
        从以下版本开始:
        1.1
        另请参见:
        Runtime.exit(int)Runtime.gc()SecurityManager.checkExit(int)
      • load

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

        呼叫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规范。 否则,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)