例8.1
public class jjj666 { //创建类jjj666
public static void main(String[] args) { //主方法
int result = 3 / 0; //定义int型变量并赋值
System.out.println(result); //将变量输出
}
}
例8.2
package jjj666;
public class jjj66 { //创建类jjj66
public static void main(String[] args) { //主方法
String str = "lili"; //定义字符串
System.out.println(str + "年龄是:"); //输出的提示信息
int age = Integer.parseInt("20L"); //数据类型的转换
System.out.println(age); //输出信息
}
}
例8.3
package jjj666;
public class FootballTeam {
private int playerNum; //定义球员数量
private String teamName; //定义“球员名称”
public FootballTeam()
{
//寻找教练类
class.forName("com.mrsoft.Coach");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
FootballTeam team = new FootballTeam();//创建对象team
team.teamName = "com.mrsoft";//初始化对象
team.playerNum = 19;//初始化对象
System.out.println("\n球队名称: " + team.teamName + "\n" + "球员数量: " + team.playerNum + "名");
}
8.3 捕捉处理异常
在处理非运行时异常时,提到了系统会自动为非运行时异常提供两种解决方案,一种是使用throws关键字,一种是使用try...catch代码块。
try...catch代码块代码块主要用来对异常进行捕捉并处理。在实际使用时,改代码块还有一个可选的finally代码块。
例8.4
package jjj666;
public class jjj66 { //创建类
public static void main(String[] args) { //主方法
try {
String str = "lili"; //定义字符串
System.out.println(str + "年龄是:"); //输出的提示信息
int age = Integer.parseInt("20L"); //数据类型的转换
System.out.println(age); //输出信息
} catch (Exception e) { //catch代码块用来获取异常信息
e.printStackTrace(); //输出异常性质
}
System.out.println("program over"); //输出信息
}
}
例8.5
package jjj666;
public class jjj66 { //创建类
public static void main(String[] args) { //主方法
try { //try语句包含可能出现异常的程序代码
String str = "lili"; //定义字符串
System.out.println(str + "年龄是:"); //输出的提示信息
int age = Integer.parseInt("20L"); //数据类型的转换
System.out.println(age); //输出信息
} catch (Exception e) { //catch代码块用来获取异常信息
e.printStackTrace(); //输出异常性质
} finally
System.out.println("program over"); //输出信息
}
}
例8.6
package jjj666;
public class jjj66 {
static void pop() throws NegativeArraySizeException {
//定义方法并抛出NegativeArraySizeException异常
int[] arr = new int[-3]; //创建数组
}
public static void main(String[] args) { //主方法
// TODO Auto-generated method stub
try { //try语句处理异常信息
pop(); //调用pop()方法
} catch (NegativeArraySizeException e) {
System.out.println("pop()方法抛出的异常"); //输出异常信息
}
}
}
例8.7
package jjj666;
public class jjj66 {
public static void main(String[] args) { //主方法
// TODO Auto-generated method stub
int num1 = 25;
int num2 = 0;
int result;
if (num2 == 0) //判断num2是否等于0,如果等于0,抛出异常
{
//抛出ArithmeticException异常
throw new ArithmeticException("这都不会,小学生都知道:除数不能是0!!!");
}
result = num1 / num2; //计算int1除以int2的值
System.out.println("两个数的商为: " + result);
}
}
8.5 自定义异常
int age = -50;
System.out.println("王师傅今年 "+age+" 岁了!");
在程序中使用自定义异常类,大体可分为以下几个步骤。
(1)创建自定义异常类。
(2)在方法中通过throw关键字抛出异常对象。
(3)如果在当前抛出异常的方法中处理异常,可以使用try...catch代码块捕获并处理,否则,在方法的声明处通过throws关键字指明要抛给方法调用者的异常,继续进行下一步操作。
(4)在出现异常方法的调用者中捕获并处理异常
例8.8
public class MyException extends Exception { //创建自定义异常,继承Exception类
public MyException(String ErrorMessage) { //构造方法
super(ErrorMessage); //父类构造方法
}
}
public class Tran {
//定义方法,抛出自定义的异常
static void avg(int age) throws MyException {
if (age < 0) { //判断方法中参数是否满足指定条件
throw new MyException("年龄不可以使用负数"); //错误信息
} else {
System.out.println("王师傅今年 " + age + "岁了!"); //输出信息
}
}
public static void main(String[] args) { //主方法
// TODO Auto-generated method stub
try { //try代码块处理可能出现异常的代码
avg(-50);
} catch (MyException e) {
e.printStackTrace();
}
}
}
8.6 异常的使用原则
编写代码处理某个方法可能出现的异常时,可遵循以下原则:
(1)不要过度使用异常。虽然通过异常可以增强程序的健壮性,但如果使用过多不必要的异常处理,可能会影响程序的执行效率。
(2)不要使用过于庞大的try...catch块。在一个try块中放置大量的代码,这种写法看上去“很简单”,但是由于try块中的代码过于庞大,业务过于复杂,会造成try块中出现异常的可能性大大增加,从而导致分析异常原因的难度也大大增加。
(3)避免使用catch(Exception e)。因为如果所有异常都采用相同的处理方式,将无法对不同异常分情况处理;另外,这种捕获方式可能将程序中的全部错误、异常捕获到,这时如果出现一些“关键”异常,可能会被“悄悄地”忽略掉。
(4)不要忽略捕捉到的异常,遇到异常一定要及时处理。
(5)如果父类抛出多个异常,则覆盖方法必须抛出相同的异常或其异常的子类,不能抛出新异常。