public final class System
extends Object
java.lang.Object | |
↳ | java.lang.System |
System
类包含几个有用的类字段和方法。 它不能被实例化。
System
类提供的System
包括标准输入,标准输出和错误输出流; 访问外部定义的属性和环境变量; 加载文件和库的手段; 以及用于快速复制数组的一部分的实用方法。
Fields |
|
---|---|
public static final PrintStream |
err “标准”错误输出流。 |
public static final InputStream |
in “标准”输入流。 |
public static final PrintStream |
out “标准”输出流。 |
Public methods |
|
---|---|
static void |
arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 将指定源数组中的数组从指定位置开始复制到目标数组的指定位置。 |
static String |
clearProperty(String key) 删除由指定键指示的系统属性。 |
static Console |
console() 返回与当前Java虚拟机关联的唯一 |
static long |
currentTimeMillis() 以毫秒为单位返回当前时间。 |
static void |
exit(int status) 终止当前运行的Java虚拟机。 |
static void |
gc() 运行垃圾回收器。 |
static Properties |
getProperties() 确定当前的系统属性。 |
static String |
getProperty(String key, String def) 获取由指定键指示的系统属性。 |
static String |
getProperty(String key) 获取由指定键指示的系统属性。 |
static SecurityManager |
getSecurityManager() 总是在Android中返回 |
static String |
getenv(String name) 获取指定环境变量的值。 |
static Map<String, String> |
getenv() 返回当前系统环境的不可修改的字符串映射视图。 |
static int |
identityHashCode(Object x) 无论给定对象的类是否覆盖hashCode(),都将返回给定对象的哈希码,与默认方法hashCode()返回的哈希码相同。 |
static Channel |
inheritedChannel() 返回从创建此Java虚拟机的实体继承的通道。 |
static String |
lineSeparator() 返回系统相关的行分隔符字符串。 |
static void |
load(String filename) 从本地文件系统加载具有指定文件名的代码文件作为动态库。 |
static void |
loadLibrary(String libname) 加载参数 |
static String |
mapLibraryName(String libname) 将库名映射到代表本地库的平台特定字符串中。 |
static long |
nanoTime() 返回正在运行的Java虚拟机的高分辨率时间源的当前值,以纳秒为单位。 |
static void |
runFinalization() 运行任何挂起的对象的终止方法。 |
static void |
runFinalizersOnExit(boolean value) 此方法在API级别1中已弃用。此方法本质上不安全。 这可能会导致终结器在活动对象上被调用,而其他线程同时操作这些对象,从而导致不稳定的行为或死锁。 |
static void |
setErr(PrintStream err) 重新分配“标准”错误输出流。 |
static void |
setIn(InputStream in) 重新分配“标准”输入流。 |
static void |
setOut(PrintStream out) 重新分配“标准”输出流。 |
static void |
setProperties(Properties props) 尝试设置所有系统属性。 |
static String |
setProperty(String key, String value) 设置由指定键指示的系统属性。 |
static void |
setSecurityManager(SecurityManager sm) 抛出 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
PrintStream err
“标准”错误输出流。 该流已经打开并准备好接受输出数据。
通常,此流对应于由主机环境或用户指定的显示输出或其他输出目标。 按照惯例,即使主要输出流(变量out
的值)已被重定向到文件或其他目标文件或其他目的地,该输出流也用于显示错误消息或应该立即引起用户注意的其他信息通常不会连续监测。
PrintStream out
“标准”输出流。 该流已经打开并准备好接受输出数据。 通常,此流对应于由主机环境或用户指定的显示输出或其他输出目标。
对于简单的独立Java应用程序,编写一行输出数据的典型方法是:
System.out.println(data)
见 println
类方法 PrintStream
。
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
中的组件 srcPos+length-1
被复制到具有 length
组件的临时数组,然后临时数组的内容被复制到位置 destPos
通过目的地阵列的 destPos+length-1
。
如果 dest
是 null
,则引发 NullPointerException
。
如果 src
是 null
,则 NullPointerException
被抛出,并且目标阵列不被修改。
否则,如果以下任一情况属实, ArrayStoreException
引发 ArrayStoreException
,并且目标未被修改:
src
argument refers to an object that is not an array. dest
argument refers to an object that is not an array. src
argument and dest
argument refer to arrays whose component types are different primitive types. src
argument refers to an array with a primitive component type and the dest
argument refers to an array with a reference component type. src
argument refers to an array with a reference component type and the dest
argument refers to an array with a primitive component type. 否则,如果以下任一情况属实,则引发 IndexOutOfBoundsException
且目标未被修改:
srcPos
argument is negative. destPos
argument is negative. length
argument is negative. srcPos+length
is greater than src.length
, the length of the source array. destPos+length
is greater than dest.length
, the length of the destination array. 否则,如果来自位置srcPos
到srcPos+length-1
的源数组的任何实际组件srcPos
分配转换转换为目标数组的组件类型,则会引发ArrayStoreException
。 在这种情况下,假设k是小于长度的最小非负整数,从而无法将src[srcPos+
k ]
转换为目标数组的组件类型; 当引发异常时,从位置srcPos
到srcPos+
k -1
源阵列组件已经被复制到目标阵列位置destPos
到destPos+
k -1
并且目标阵列的其他位置将不会被修改。 (由于已经列出了限制,本段仅适用于两个数组都具有引用类型的组件类型的情况。)
Parameters | |
---|---|
src |
Object : the source array. |
srcPos |
int : starting position in the source array. |
dest |
Object : the destination array. |
destPos |
int : starting position in the destination data. |
length |
int : the number of array elements to be copied. |
Throws | |
---|---|
IndexOutOfBoundsException |
if copying would cause access of data outside array bounds. |
ArrayStoreException |
if an element in the src array could not be stored into the dest array because of a type mismatch. |
NullPointerException |
if either src or dest is null . |
String clearProperty (String key)
删除由指定键指示的系统属性。
Parameters | |
---|---|
key |
String : the name of the system property to be removed. |
Returns | |
---|---|
String |
the previous string value of the system property, or null if there was no property with that key. |
Throws | |
---|---|
NullPointerException |
if key is null . |
IllegalArgumentException |
if key is empty. |
Console console ()
返回与当前Java虚拟机关联的唯一 Console
对象(如果有)。
Returns | |
---|---|
Console |
The system console, if any, otherwise null. |
long currentTimeMillis ()
以毫秒为单位返回当前时间。 请注意,尽管返回值的时间单位是毫秒,但其值的粒度取决于底层操作系统,可能会更大。 例如,许多操作系统以几十毫秒为单位来测量时间。
有关“计算机时间”与协调通用时间(UTC)之间可能出现的细微差异的讨论,请参阅类别 Date
的说明。
Returns | |
---|---|
long |
the difference, measured in milliseconds, between the current time and midnight, January 1, 1970 UTC. |
也可以看看:
void exit (int status)
终止当前运行的Java虚拟机。 这个论点充当了一个状态代码; 按照惯例,非零状态码表示异常终止。
此方法在类Runtime
调用exit
方法。 此方法从不正常返回。
通话 System.exit(n)
实际上等同于通话:
Runtime.getRuntime().exit(n)
Parameters | |
---|---|
status |
int : exit status. |
Throws | |
---|---|
SecurityException |
if a security manager exists and its checkExit method doesn't allow exit with the specified status. |
也可以看看:
void gc ()
运行垃圾回收器。
调用gc
方法表明Java虚拟机花费大量的工作来回收未使用的对象,以便使它们当前占用的内存可供快速重用。 当控制从方法调用返回时,Java虚拟机已尽最大努力从所有被丢弃的对象中回收空间。
通话 System.gc()
实际上等同于通话:
Runtime.getRuntime().gc()
也可以看看:
Properties getProperties ()
确定当前的系统属性。
以下属性总是由Dalvik VM提供:
Name | Meaning | Example |
file.separator | separator |
/ |
java.class.path | System class path | . |
java.class.version | (Not useful on Android) | 50.0 |
java.compiler | (Not useful on Android) | Empty |
java.ext.dirs | (Not useful on Android) | Empty |
java.home | Location of the VM on the file system | /system |
java.io.tmpdir | See createTempFile(String, String) |
/sdcard |
java.library.path | Search path for JNI libraries | /vendor/lib:/system/lib |
java.vendor | Human-readable VM vendor | The Android Project |
java.vendor.url | URL for VM vendor's web site | http://www.android.com/ |
java.version | (Not useful on Android) | 0 |
java.specification.version | VM libraries version | 0.9 |
java.specification.vendor | VM libraries vendor | The Android Project |
java.specification.name | VM libraries name | Dalvik Core Library |
java.vm.version | VM implementation version | 1.2.0 |
java.vm.vendor | VM implementation vendor | The Android Project |
java.vm.name | VM implementation name | Dalvik |
java.vm.specification.version | VM specification version | 0.9 |
java.vm.specification.vendor | VM specification vendor | The Android Project |
java.vm.specification.name | VM specification name | Dalvik Virtual Machine Specification |
line.separator | The system line separator | \n |
os.arch | OS architecture | armv7l |
os.name | OS (kernel) name | Linux |
os.version | OS (kernel) version | 2.6.32.9-g103d848 |
path.separator | See pathSeparator |
: |
user.dir | Base of non-absolute paths | / |
user.home | (Not useful on Android) | Empty |
user.name | (Not useful on Android) | Empty |
系统属性值中的多个路径由平台的路径分隔符分隔。
Returns | |
---|---|
Properties |
the system properties |
String getProperty (String key, String def)
获取由指定键指示的系统属性。
首先,如果有安全管理器, checkPropertyAccess
key
作为参数调用其 checkPropertyAccess
方法。
如果没有当前的一组系统属性,则首先以与 getProperties
方法相同的方式创建和初始化一组系统属性。
Parameters | |
---|---|
key |
String : the name of the system property. |
def |
String : a default value. |
Returns | |
---|---|
String |
the string value of the system property, or the default value if there is no property with that key. |
Throws | |
---|---|
NullPointerException |
if key is null . |
IllegalArgumentException |
if key is empty. |
String getProperty (String key)
获取由指定键指示的系统属性。 如果没有当前的一组系统属性,则首先以与getProperties
方法相同的方式创建和初始化一组系统属性。
Parameters | |
---|---|
key |
String : the name of the system property. |
Returns | |
---|---|
String |
the string value of the system property, or null if there is no property with that key. |
Throws | |
---|---|
NullPointerException |
if key is null . |
IllegalArgumentException |
if key is empty. |
SecurityManager getSecurityManager ()
始终在Android中返回 null
Returns | |
---|---|
SecurityManager |
null in Android |
String getenv (String name)
获取指定环境变量的值。 环境变量是一个与系统相关的外部命名值。
如果存在安全管理器, checkPermission
使用
权限调用其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上可能是正确的。
Parameters | |
---|---|
name |
String : the name of the environment variable |
Returns | |
---|---|
String |
the string value of the variable, or null if the variable is not defined in the system environment |
Throws | |
---|---|
NullPointerException |
if name is null |
SecurityException |
if a security manager exists and its checkPermission method doesn't allow access to the environment variable name |
也可以看看:
Map<String, String> getenv ()
返回当前系统环境的不可修改的字符串映射视图。 该环境是从名称到从父进程传递到子进程的值的依赖于系统的映射。
如果系统不支持环境变量,则返回空映射。
返回的映射永远不会包含空键或值。 尝试查询空键或值的存在将抛出NullPointerException
。 试图查询非String
类型的键或值的存在将会抛出ClassCastException
。
返回的地图及其收集视图可能不服从 equals(Object)
和 hashCode()
方法的一般合同。
返回的映射在所有平台上通常都区分大小写。
如果安全管理器存在,则其checkPermission
方法被调用并具有
权限。 这可能会导致RuntimePermission
("getenv.*")SecurityException
被抛出。
将信息传递给Java子 进程时 ,通常优先于环境变量 system properties 。
Returns | |
---|---|
Map<String, String> |
the environment as a map of variable names to values |
Throws | |
---|---|
SecurityException |
if a security manager exists and its checkPermission method doesn't allow access to the process environment |
也可以看看:
int identityHashCode (Object x)
无论给定对象的类是否覆盖hashCode(),都将返回给定对象的哈希码,与默认方法hashCode()返回的哈希码相同。 空引用的哈希码为零。
Parameters | |
---|---|
x |
Object : object for which the hashCode is to be calculated |
Returns | |
---|---|
int |
the hashCode |
Channel inheritedChannel ()
返回从创建此Java虚拟机的实体继承的通道。
此方法返回通过调用系统范围的默认 SelectorProvider
对象的 inheritedChannel
方法获得的通道。
除了 inheritedChannel
描述的面向网络的通道 inheritedChannel
,此方法将来还可能会返回其他类型的通道。
Returns | |
---|---|
Channel |
The inherited channel, if any, otherwise null. |
Throws | |
---|---|
IOException |
If an I/O error occurs |
SecurityException |
If a security manager is present and it does not permit access to the channel. |
String lineSeparator ()
返回系统相关的行分隔符字符串。 它始终返回相同的值 - system property line.separator
的初始值。
在UNIX系统上,它返回"\n"
; 在Microsoft Windows系统上,它返回"\r\n"
。
Returns | |
---|---|
String |
void load (String filename)
从本地文件系统加载具有指定文件名的代码文件作为动态库。 filename参数必须是完整的路径名称。
通话 System.load(name)
实际上等同于通话:
Runtime.getRuntime().load(name)
Parameters | |
---|---|
filename |
String : the file to load. |
Throws | |
---|---|
SecurityException |
if a security manager exists and its checkLink method doesn't allow loading of the specified dynamic library |
UnsatisfiedLinkError |
if the file does not exist. |
NullPointerException |
if filename is null |
void loadLibrary (String libname)
加载参数libname
指定的系统库。 库名称映射到实际系统库的方式取决于系统。
通话 System.loadLibrary(name)
实际上等同于通话
Runtime.getRuntime().loadLibrary(name)
Parameters | |
---|---|
libname |
String : the name of the library. |
Throws | |
---|---|
SecurityException |
if a security manager exists and its checkLink method doesn't allow loading of the specified dynamic library |
UnsatisfiedLinkError |
if the library does not exist. |
NullPointerException |
if libname is null |
String mapLibraryName (String libname)
将库名映射到代表本地库的平台特定字符串中。
Parameters | |
---|---|
libname |
String : the name of the library. |
Returns | |
---|---|
String |
a platform-dependent native library name. |
Throws | |
---|---|
NullPointerException |
if libname is null |
long nanoTime ()
返回正在运行的Java虚拟机的高分辨率时间源的当前值,以纳秒为单位。
此方法只能用于测量已用时间,并且与系统或挂钟时间的任何其他概念无关。 返回的值表示自一些固定但任意原点时间以来的纳秒(可能在未来,因此值可能为负)。 在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();
one should use
t1 - t0 < 0
, not
t1 < t0
, because of the possibility of numerical overflow.
Returns | |
---|---|
long |
the current value of the running Java Virtual Machine's high-resolution time source, in nanoseconds |
void runFinalization ()
运行任何挂起的对象的终止方法。
调用该方法表明,对运行在Java虚拟机的努力finalize
已发现物体的方法被废弃,但其finalize
方法还没有被运行。 当控制从方法调用返回时,Java虚拟机已尽最大努力完成所有未完成的定稿。
通话 System.runFinalization()
实际上等同于通话:
Runtime.getRuntime().runFinalization()
也可以看看:
void runFinalizersOnExit (boolean value)
此方法在API级别1中已弃用。
这种方法本质上是不安全的。 这可能会导致终结器在活动对象上被调用,而其他线程同时操作这些对象,从而导致不稳定的行为或死锁。
退出时启用或禁用终止; 这样做指定了所有具有尚未自动调用终结器的对象的终结器将在Java运行时退出之前运行。 默认情况下,退出时的终止被禁用。
如果有安全管理器,则首先使用0作为其参数来调用其checkExit
方法,以确保允许退出。 这可能会导致SecurityException。
Parameters | |
---|---|
value |
boolean : indicating enabling or disabling of finalization |
Throws | |
---|---|
SecurityException |
if a security manager exists and its checkExit method doesn't allow the exit. |
也可以看看:
void setErr (PrintStream err)
重新分配“标准”错误输出流。
首先,如果存在安全管理器,则调用其 checkPermission
方法以获得 RuntimePermission("setIO")
权限,以查看是否可以重新分配“标准”错误输出流。
Parameters | |
---|---|
err |
PrintStream : the new standard error output stream. |
Throws | |
---|---|
SecurityException |
if a security manager exists and its checkPermission method doesn't allow reassigning of the standard error output stream. |
void setIn (InputStream in)
重新分配“标准”输入流。
首先,如果存在安全管理器,则调用 checkPermission
方法的权限为 RuntimePermission("setIO")
以查看是否可以重新分配“标准”输入流。
Parameters | |
---|---|
in |
InputStream : the new standard input stream. |
Throws | |
---|---|
SecurityException |
if a security manager exists and its checkPermission method doesn't allow reassigning of the standard input stream. |
void setOut (PrintStream out)
重新分配“标准”输出流。
首先,如果存在安全管理器,则调用其 checkPermission
方法的权限为 RuntimePermission("setIO")
以查看是否可以重新分配“标准”输出流。
Parameters | |
---|---|
out |
PrintStream : the new standard output stream |
Throws | |
---|---|
SecurityException |
if a security manager exists and its checkPermission method doesn't allow reassigning of the standard output stream. |
void setProperties (Properties props)
尝试设置所有系统属性。 复制p
所有属性,并放弃只读且不能修改的系统属性。 有关这些属性的列表,请参阅getProperty(String)
。
Parameters | |
---|---|
props |
Properties
|
String setProperty (String key, String value)
设置由指定键指示的系统属性。
Parameters | |
---|---|
key |
String : the name of the system property. |
value |
String : the value of the system property. |
Returns | |
---|---|
String |
the previous value of the system property, or null if it did not have one. |
Throws | |
---|---|
NullPointerException |
if key or value is null . |
IllegalArgumentException |
if key is empty. |
void setSecurityManager (SecurityManager sm)
抛出 SecurityException
(案例 sm == null
除外)。
安全管理员不提供执行不受信任代码的安全环境,并且在Android上不受支持。 不受信任的代码无法在Android上的单个虚拟机内安全隔离,因此此方法在传递非空SecurityManager时总是抛出SecurityException
Parameters | |
---|---|
sm |
SecurityManager : a security manager |
Throws | |
---|---|
SecurityException |
always, unless sm == null |