第七章 异常处理

一、小结

  在程序设计和运行的过程中,发生错误是在所难免的。尽管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)如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集,不能抛出新异常。

posted @ 2021-07-14 21:47  千千婕  阅读(729)  评论(0)    收藏  举报