System 类位于 java.lang 包,代表当前
Java 程序的运行平台,系统级的很多属性和控制方法都放置在该类的内部。由于该类的构造方法是 private 的,所以无法创建该类的对象,也就是无法实例化该类。
System 类提供了一些类变量和类方法,允许直接通过 System 类来调用这些类变量和类方法。 System 类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang 包 。
System 类提供了一些类变量和类方法,允许直接通过 System 类来调用这些类变量和类方法。 System 类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang 包 。
由于该类的构造器是 private 的,所以无法创建该类的对象。其内部的成员变量和成员方法都是 static
的
,所以也可以很方便的进行调用。
-
成员变量 Scanner scan = new Scanner(System.in);
System 类内部包含 in 、 out 和 err 三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。
1.PrintStream out
标准输出流。此流已打开并准备接收输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。
例如,编写一行输出数据的典型方式是:
System.out.println(data);
其中,println 方法是属于流类 PrintStream 的方法,而不是 System 中的方法。
2. InputStream in
标准输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。3. PrintStream err
标准的错误输出流。其语法与 System.out 类似,不需要提供参数就可输出错误信息。也可以用来输出用户指定的其他信息,包括变量的值。4.具体代码:
import java.io.IOException;
public class Test06 {
public static void main(String[] args) {
System.out.println("请输入字符,按回车键结束输入:");
int c;
try {
c = System.in.read(); // 读取输入的字符
while(c != '\r') { // 判断输入的字符是不是回车
System.out.print((char) c); // 输出字符
c = System.in.read();
}
} catch(IOException e) {
System.out.println(e.toString());
} finally {
System.err.println();
}
}
}
-
成员方法
①
native long currentTimeMillis()
: 该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和 GMT 时间(格林威治时 间)1970 年 1 月 1 号 0 时 0 分 0 秒所差的毫秒数。
②
void exit(int status)
: 该方法的作用是退出程序。其中 status 的值 为0代表正常退出,非零代表异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。
③
void gc(): 该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。
④
String getProperty(String key): 该方法的作用是获得系统中属性名为 key 的属性对应的值。系统中常见的属性名以及属性的作用如下表所示:
package CC.test;
import java.util.Arrays;
public class TestSystem {
public void test01(){
long time = System.currentTimeMillis();
System.out.println("现在的系统时间距离 1970 年 1 月 1 日凌晨:" + time + "毫秒");
System.exit(0);
System.out.println("over");//不会执行
}
public void test02(){
String javaVersion = System.getProperty("java.version");
System.out.println("java 的 version:" + javaVersion);
String javaHome = System.getProperty("java.home");
System.out.println("java 的 home:" + javaHome);
String osName = System.getProperty("os.name");
System.out.println("os 的 name:" + osName);
String osVersion = System.getProperty("os.version");
System.out.println("os 的 version:" + osVersion);
String userName = System.getProperty("user.name");
System.out.println("user 的 name:" + userName);
String userHome = System.getProperty("user.home");
System.out.println("user 的 home:" + userHome);
String userDir = System.getProperty("user.dir");
System.out.println("user 的 dir:" + userDir);
}
public void test03() throws InterruptedException {
for (int i=1; i <=10; i++){
MyDemo my = new MyDemo(i);
//每一次循环 my 就会指向新的对象,那么上次的对象就没有变量引用它了,就成垃圾对象
}
//为了看到垃圾回收器工作,我要加下面的代码,让 main 方法不那么快结束,因为 main 结束就会导致 JVM 退出,GC 也会跟着结束。
System.gc();//如果不调用这句代码,GC 可能不工作,因为当前内存很充足,GC 就觉得不着急回收垃圾对象。
//调用这句代码,会让 GC 尽快来工作。
Thread.sleep(5000);
}
}
class MyDemo{
private int value;
public MyDemo(int value) {
this.value = value;
}
@Override
public String toString() {
return "MyDemo{" + "value=" + value + '}';
}
//重写 finalize 方法,让大家看一下它的调用效果
@Override
protected void finalize() throws Throwable {
// 正常重写,这里是编写清理系统内存的代码
// 这里写输出语句是为了看到 finalize()方法被调用的效果
System.out.println(this+ "轻轻的我走了,不带走一段代码....");
}
}
class test{
public static void main(String[] args) {
new TestSystem().test01();
new TestSystem().test02();
try {
new TestSystem().test03();
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
new MyDemo(12).finalize();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
}