第七章 异常处理
一、小结
在程序设计和运行的过程中,发生错误是在所难免的。尽管Java语言的设计从根本上提供了便于写出整洁、安全的代码的方法,并且程序员也尽量地减少错误,但使程序被迫停止的错误的存在仍然不可避免。为此,Java提供了异常处理机制来帮助程序员检查可能出现的错误,保证了程序的可读性和可维护性。Java中将异常封装到一个类中,出现错误时,就会抛出异常。
本章要点:理解异常的概念、掌握异常的处理方法,了解异常类,掌握自定义异常的方法,了解异常的使用原则。
二、测验

当方法遇到异常又不知如何处理时,应该声明异常(throws)。


若程序中存在异常,那这个异常会终止整个程序,异常后的代码均不执行。





Java语言中的异常也是通过一个对象来表示的,程序运行时抛出的异常,实际上就是一个异常对象。该对象不仅封装了错误信息,还提供了一些处理方法,如getMessage()方法获取异常信息,printStackTrace()方法输出对异常的详细描述等。


return;的意思是终止后面代码的执行。没有异常,所以不执行catch,但是执行finally。

当发生输入流异常时,后面的代码将不被执行,即location1不输出,输出catch语句和finally。try……catch语句结束后输出location4.
三、习题
1、编写一个异常类MyException,再编写一个类Student,该类有一个产生异常的方法speak(int m)。要求参数m的值大于1000时,方法抛出一个MyException对象。最后编写主类,在主方法中创建Student对象,让该对象调用speak()方法。
public class MyException extends Exception{
String message;
MyException(int m){
message="数 " + m+" 超过了1000";
}
public String toString(){
return message ;
}
}
public class Student {
public void speak (int m) throws MyException{
if(m>1000){
MyException ex =new MyException (m);
throw ex;
}else
{
System.out.println("输入的数是: " +m);
}
}
}
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Student s = new Student();
try{
System.out.println("请输入一个数:");
Scanner sca = new Scanner (System.in);
s.speak(sca.nextInt());
}catch (MyException e){
System.out.print(e.toString());
}
}
}
2、创建类Number,通过类中的方法count可得到任意两个数相乘的结果,并在调用该方法的主方法中使用try-catch语句捕捉可能发生的异常。
public class Number {
int sum=0;
public int count (int x,int y){
return x*y;
}
}
public static void main(String[] args) {
Number nu= new Number();
int a =30;
int b=18;
int sum=0;
try{
sum=nu.count(a, b);
System.out.print("两个数的乘积是: "+sum);
}catch (Exception e){
e.printStackTrace();
}
}
3、创建类Computer,该类中有一个计算两个数的最大公约数的方法,如果向该方法传递负整数,该方法就会抛出自定义异常。
public class MyException extends Exception{
String message;
MyException(){
message="输入的数不能为负数";
}
public String toString(){
return message ;
}
public class Student {
public static int maxCommonDivsor(int a,int b){
if(a<b){
int temp = a;
a=b;
b=temp;
}
while (a %b!=0){
int temp =a%b;
a=b;
b=temp;
}
return b;
}
public int speak (int m,int n) throws MyException{
if(m<0){
MyException ex =new MyException ();
throw ex;
}else if(n<0)
{
MyException ex =new MyException ();
throw ex;
}else{
return maxCommonDivsor( m, n);
}
}
}
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
System.out.print("请输入第一个数:");
Scanner sca = new Scanner (System.in);
int x= sca.nextInt();
System.out.print("请输入第二个数:");
Scanner sca1 = new Scanner (System.in);
int y= sca.nextInt();
try{
Student stu = new Student();
stu.speak(x, y);
}catch (MyException e){
System.out.print(e.toString());
}
}
}
4、 如何捕获异常?
使用try-catch语句捕获异常
5、简述异常处理的注意事项。
(1)在当前方法声明中使用try-catch语句捕获异常。
(2)一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类。
(3)如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集,不能抛出新异常。

浙公网安备 33010602011771号