目录
简介
在API中system类介绍的比较简单,我们给出定义,system中代表程序所在系统,提供了对应的一些系统属性信息和系统操作。
/**
* System类包含了几个有用的类字段和方法。他不能被实例化。
*
* <p>System类提供的功能包括标准输入,标准输出,错误输出流;
* 访问外部定义的属性和环境变量;
* 加载文件和库的方法;
* 一个工具方法,能够快速复制一个数组的一部分。
*
* @author unascribed
* @since JDK1.0
*/
public final class System
构造方法
/** 这个类不能初始化*/
private System() {
}
与流有关的变量和方法
in,out,err
/**
* 标准输入流。这个流已经代开,并且准备好提供输入数据。
* 典型地,这个流对应于键盘输入或者由主机环境或用户指定的其他输入来源。
*
*/
public final static InputStream in = null;
/**
* 标准输出流。这个流已经打开并且准备好接受输出数据。
* 典型地,这个流对应显式输出(console)或者由主机环境或用户指定的其他输出地点。
* <p>
* 对于一个普通的独立的java程序,写出一行输出数据的典型方式是
* <blockquote><pre>
* System.out.println(data)
* </pre></blockquote>
* <p>
*
* 看PrintStream类的println方法
*
* @see java.io.PrintStream#println()
* @see java.io.PrintStream#println(boolean)
* @see java.io.PrintStream#println(char)
* @see java.io.PrintStream#println(char[])
* @see java.io.PrintStream#println(double)
* @see java.io.PrintStream#println(float)
* @see java.io.PrintStream#println(int)
* @see java.io.PrintStream#println(long)
* @see java.io.PrintStream#println(java.lang.Object)
* @see java.io.PrintStream#println(java.lang.String)
*/
public final static PrintStream out = null;
/**
* 典型的错误输出流。这个流已经打开并且准备好接受输出数据。
* <p>
* 典型地,这个流对应显式输出(console)或者由主机环境或用户指定的其他输出地点。
* 按照惯例,这个输出流用于展示错误信息或者其他即使在主要输出流,但是用户应该快速注意到的信息。
* 变量out的值,应该被重定向到一个文件或者其他目的地,通常不被持续监控
*
*/
public final static PrintStream err = null;
设置in,out,err
/**
* 重新设置标准输入流。
*
* <p>最初,如果有一个安全管理器,则调用其<code>RuntimePermission("setIO")</code>来调用它的checkPermission方法,
* 来看是否可以重新设置标准输入流。
* <p>
*
* @param in the new standard input stream.
*
* @throws SecurityException
* if a security manager exists and its
* <code>checkPermission</code> method doesn't allow
* reassigning of the standard input stream.
*
* @see SecurityManager#checkPermission
* @see java.lang.RuntimePermission
*
* @since JDK1.1
*/
public static void setIn(InputStream in) {
checkIO();
setIn0(in);
}
/**
* Reassigns the "standard" output stream.
*
* <p>First, if there is a security manager, its <code>checkPermission</code>
* method is called with a <code>RuntimePermission("setIO")</code> permission
* to see if it's ok to reassign the "standard" output stream.
*
* @param out the new standard output stream
*
* @throws SecurityException
* if a security manager exists and its
* <code>checkPermission</code> method doesn't allow
* reassigning of the standard output stream.
*
* @see SecurityManager#checkPermission
* @see java.lang.RuntimePermission
*
* @since JDK1.1
*/
public static void setOut(PrintStream out) {
checkIO();
setOut0(out);
}
/**
* Reassigns the "standard" error output stream.
*
* <p>First, if there is a security manager, its <code>checkPermission</code>
* method is called with a <code>RuntimePermission("setIO")</code> permission
* to see if it's ok to reassign the "standard" error output stream.
*
* @param err the new standard error output stream.
*
* @throws SecurityException
* if a security manager exists and its
* <code>checkPermission</code> method doesn't allow
* reassigning of the standard error output stream.
*
* @see SecurityManager#checkPermission
* @see java.lang.RuntimePermission
*
* @since JDK1.1
*/
public static void setErr(PrintStream err) {
checkIO();
setErr0(err);
}
private static void checkIO() {
SecurityManager sm = getSecurityManager();
if (sm != null) {
sm.checkPermission(new RuntimePermission("setIO"));
}
}
private static native void setIn0(InputStream in);
private static native void setOut0(PrintStream out);
private static native void setErr0(PrintStream err);
数组复制
很多jdk的类都是用这个方法
/**
* <p>从指定的源头数组复制一个数组,以特定的位置开始,到结果数组的特定位置。
* 数组成员的一个子序列被复制,从源头数组src到结果数组dest。
* 被复制的成员的个数与参数length相同。
* 源头数组的成员,从srcPos的位置到srcPos+length-1的位置,被复制到
* 结果数组的位置,从destPos到destPos+length-1。
*
* <p>如果src和dest参数引用了同一个数组对象,
* 那么复制行为就仿佛从srcPos到srcPos+length-1的成员被第一次复制
* 到一个长度为length的临时数组,然后临时数组的内容被复制到结果数组的destPos到destPos+length-1
*
* <p>如果dest是null,就抛出NullPointerException
*
* <p>如果src是null,抛出NullPointerException,并且结果数组不会被修改。
*
* <p>然而,如果下面的有一项为true,抛出ArrayStoreException,并且结果数组不会被修改。
*
* <ul>
* <li>参数src引用的对象不是一个数组。
*
* <li>参数dest引用的对象不是一个数组。
*
* <li>参数src和dest引用的数组的成员类型是不用的原始类型。
*
* <li>参数src引用的数组的成员是原始类型,dest引用的数组的成员是引用类型(是类)
*
* <li>参数src引用的数组的成员是引用类型(是类),dest引用的数组的成员是原始类型
*
* </ul>
*
* <p> 然而,如果下面有一项为true,那么抛出IndexOutOfBoundsException,并且结果数组不会被修改。
*
* <ul>
* <li>参数srcPos是负的
*
* <li>参数destPos是负的
*
* <li>参数length是负的
*
* <li>srcPos+length大于src.length
*
* <li>destPos+length大于dest.length
*
* </ul>
*
* <p>然而,如果源头数组的srcPos到srcPos+length-1的成员不能通过赋值转换,
* 转换到结果数组的成员类型,抛出ArrayStoreException。
* 在这种情况,让k为小于length的,而且src[srcPos+k]不能被转换为结果数组的成员类型,的最小的非负整数。
* 当抛出异常时,源头数组从srcPos到srcPos+k-1的成员已经被复制到
* 结果数组的destPos到destPos+k-1,并且结果数组的其他地方不被修改。
* (因为已经列出了一些限制,这一段只适用于两个数组的成员都是引用类型的情况)
*
* @param src 源头数组
* @param srcPos 源头数组的开始位置
* @param dest 结果数组
* @param destPos 结果数组的开始位置
* @param length 数组元素被复制的数量
* @exception IndexOutOfBoundsException 如果复制会产生访问超出数组限制的元素
* @exception ArrayStoreException 如果src数组的元素不能存进dest数组,因为类型不匹配
* @exception NullPointerException 如果src或dest有一个为null
*/
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);