前面的程序代码中,都会用到System类,来完成字符串和数值的输出。System是Java API核心类库之一,它提供了标准设备的输入与输出功能,默认情况下输出设备是计算机的显示器,输入设备是计算机键盘。System类结构如下图所示:

System类结构图
从图中可以看出,System类提供的成员(属性)和方法都是静态类型,静态类型的方法和成员(属性)在类被加载后就可以调用,无需实例化(关于类在后面的学习单元会详细讲述)。图中没有全部列出System类提供的方法。感兴趣地可以查阅API文档。
System类的成员属性
System类提供了三个成员属性,分别是err、out、in。其中err和out属于PrintStream类,PrintStream类主要用于输出各种类型数据的格式化形式输出;in属于InputStream类,InputStream类主要用于程序通过不同的数据源获取输入数据,关于PrintStream类和InputStream类的详细介绍请查阅API文档。
案例1:在PbaseUnit8项目unit包下创建SystemSample类。代码如下:
/**
* @Title: SystemSample.java
* @Package unit
* @Description: Java基础知识课程案例
* @author 编程训练营
* @version V1.0
*/
package unit;
/**
* @ClassName: SystemSample
* @Description: Java API库的使用(System类的使用)案例1
* @author 编程训练营
*
*/
public class SystemSample {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
*
* @return void 返回类型 @throws
*/
public static void main(String[] args) {
int temp1 = 0;
int tamp2 = 10;
int result;
try {
result = tamp2 / temp1;
System.out.println("result=" + result);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}代码结构分析
程序主要完成两个整型数值相除,并输出结果到屏幕。程序在main方法体内声明了temp1、temp2、result三个整型变量,其中temp1被赋值为0,temp2被赋值为10,result用于存储结果。考虑到两个整数相除时,如果除数为0,Java程序执行时抛出异常错误(Java编译过程发现不了除数为0的错误),因此设置了try…catch…语句。try语句块的内容是正常的程序执行代码,在try语句块中,如果语句抛出了异常,那么try块后面的代码将不再执行,将直接进入catch异常处理代码块。
应用try…catch…语句增强程序的健壮性,是非常好的编码习惯,当预判程序可能会出现不可控的异常错误时,应使用try…catch…语句。通过catch语句的Exception类,可以获取程序异常错误信息。try…catch…语句在后面的学习单元会详细介绍。
程序执行结果如下图所示:

从输出结果可以看出,程序出现了异常,导致产生异常的原因是“by zero”被零除。
System类的成员方法
System类提供了多种方法针对系统进行不同的操作。例如:exit()方法可以退出当前运行的程序,currentTimeMillis()可以获取当前系统时间,getProperty可以获取当前系统信息。
案例2:利用System. exit()退出当前运行的程序,在PbaseUnit8项目unit包下创建SystemExitSample类。代码如下:
/**
* @Title: SystemExitSample.java
* @Package unit
* @Description: Java基础知识课程案例
* @author 编程训练营
* @version V1.0
*/
package unit;
// 导入java.util.Scanner类
import java.util.Scanner;
/**
* @ClassName: SystemExitSample
* @Description: Java API库的使用(System类的使用)案例2
* @author 编程训练营
*
*/
public class SystemExitSample {
public static String message="退出程序请输入quit";
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
*
* @return void 返回类型 @throws
*/
public static void main(String[] args) {
System.out.println(message);
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入退出命令:");
String tempValue = sc.next();
if (tempValue.equals("quit")) {
System.exit(0);
}
}
}
}代码结构分析:
“import java.util.Scanner;”语句用于导入java.util类库中的Scanner类,import是java语言的关键字,应用该关键字可以导入Java核心类库及外部类文件。程序导入java.util.Scanner主要是使用Scanner类从命令行窗口获取输入的命令。
程序在“SystemExitSample”类体内声明了类属性message,被赋值“退出程序请输入quit”,用于程序开始运行时,显示提示信息,提醒用户输入“quit”命令,可以退出程序。
在“main()”方法体内,首先调用System.out输出已定义的字符串变量,然后声明“Scanner”类型的sc变量,应用new运算符(后面的课程内容会详细讲述)实例化Scanner类,并赋值给sc。最后,利用while循环语句(流程控制学习单元会详细讲述),等待用户输入退出命令,获取用户输入后,判断输入的是否是“quit”命令,如果是则调用System.exit()方法退出程序。需要注意的是,exit()方法要求传入一个参数,传入的参数为0表示正常退出。
程序执行结果如下图所示:

从上图运行情况可以看出,输入错误的命令后,程序并没有退出,而是继续提示用户“请输入退出命令”,输入正确的退出命令后,程序退出运行。
案例3:利用getProperty()方法显示当前系统信息,在PbaseUnit8项目unit包下创建SystemPropertySample类。代码如下:
/**
* @Title: SystemPropertySample.java
* @Package unit
* @Description: Java基础知识课程案例
* @author 编程训练营
* @version V1.0
*/
package unit;
/**
* @ClassName: SystemPropertySample
* @Description: Java API库的使用(System类的使用)案例3
* @author 编程训练营
*
*/
public class SystemPropertySample {
/**
* @Title: main
* @Description:Java程序入口main方法
* @param @param args 参数
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
String operationSystem = System.getProperty("os.name");
System.out.println("操作系统名称:" + operationSystem);
}
}代码结构分析:
程序主要完成获取操作系统名称并输出到屏幕上的任务。
语句“String operationSystem = System.getProperty("os.name");”也是程序编码常用的方式,语句等号左边是变量声明部分,语句等号右边是赋值部分,赋值部分可以是表达式、也可以是单个的数值、字符串等、也可以是调用方法返回的数值或字符串等数据。需要注意的是赋值语句两边的数据类型要保持一致。getProperty方法要求传入一个字符串参数,根据传入的参数,getProperty返回不同的系统信息,传入“os.name”字符串,可以获取当前操作系统的名称。
程序执行结果如下图所示:

从上图运行情况可以看出,程序运行后,获取了正确的操作系统名称。