public final class System extends Object
System
类包含几个有用的类字段和方法。
它不能被实例化。
System
类提供的System
包括标准输入,标准输出和错误输出流; 访问外部定义的属性和环境变量; 一种加载文件和库的方法; 以及用于快速复制阵列的一部分的实用方法。
Modifier and Type | Field and Description |
---|---|
static PrintStream |
err
“标准”错误输出流。
|
static InputStream |
in
“标准”输入流。
|
static PrintStream |
out
“标准”输出流。
|
Modifier and Type | Method and Description |
---|---|
static void |
arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
将指定源数组中的数组从指定位置复制到目标数组的指定位置。
|
static String |
clearProperty(String key)
删除指定键指定的系统属性。
|
static Console |
console()
返回与当前Java虚拟机关联的唯一的 Console 对象(如果有)。
|
static long |
currentTimeMillis()
返回当前时间(以毫秒为单位)。
|
static void |
exit(int status)
终止当前运行的Java虚拟机。
|
static void |
gc()
运行垃圾回收器。
|
static Map<String,String> |
getenv()
返回当前系统环境的不可修改的字符串映射视图。
|
static String |
getenv(String name)
获取指定环境变量的值。
|
static Properties |
getProperties()
确定当前的系统属性。
|
static String |
getProperty(String key)
获取指定键指示的系统属性。
|
static String |
getProperty(String key, String def)
获取指定键指示的系统属性。
|
static SecurityManager |
getSecurityManager()
获取系统安全界面。
|
static int |
identityHashCode(Object x)
返回与默认方法hashCode()返回的给定对象相同的哈希码,无论给定对象的类是否覆盖了hashCode()。
|
static Channel |
inheritedChannel()
返回从创建此Java虚拟机的实体继承的通道。
|
static String |
lineSeparator()
返回与系统相关的行分隔符字符串。
|
static void |
load(String filename)
加载由filename参数指定的本机库。
|
static void |
loadLibrary(String libname)
加载
libname 参数指定的本机库。
|
static String |
mapLibraryName(String libname)
将库名称映射到表示本地库的平台特定字符串。
|
static long |
nanoTime()
以纳秒为单位返回正在运行的Java虚拟机的高分辨率时间源的当前值。
|
static void |
runFinalization()
运行任何对象等待定稿的最终化方法。
|
static void |
runFinalizersOnExit(boolean value)
已弃用
这种方法本质上是不安全的。
它可能导致在活动对象上调用finalizer,而其他线程同时操作这些对象,导致不稳定的行为或死锁。
|
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 |
setSecurityManager(SecurityManager s)
设置系统安全性。
|
public static final InputStream in
public static final PrintStream out
对于简单的独立Java应用程序,编写一行输出数据的典型方法是:
System.out.println(data)
见println
类方法PrintStream
。
PrintStream.println()
,
PrintStream.println(boolean)
,
PrintStream.println(char)
,
PrintStream.println(char[])
,
PrintStream.println(double)
,
PrintStream.println(float)
,
PrintStream.println(int)
,
PrintStream.println(long)
,
PrintStream.println(java.lang.Object)
,
PrintStream.println(java.lang.String)
public static final PrintStream err
通常,此流对应于显示输出或由主机环境或用户指定的另一个输出目标。 按照惯例,此输出流用于显示错误消息或应该立即引起用户注意的其他信息,即使主要输出流(变量out
的值已重定向到文件或其他目标,即通常不会持续监控。
public static void setIn(InputStream in)
首先,如果有一个安全管理器,它的checkPermission
方法被调用一个RuntimePermission("setIO")
权限,看看是否可以重新分配“标准”输入流。
in
- 新的标准输入流。
SecurityException
- 如果存在安全管理员,并且其
checkPermission
方法不允许重新分配标准输入流。
SecurityManager.checkPermission(java.security.Permission)
, RuntimePermission
public static void setOut(PrintStream out)
首先,如果有一个安全管理器,它的checkPermission
方法被调用一个RuntimePermission("setIO")
权限,看看是否可以重新分配“标准”输出流。
out
- 新的标准输出流
SecurityException
- 如果存在安全管理员,并且其
checkPermission
方法不允许重新分配标准输出流。
SecurityManager.checkPermission(java.security.Permission)
, RuntimePermission
public static void setErr(PrintStream err)
首先,如果有一个安全管理员,它的checkPermission
方法被调用一个RuntimePermission("setIO")
权限,看看是否可以重新分配“标准”错误输出流。
err
- 新的标准错误输出流。
SecurityException
- 如果存在安全管理员,并且其
checkPermission
方法不允许重新分配标准错误输出流。
SecurityManager.checkPermission(java.security.Permission)
, RuntimePermission
public static Console console()
Console
对象(如果有)。
public static Channel inheritedChannel() throws IOException
该方法返回通过调用系统范围默认SelectorProvider
对象的inheritedChannel
方法获得的通道。
除了inheritedChannel
中描述的面向网络的通道之外,此方法可能会在将来返回其他类型的通道。
IOException
- 如果发生I / O错误
SecurityException
- 如果存在安全管理员,并且不允许访问该通道。
public static void setSecurityManager(SecurityManager s)
如果已安装了安全管理员,则该方法首先使用RuntimePermission("setSecurityManager")
权限调用安全管理器的checkPermission
方法,以确保替换现有的安全管理器。 这可能会导致投掷SecurityException
。
否则,该参数被建立为当前的安全管理器。 如果参数为null
,并且没有建立安全管理器,则不执行任何操作,该方法只返回。
s
- 安全管理员。
SecurityException
- 如果安全管理器已经设置,并且其
checkPermission
方法不允许替换它。
getSecurityManager()
, SecurityManager.checkPermission(java.security.Permission)
, RuntimePermission
public static SecurityManager getSecurityManager()
null
。
setSecurityManager(java.lang.SecurityManager)
public static long currentTimeMillis()
有关“计算机时间”和协调世界时间(UTC)之间可能出现的轻微差异的讨论,请参阅类别Date
的说明。
Date
public static long nanoTime()
该方法只能用于测量经过时间,与系统或挂钟时间的任何其他概念无关。 返回的值表示纳秒,因为一些固定但任意的起始时间(可能在将来,所以值可能是负数)。 在Java虚拟机的实例中,该方法的所有调用都使用相同的来源; 其他虚拟机实例可能会使用不同的来源。
该方法提供纳秒精度,但不一定是纳秒分辨率(即,值的变化频率) - 除了分辨率至少与currentTimeMillis()
的分辨率不同之外,不作任何保证 。
跨越大约292年(2 63纳秒)的连续呼叫的差异将无法正确计算由于数字溢出所造成的时间。
仅当在Java虚拟机的同一实例中获得的两个此类值之间的差异被计算时,此方法返回的值才会变得有意义。
例如,测量代码执行多长时间:
long startTime = System.nanoTime(); // ... the code being measured ... long estimatedTime = System.nanoTime() - startTime;
比较两个nanoTime值
long t0 = System.nanoTime(); ... long t1 = System.nanoTime();
一个应该使用t1 - t0 < 0
,而不是t1 < t0
,因为数值溢出的可能性。
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
。
如果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+
ķ ]
不能转换到组件类型目标数组的; 当抛出异常时,位置srcPos
至srcPos+
k -1
源阵列组件将已经被复制到目标阵列位置destPos
至destPos+
k -1
,并且目标阵列的其他位置将不会被修改。 (由于限制已经列出,本段仅适用于两个数组都具有引用类型的组件类型的情况。)
src
- 源数组。
srcPos
- 源数组中的起始位置。
dest
- 目标数组。
destPos
- 目的地数据中的起始位置。
length
- 要复制的数组元素的数量。
IndexOutOfBoundsException
- 如果复制将导致数据外部数据界限的访问。
ArrayStoreException
- 如果由于类型不匹配,
src
数组中的元素无法存储到
dest
数组中。
NullPointerException
- 如果
src
或
dest
是
null
。
public static int identityHashCode(Object x)
x
- 要计算hashCode的对象
public static Properties getProperties()
首先,如果有一个安全管理器,它的checkPropertiesAccess
方法被调用没有参数。 这可能会导致安全例外。
getProperty(String)
方法使用的当前系统属性集作为Properties
对象返回。 如果没有当前的系统属性集,则首先创建和初始化一组系统属性。 此组系统属性始终包含以下键的值:
java.version
Java Runtime Environment 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 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 java.vm.vendor
Java Virtual Machine implementation vendor java.vm.name
Java Virtual Machine implementation name java.specification.version
Java Runtime Environment specification 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 java.ext.dirs
Path of extension directory or directories 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)
操作。
SecurityException
- 如果存在安全管理员,并且其
checkPropertiesAccess
方法不允许访问系统属性。
setProperties(java.util.Properties)
, SecurityException
, SecurityManager.checkPropertiesAccess()
, Properties
public static String lineSeparator()
line.separator
的初始值。
在UNIX系统上,它返回"\n"
; 在Microsoft Windows系统上,它返回"\r\n"
。
public static void setProperties(Properties props)
Properties
参数。
首先,如果有一个安全管理器,它的checkPropertiesAccess
方法被调用没有参数。 这可能会导致安全例外。
该参数成为getProperty(String)
方法使用的当前系统属性集。 如果参数是null
,则系统属性的当前集合被遗忘。
props
- 新的系统属性。
SecurityException
- 如果存在安全管理员,并且其
checkPropertiesAccess
方法不允许访问系统属性。
getProperties()
, Properties
, SecurityException
, SecurityManager.checkPropertiesAccess()
public static String getProperty(String key)
首先,如果有一个安全管理器,则调用其checkPropertyAccess
方法作为其参数。 这可能会导致SecurityException。
如果没有当前的系统属性集,则以与getProperties
方法相同的方式首先创建和初始化一组系统属性。
key
- 系统属性的名称。
null
。
SecurityException
- 如果安全管理器存在,并且其
checkPropertyAccess
方法不允许访问指定的系统属性。
NullPointerException
- 如果
key
是
null
。
IllegalArgumentException
- 如果
key
为空。
setProperty(java.lang.String, java.lang.String)
, SecurityException
, SecurityManager.checkPropertyAccess(java.lang.String)
, getProperties()
public static String getProperty(String key, String def)
首先,如果有一个安全管理器,它的checkPropertyAccess
方法被调用与key
作为其参数。
如果没有当前的系统属性集,则首先以与getProperties
方法相同的方式创建和初始化一组系统属性。
key
- 系统属性的名称。
def
- 默认值。
SecurityException
- 如果存在安全管理员,并且其
checkPropertyAccess
方法不允许访问指定的系统属性。
NullPointerException
- 如果
key
是
null
。
IllegalArgumentException
- 如果
key
为空。
setProperty(java.lang.String, java.lang.String)
,
SecurityManager.checkPropertyAccess(java.lang.String)
,
getProperties()
public static String setProperty(String key, String value)
首先,如果一个安全管理员存在,它的SecurityManager.checkPermission
方法被调用与一个PropertyPermission(key, "write")
权限。 这可能导致抛出SecurityException。 如果没有引发异常,则将指定的属性设置为给定值。
key
- 系统属性的名称。
value
- 系统属性的值。
null
。
SecurityException
- 如果存在安全管理员,并且其
checkPermission
方法不允许设置指定的属性。
NullPointerException
- 如果
key
或
value
是
null
。
IllegalArgumentException
- 如果
key
为空。
getProperty(java.lang.String)
, getProperty(java.lang.String)
, getProperty(java.lang.String, java.lang.String)
, PropertyPermission
, SecurityManager.checkPermission(java.security.Permission)
public static String clearProperty(String key)
首先,如果一个安全管理器存在,它的SecurityManager.checkPermission
方法被调用一个PropertyPermission(key, "write")
权限。 这可能导致抛出SecurityException。 如果没有异常抛出,指定的属性将被删除。
key
- 要删除的系统属性的名称。
null
。
SecurityException
- 如果存在安全管理员,并且其
checkPropertyAccess
方法不允许访问指定的系统属性。
NullPointerException
- 如果
key
是
null
。
IllegalArgumentException
- 如果
key
为空。
getProperty(java.lang.String)
, setProperty(java.lang.String, java.lang.String)
, Properties
, SecurityException
, SecurityManager.checkPropertiesAccess()
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
- 如果
name
是
null
SecurityException
- 如果存在安全管理员,并且其
checkPermission
方法不允许访问环境变量
name
getenv()
,
ProcessBuilder.environment()
public static Map<String,String> getenv()
如果系统不支持环境变量,则返回空的地图。
返回的地图永远不会包含空值或值。 尝试查询空键或值的存在将抛出一个NullPointerException
。 试图查询一个不是String
类型的键或值的存在将会抛出一个ClassCastException
。
返回的地图及其收藏意见可能不符合Object.equals(java.lang.Object)
和Object.hashCode()
方法的一般合同。
返回的地图通常在所有平台上都区分大小写。
如果存在安全管理员,则其checkPermission
方法RuntimePermission
("getenv.*")RuntimePermission
("getenv.*")权限进行调用。 这可能会导致SecurityException
被抛出。
当将信息传递给Java子进程时,通常优先于环境变量system properties。
SecurityException
- 如果存在安全管理员,并且其
checkPermission
方法不允许访问进程环境
getenv(String)
,
ProcessBuilder.environment()
public static void exit(int status)
此方法调用exit
类方法Runtime
。 此方法从不正常返回。
电话System.exit(n)
有效地等效于通话:
Runtime.getRuntime().exit(n)
status
- 退出状态。
SecurityException
- 如果存在安全管理员,并且其
checkExit
方法不允许以指定状态退出。
Runtime.exit(int)
public static void gc()
调用gc
方法表明,Java虚拟机花费了回收未使用对象的努力,以使其当前占用的内存可以快速重用。 当控件从方法调用返回时,Java虚拟机已经尽力从所有丢弃的对象中回收空间。
电话System.gc()
有效地等效于通话:
Runtime.getRuntime().gc()
Runtime.gc()
public static void runFinalization()
调用此方法表明,Java虚拟机花费了运行finalize
对象的方法,这些方法已被发现被丢弃,但其finalize
方法尚未运行。 当控件从方法调用返回时,Java虚拟机已尽力完成所有未完成的定稿。
电话System.runFinalization()
有效地等效于通话:
Runtime.getRuntime().runFinalization()
@Deprecated public static void runFinalizersOnExit(boolean value)
如果有一个安全管理器,它的checkExit
方法首先被调用为0作为参数,以确保退出是允许的。 这可能会导致SecurityException。
value
- 指示启用或禁用完成
SecurityException
- 如果存在安全管理员,并且其
checkExit
方法不允许退出。
Runtime.exit(int)
,
Runtime.gc()
,
SecurityManager.checkExit(int)
public static void load(String filename)
电话System.load(name)
有效地等效于通话:
Runtime.getRuntime().load(name)
filename
- 要加载的文件。
SecurityException
- 如果存在安全管理员,并且其
checkLink
方法不允许加载指定的动态库
UnsatisfiedLinkError
- 如果文件名不是绝对路径名称,则本地库不会与VM静态链接,或者该库不能由主机系统映射到本机库映像。
NullPointerException
- 如果
filename
是
null
Runtime.load(java.lang.String)
,
SecurityManager.checkLink(java.lang.String)
public static void loadLibrary(String libname)
libname
参数指定的本机库。
libname
参数不能包含任何平台特定的前缀,文件扩展名或路径。
如果名为libname
的本机库与虚拟机静态链接,则调用库导出的JNI_OnLoad_ libname
函数。
有关详细信息,请参阅JNI规范。
否则,libname参数从系统库位置加载,并以实现相关的方式映射到本机库映像。
电话System.loadLibrary(name)
有效地等效于通话
Runtime.getRuntime().loadLibrary(name)
libname
- 图书馆的名称。
SecurityException
- 如果存在安全管理员,并且其
checkLink
方法不允许加载指定的动态库
UnsatisfiedLinkError
- 如果libname参数包含文件路径,本机库不会与虚拟机静态链接,或者该库不能由主机系统映射到本机库映像。
NullPointerException
- 如果
libname
是
null
Runtime.loadLibrary(java.lang.String)
,
SecurityManager.checkLink(java.lang.String)
public static String mapLibraryName(String libname)
libname
- 图书馆的名称。
NullPointerException
- 如果
libname
是
null
loadLibrary(java.lang.String)
,
ClassLoader.findLibrary(java.lang.String)