System
类包含几个有用的类字段和方法。它不能被实例化。System
类提供的功能包括标准输入、标准输出和错误输出流;访问外部定义的属性和环境变量;加载文件和库的方法;以及一个快速复制数组部分的实用方法。
- 自版本:
- 1.0
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic interface
System.Logger
实例记录的消息将被路由到底层日志框架使用的LoggerFinder
。static class
LoggerFinder
服务负责创建、管理和配置日志记录器到它使用的底层框架。 -
Field Summary
Modifier and TypeFieldDescriptionstatic final PrintStream
"标准"错误输出流。static final InputStream
"标准"输入流。static final PrintStream
"标准"输出流。 -
Method Summary
Modifier and TypeMethodDescriptionstatic void
从指定源数组的指定位置开始,复制数组的一部分到目标数组的指定位置。static String
clearProperty
(String key) 移除由指定键指示的系统属性。static Console
console()
返回与当前Java虚拟机关联的唯一Console
对象,如果有的话。static long
返回当前时间的毫秒数。static void
exit
(int status) 启动Java虚拟机的关闭序列。static void
gc()
运行Java虚拟机中的垃圾收集器。getenv()
返回当前系统环境的不可修改的字符串映射视图。static String
获取指定环境变量的值。static System.Logger
返回供调用者使用的Logger
实例。static System.Logger
getLogger
(String name, ResourceBundle bundle) 返回供调用者使用的可本地化的Logger
实例。static Properties
确定当前系统属性。static String
getProperty
(String key) 获取由指定键指示的系统属性。static String
getProperty
(String key, String def) 获取由指定键指示的系统属性。static SecurityManager
已弃用,将来会移除:此API元素可能会在将来的版本中移除。此方法仅在与安全管理器一起使用时有用,安全管理器已被弃用并可能在将来的版本中移除。static int
返回给定对象的哈希码,与给定对象的类是否覆盖hashCode()方法无关。static Channel
返回从创建此Java虚拟机的实体继承的通道。static String
返回系统相关的换行符字符串。static void
加载指定文件名的本机库。static void
loadLibrary
(String libname) 加载指定的本机库。static String
mapLibraryName
(String libname) 将库名称映射为表示本机库的特定于平台的字符串。static long
nanoTime()
返回正在运行的Java虚拟机的高分辨率时间源的当前值(以纳秒为单位)。static void
已弃用,将来会移除:此API元素可能会在将来的版本中移除。终结已被弃用并可能会被移除。static void
setErr
(PrintStream err) 重新分配"标准"错误输出流。static void
setIn
(InputStream in) 重新分配"标准"输入流。static void
setOut
(PrintStream out) 重新分配"标准"输出流。static void
setProperties
(Properties props) 将系统属性设置为Properties
参数。static String
setProperty
(String key, String value) 设置由指定键指示的系统属性。static void
已弃用,将来会移除:此API元素可能会在将来的版本中移除。此方法仅在与安全管理器一起使用时有用,安全管理器已被弃用并可能在将来的版本中移除。
-
Field Details
-
in
"标准"输入流。此流已经打开并准备提供输入数据。通常,此流对应于主机环境或用户指定的键盘输入或其他输入源。如果此流被包装在InputStreamReader
中,应使用Console.charset()
来获取字符集,或考虑使用Console.reader()
。- 参见:
-
out
"标准"输出流。此流已经打开并准备接受输出数据。通常,此流对应于主机环境或用户指定的显示输出或其他输出目的地。从字符到字节的转换所使用的编码等同于如果Console
存在,则使用Console.charset()
,否则使用stdout.encoding。对于简单的独立Java应用程序,写入输出数据的典型方法是:
System.out.println(data)
请参阅
PrintStream
类中的println
方法。- 参见:
-
err
"标准"错误输出流。此流已经打开并准备接受输出数据。通常,此流对应于主机环境或用户指定的显示输出或其他输出目的地。按照惯例,此输出流用于显示错误消息或其他信息,即使主要输出流(变量
out
的值)已被重定向到通常不会持续监视的文件或其他目的地。从字符到字节的转换所使用的编码等同于如果Console
存在,则使用Console.charset()
,否则使用stderr.encoding。- 参见:
-
-
Method Details
-
setIn
重新分配"标准"输入流。首先,如果存在安全管理器,则调用其checkPermission
方法,使用RuntimePermission("setIO")
权限来查看重新分配"标准"输入流是否可以。- 参数:
-
in
- 新的标准输入流。 - 抛出:
-
SecurityException
- 如果存在安全管理器且其checkPermission
方法不允许重新分配标准输入流。 - 自版本:
- 1.1
- 参见:
-
setOut
重新分配"标准"输出流。首先,如果存在安全管理器,则调用其checkPermission
方法,使用RuntimePermission("setIO")
权限来查看重新分配"标准"输出流是否可以。- 参数:
-
out
- 新的标准输出流 - 抛出:
-
SecurityException
- 如果存在安全管理器且其checkPermission
方法不允许重新分配标准输出流。 - 自版本:
- 1.1
- 参见:
-
setErr
重新分配"标准"错误输出流。首先,如果存在安全管理器,则调用其checkPermission
方法,使用RuntimePermission("setIO")
权限来查看重新分配"标准"错误输出流是否可以。- 参数:
-
err
- 新的标准错误输出流。 - 抛出:
-
SecurityException
- 如果存在安全管理器且其checkPermission
方法不允许重新分配标准错误输出流。 - 自版本:
- 1.1
- 另请参阅:
-
console
返回与当前Java虚拟机关联的唯一Console
对象,如果有的话。- 返回:
-
系统控制台,如果有的话,否则
null
。 - 自版本:
- 1.6
-
inheritedChannel
返回从创建此Java虚拟机的实体继承的通道。此方法返回通过调用系统范围默认inheritedChannel
方法获取的通道SelectorProvider
对象。除了网络导向通道描述中的
inheritedChannel
,此方法将来可能返回其他类型的通道。- 返回:
-
继承的通道,如果有的话,否则
null
。 - 抛出:
-
IOException
- 如果发生I/O错误 -
SecurityException
- 如果存在安全管理器且不允许访问该通道。 - 自版本:
- 1.5
-
setSecurityManager
Deprecated, for removal: This API element is subject to removal in a future version.This method is only useful in conjunction with the Security Manager, which is deprecated and subject to removal in a future release. Consequently, this method is also deprecated and subject to removal. There is no replacement for the Security Manager or this method.设置系统范围的安全管理器。如果已安装安全管理器,则此方法首先调用安全管理器的checkPermission
方法,使用RuntimePermission("setSecurityManager")
权限来确保替换现有安全管理器是可以的。这可能导致抛出SecurityException
。否则,参数将被建立为当前的安全管理器。如果参数为
null
且尚未建立安全管理器,则不会采取任何操作,方法只会简单地返回。- 实现注意:
-
在JDK实现中,如果Java虚拟机启动时未设置系统属性
java.security.manager
或设置为特殊标记"disallow
",则无法使用setSecurityManager
方法设置安全管理器。有关更多详细信息,请参阅SecurityManager
类规范的以下部分。 - 参数:
-
sm
- 安全管理器或null
- 抛出:
-
SecurityException
- 如果已经设置了安全管理器且其checkPermission
方法不允许替换 -
UnsupportedOperationException
- 如果sm
为非null且不允许动态设置安全管理器 - 另请参阅:
-
getSecurityManager
Deprecated, for removal: This API element is subject to removal in a future version.This method is only useful in conjunction with the Security Manager, which is deprecated and subject to removal in a future release. Consequently, this method is also deprecated and subject to removal. There is no replacement for the Security Manager or this method.获取系统范围的安全管理器。- 返回:
-
如果当前应用程序已经建立了安全管理器,则返回该安全管理器;否则返回
null
。 - 另请参阅:
-
currentTimeMillis
public static long currentTimeMillis()返回当前时间的毫秒数。请注意,返回值的时间单位是毫秒,但值的粒度取决于底层操作系统,可能更大。例如,许多操作系统以十毫秒为单位测量时间。有关"计算机时间"和协调世界时(UTC)之间可能出现的轻微差异的讨论,请参阅
Date
类的描述。- 返回:
- 当前时间与1970年1月1日午夜UTC之间的毫秒差。
- 另请参阅:
-
nanoTime
public static long nanoTime()返回正在运行的Java虚拟机的高分辨率时间源的当前值,以纳秒为单位。此方法仅用于测量经过的时间,与任何其他系统或挂钟时间概念无关。返回的值表示自某个固定但任意的起始时间(可能在未来,因此值可能为负)以来的纳秒数。所有对此方法的调用在Java虚拟机实例中使用相同的起始时间;其他虚拟机实例可能使用不同的起始时间。此方法提供纳秒精度,但不一定提供纳秒分辨率(即值更改的频率)- 除了保证分辨率至少与
currentTimeMillis()
一样好之外,不提供任何保证。连续调用之间的差异超过大约292年(263纳秒)将由于数值溢出而无法正确计算经过的时间。
此方法返回的值仅在同一Java虚拟机实例中获取两个这样的值之间的差异时才具有意义。
例如,要测量某些代码执行所需的时间:
long startTime = System.nanoTime(); // ... 被测量的代码 ... long elapsedNanos = System.nanoTime() - startTime;
要将经过的时间与超时进行比较,请使用
if (System.nanoTime() - startTime >= timeoutNanos) ...
if (System.nanoTime() >= startTime + timeoutNanos) ...
- 返回:
- 正在运行的Java虚拟机的高分辨率时间源的当前值,以纳秒为单位
- 自版本:
- 1.5
-
arraycopy
从指定源数组的指定位置开始,将数组的子序列复制到目标数组的指定位置。从由src
引用的源数组到由dest
引用的目标数组,将复制数组组件的数量等于length
参数。在源数组中的位置srcPos
到srcPos+length-1
的组件将分别复制到目标数组中的位置destPos
到destPos+length-1
。如果
src
和dest
参数引用同一个数组对象,则将执行复制,就好像首先将源数组中位置srcPos
到srcPos+length-1
的组件复制到具有length
组件的临时数组中,然后将临时数组的内容复制到目标数组的位置destPos
到destPos+length-1
。如果
dest
为null
,则会抛出NullPointerException
。如果
src
为null
,则会抛出NullPointerException
,并且目标数组不会被修改。否则,如果以下任一情况为真,则会抛出
ArrayStoreException
,并且目标数组不会被修改:src
参数引用不是数组的对象。dest
参数引用不是数组的对象。src
参数和dest
参数引用具有不同原始类型的数组。src
参数引用具有原始组件类型的数组,而dest
参数引用具有引用组件类型的数组。src
参数引用具有引用组件类型的数组,而dest
参数引用具有原始组件类型的数组。否则,如果以下任一情况为真,则会抛出
IndexOutOfBoundsException
,并且目标数组不会被修改:srcPos
参数为负数。destPos
参数为负数。length
参数为负数。srcPos+length
大于源数组的长度src.length
。destPos+length
大于目标数组的长度dest.length
。否则,如果源数组的实际组件从位置
srcPos
到srcPos+length-1
无法通过赋值转换为目标数组的组件类型,则会抛出ArrayStoreException
。在这种情况下,让k是小于长度的最小非负整数,使得src[srcPos+
k]
无法转换为目标数组的组件类型;当抛出异常时,源数组的组件从位置srcPos
到srcPos+
k-1
将已经被复制到目标数组的位置destPos
到destPos+
k-1
,并且目标数组的其他位置不会被修改。(由于已列出的限制,此段落实际上仅适用于两个数组都具有组件类型为引用类型的情况。)- 参数:
-
src
- 源数组。 -
srcPos
- 源数组中的起始位置。 -
dest
- 目标数组。 -
destPos
- 目标数据中的起始位置。 -
length
- 要复制的数组元素数量。 - 抛出:
-
IndexOutOfBoundsException
- 如果复制会导致访问数组边界外的数据。 -
ArrayStoreException
- 如果无法将src
数组中的元素存储到dest
数组中,因为类型不匹配。 -
NullPointerException
- 如果src
或dest
为null
。
-
identityHashCode
返回给定对象的哈希码,与默认方法hashCode()返回的哈希码相同,无论给定对象的类是否重写了hashCode()。空引用的哈希码为零。- 参数:
-
x
- 要计算哈希码的对象 - 返回:
- 哈希码
- 自版本:
- 1.1
- 参见:
-
getProperties
确定当前系统属性。首先,如果存在安全管理器,则调用其不带参数的checkPropertiesAccess
方法。这可能导致安全异常。用于
getProperty(String)
方法的当前系统属性集将作为Properties
对象返回。如果没有当前系统属性集,则首先创建并初始化系统属性集。该系统属性集包括以下每个键的值,除非相关值的描述指示该值是可选的。键 相关值的描述 java.version
Java运行时环境版本,可以解释为 Runtime.Version
如果在构建时,此运行时实现的规范经历了维护发布,则定义了
java.specification.maintenance.version
属性。当定义时,其值标识该维护发布。要指示第一个维护发布,此属性将具有值"1"
,要指示第二个维护发布,此属性将具有值"2"
,依此类推。系统属性值中的多个路径由平台的路径分隔符字符分隔。
请注意,即使安全管理器不允许
getProperties
操作,它也可能选择允许getProperty(String)
操作。- API注释:
-
更改标准系统属性可能会导致不可预测的结果,除非另有规定。 在初始化期间或首次使用时,属性值可能会被缓存。在使用
getProperties()
、setProperties(Properties)
、setProperty(String, String)
或clearProperty(String)
之后初始化设置标准属性可能不会产生预期效果。 - 实现注释:
-
除了标准系统属性外,系统属性可能包括以下键:
键 关联值的描述 jdk.module.path
应用程序模块路径 jdk.module.upgrade.path
升级模块路径 jdk.module.main
初始/主模块的模块名称 jdk.module.main.class
初始模块的主类名称 file.encoding
默认字符集的名称,默认为 UTF-8
。该属性可以在命令行上设置为值UTF-8
或COMPAT
。如果在命令行上设置为值COMPAT
,则在启动期间将该值替换为native.encoding
属性的值。将属性设置为除UTF-8
或COMPAT
之外的值会导致未指定的行为。 - 返回:
- 系统属性
- 抛出:
-
SecurityException
- 如果存在安全管理器且其checkPropertiesAccess
方法不允许访问系统属性。 - 参见:
-
lineSeparator
返回系统相关的换行符字符串。它始终返回相同的值 - 系统属性line.separator
的初始值。在UNIX系统上,它返回
"\n"
;在Microsoft Windows系统上,它返回"\r\n"
。- 返回:
- 系统相关的换行符字符串
- 自版本:
- 1.7
-
setProperties
将系统属性设置为Properties
参数。首先,如果存在安全管理器,则调用其不带参数的checkPropertiesAccess
方法。这可能导致安全异常。该参数成为供
getProperty(String)
方法使用的当前系统属性集。如果参数为null
,则当前系统属性集将被忘记。- API注释:
- 更改标准系统属性可能会导致不可预测的结果。有关详细信息,请参阅getProperties。
- 参数:
-
props
- 新的系统属性。 - 抛出:
-
SecurityException
- 如果存在安全管理器且其checkPropertiesAccess
方法不允许访问系统属性。 - 参见:
-
getProperty
获取指定键指示的系统属性。首先,如果存在安全管理器,则调用其以键作为参数的checkPropertyAccess
方法。这可能导致SecurityException。如果没有当前的系统属性集,则首先创建并初始化一组系统属性,方式与
getProperties
方法相同。- API注释:
- 更改标准系统属性可能会导致不可预测的结果。有关详细信息,请参阅getProperties。
- 参数:
-
key
- 系统属性的名称。 - 返回:
-
系统属性的字符串值,如果没有具有该键的属性,则返回
null
。 - 抛出:
-
SecurityException
- 如果存在安全管理器且其checkPropertyAccess
方法不允许访问指定的系统属性。 -
NullPointerException
- 如果key
为null
。 -
IllegalArgumentException
- 如果key
为空。 - 参见:
-
getProperty
获取指定键指示的系统属性。首先,如果存在安全管理器,则调用其以key
作为参数的checkPropertyAccess
方法。如果没有当前的系统属性集,则首先创建并初始化一组系统属性,方式与
getProperties
方法相同。- 参数:
-
key
- 系统属性的名称。 -
def
- 默认值。 - 返回:
- 系统属性的字符串值,如果没有具有该键的属性,则返回默认值。
- 抛出:
-
SecurityException
- 如果存在安全管理器且其checkPropertyAccess
方法不允许访问指定的系统属性。 -
NullPointerException
- 如果key
为null
。 -
IllegalArgumentException
- 如果key
为空。 - 参见:
-
setProperty
设置由指定键指示的系统属性。首先,如果存在安全管理器,则调用其SecurityManager.checkPermission
方法,参数为PropertyPermission(key, "write")
。这可能导致抛出SecurityException。如果没有抛出异常,则将指定的属性设置为给定值。- API注释:
- 更改标准系统属性可能会导致不可预测的结果。有关详细信息,请参阅getProperties。
- 参数:
-
key
- 系统属性的名称。 -
value
- 系统属性的值。 - 返回:
-
系统属性的先前值,如果没有,则返回
null
。 - 抛出:
-
SecurityException
- 如果存在安全管理器且其checkPermission
方法不允许设置指定的属性。 -
NullPointerException
- 如果key
或value
为null
。 -
IllegalArgumentException
- 如果key
为空。 - 自版本:
- 1.2
- 参见:
-
clearProperty
移除由指定键指示的系统属性。首先,如果存在安全管理器,则调用其SecurityManager.checkPermission
方法,参数为PropertyPermission(key, "write")
。这可能导致抛出SecurityException。如果没有抛出异常,则移除指定的属性。- API注释:
- 更改标准系统属性可能会导致不可预测的结果,除非另有规定。有关详细信息,请参阅getProperties方法。
- 参数:
-
key
- 要移除的系统属性的名称。 - 返回:
-
系统属性的先前字符串值,如果没有具有该键的属性,则返回
null
。 - 抛出:
-
SecurityException
- 如果存在安全管理器且其checkPropertyAccess
方法不允许访问指定的系统属性。 -
NullPointerException
- 如果key
为null
。 -
IllegalArgumentException
- 如果key
为空。 - 自版本:
- 1.5
- 另请参阅:
-
getenv
获取指定环境变量的值。环境变量是系统相关的外部命名值。如果存在安全管理器,则将调用其
checkPermission
方法,使用RuntimePermission("getenv."+name)
权限。这可能导致抛出SecurityException
。如果没有抛出异常,则返回变量name
的值。系统属性和环境变量在概念上都是名称和值之间的映射。这两种机制都可以用于将用户定义的信息传递给Java进程。环境变量具有更全局的影响,因为它们对定义它们的进程的所有后代都是可见的,而不仅仅是直接的Java子进程。它们可能具有略有不同的语义,例如在不同操作系统上的大小写不敏感性。因此,环境变量更有可能产生意外的副作用。最好在可能的情况下使用系统属性。应在希望产生全局效果或外部系统接口需要环境变量(如
PATH
)时使用环境变量。在UNIX系统上,
name
的字母大小写通常很重要,而在Microsoft Windows系统上通常不重要。例如,表达式System.getenv("FOO").equals(System.getenv("foo"))
在Microsoft Windows上可能为真。- 参数:
-
name
- 环境变量的名称 - 返回:
-
变量的字符串值,如果系统环境中未定义该变量,则返回
null
- 抛出:
-
NullPointerException
- 如果name
为null
-
SecurityException
- 如果存在安全管理器且其checkPermission
方法不允许访问环境变量name
- 另请参阅:
-
getenv
返回当前系统环境的不可修改的字符串映射视图。环境是从父进程传递给子进程的系统相关映射,从名称到值的映射。如果系统不支持环境变量,则返回一个空映射。
返回的映射永远不会包含空键或值。尝试查询空键或值的存在将抛出一个
NullPointerException
。尝试查询不是String
类型的键或值的存在将抛出一个ClassCastException
。返回的映射及其集合视图可能不遵守
Object.equals(java.lang.Object)
和Object.hashCode()
方法的一般契约。返回的映射在所有平台上通常区分大小写。
如果存在安全管理器,则将调用其
checkPermission
方法,使用RuntimePermission("getenv.*")
权限。这可能导致抛出一个SecurityException
。在向Java子进程传递信息时,通常优先使用系统属性而不是环境变量。
- 返回:
- 作为变量名称到值的映射的环境
- 抛出:
-
SecurityException
- 如果存在安全管理器且其checkPermission
方法不允许访问进程环境 - 自版本:
- 1.5
- 另请参阅:
-
getLogger
返回供调用者使用的Logger
实例。- API注释:
-
此方法可能延迟调用
LoggerFinder.getLogger
方法,以创建由日志后端提供的实际记录器,例如,允许在系统初始化时间获取记录器以允许在系统初始化时间获取记录器。 - 实现要求:
-
此方法返回的实例将通过调用
LoggerFinder.getLogger(name, module)
来路由消息到通过调用获得的记录器,其中module
是调用者的模块。在没有调用者帧的堆栈上下文中调用System.getLogger
的情况下(例如,直接从JNI附加的线程中调用),将抛出IllegalCallerException
。在这种情况下,要获取记录器,可以使用一个将被隐式标识为调用者的辅助类,或者使用系统LoggerFinder
来获取记录器。请注意,后者可能会急切地初始化底层的日志系统。 - 参数:
-
name
- 记录器的名称。 - 返回:
-
可供调用类使用的
System.Logger
实例。 - 抛出:
-
NullPointerException
- 如果name
为null
。 -
IllegalCallerException
- 如果堆栈上没有Java调用者帧。 - 自版本:
- 9
-
getLogger
返回供调用者使用的本地化实例的Logger
。返回的记录器将使用提供的资源包进行消息本地化。- API注释:
-
此方法旨在在系统完全初始化后使用。此方法可能触发立即加载和初始化
System.LoggerFinder
服务,如果Java运行时尚未准备好初始化具体的服务实现,则可能会导致问题。在引导序列早期加载并需要记录本地化消息的系统类应使用getLogger(java.lang.String)
创建记录器,然后使用带有资源包参数的日志方法。 - 实现要求:
-
返回的记录器将执行由
LoggerFinder.getLocalizedLogger(name, bundle, module)
指定的消息本地化,其中module
是调用者的模块。在没有调用者帧的堆栈上下文中调用System.getLogger
的情况下(例如,直接从JNI附加的线程中调用),将抛出IllegalCallerException
。在这种情况下,要获取记录器,可以使用一个将被隐式标识为调用者的辅助类,或者使用系统LoggerFinder
来获取记录器。请注意,后者可能会急切地初始化底层的日志系统。 - 参数:
-
name
- 记录器的名称。 -
bundle
- 一个资源包。 - 返回:
-
将使用提供的资源包进行消息本地化的
System.Logger
实例。 - 抛出:
-
NullPointerException
- 如果name
为null
或bundle
为null
。 -
IllegalCallerException
- 如果堆栈上没有Java调用者帧。 - 自版本:
- 9
-
exit
public static void exit(int status) 启动Java虚拟机的关闭序列。除非安全管理器拒绝退出,否则此方法会启动关闭序列(如果尚未启动),然后无限期地阻塞。此方法既不返回也不抛出异常;也就是说,它既不正常完成也不突然完成。参数用作状态码。按照惯例,非零状态码表示异常终止。
调用
System.exit(n)
实际上等效于调用:Runtime.getRuntime().exit(n)
- 实现注意事项:
-
关闭序列的启动由
Runtime.exit(int)
记录。 - 参数:
-
status
- 退出状态。 - 抛出:
-
SecurityException
- 如果存在安全管理器且其checkExit
方法不允许以指定状态退出。 - 参见:
-
gc
public static void gc()运行Java虚拟机中的垃圾收集器。调用
gc
方法表明Java虚拟机会努力回收未使用的对象,以便将它们当前占用的内存空间可供Java虚拟机重用。当方法调用返回控制权时,Java虚拟机已尽最大努力从所有未使用的对象中回收空间。不能保证此努力会回收任何特定数量的未使用对象,回收任何特定数量的空间,或在方法返回之前或之后的任何特定时间内完成,如果有的话。也不能保证此努力会确定任何特定数量对象的可达性变化,或者会清除和排队任何特定数量的Reference
对象。调用
System.gc()
实际上等效于调用:Runtime.getRuntime().gc()
- 参见:
-
runFinalization
Deprecated, for removal: This API element is subject to removal in a future version.Finalization has been deprecated for removal. SeeObject.finalize()
for background information and details about migration options.When running in a JVM in which finalization has been disabled or removed, no objects will be pending finalization, so this method does nothing.
运行任何待终结对象的终结方法。调用此方法表明Java虚拟机会努力运行已被发现为已丢弃但其finalize
方法尚未运行的对象的finalize
方法。当方法调用返回控制权时,Java虚拟机已尽最大努力完成所有未完成的终结。调用
System.runFinalization()
实际上等效于调用:Runtime.getRuntime().runFinalization()
- 参见Java语言规范:
-
12.6 类实例的终结
- 参见:
-
load
加载由文件名参数指定的本机库。文件名参数必须是绝对路径名。如果文件名参数在剥离任何特定于平台的库前缀、路径和文件扩展名后指示一个名为L的库,且名为L的本机库已静态链接到VM,则调用库导出的JNI_OnLoad_L函数,而不是尝试加载动态库。文件名匹配参数不必存在于文件系统中。有关更多详细信息,请参阅JNI规范。否则,文件名参数将以实现相关的方式映射到本机库映像。调用
System.load(name)
实际上等效于调用:Runtime.getRuntime().load(name)
- 参数:
-
filename
- 要加载的文件。 - 抛出:
-
SecurityException
- 如果存在安全管理器且其checkLink
方法不允许加载指定的动态库 -
UnsatisfiedLinkError
- 如果文件名不是绝对路径名、本机库未与VM静态链接,或主机系统无法将库映射到本机库映像。 -
NullPointerException
- 如果filename
为null
- 外部规范
- 参见:
-
loadLibrary
加载由libname
参数指定的本机库。libname
参数不得包含任何特定于平台的前缀、文件扩展名或路径。如果名为libname
的本机库已静态链接到VM,则调用库导出的JNI_OnLoad_libname
函数。有关更多详细信息,请参阅JNI规范。否则,libname
参数将从系统库位置加载,并以实现相关的方式映射到本机库映像。调用
System.loadLibrary(name)
实际上等效于调用Runtime.getRuntime().loadLibrary(name)
- 参数:
-
libname
- 库的名称。 - 抛出:
-
SecurityException
- 如果存在安全管理器且其checkLink
方法不允许加载指定的动态库 -
UnsatisfiedLinkError
- 如果libname
参数包含文件路径、本机库未与VM静态链接,或主机系统无法将库映射到本机库映像。 -
NullPointerException
- 如果libname
为null
- 外部规范
- 参见:
-
mapLibraryName
将库名称映射为表示本机库的特定于平台的字符串。- 参数:
-
libname
- 库的名称。 - 返回:
- 一个特定于平台的本机库名称。
- 抛出:
-
NullPointerException
- 如果libname
为null
- 自:
- 1.2
- 参见:
-