1.何为异常?为什么要进行异常处理?
异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零。
由于异常情况总是难免的,良好的应用和序除了具备用户所要求的基本功能处,还应该具备预见并处理可能发生的各种异常的功能。
2.Error和Exception类有何不同?
Error类及派生的子类具有特征:它们处理的是较少发生的系统内部错误,程序员通常对它们无能为力,只能在其发生时由用户按照系统提示关闭程序
Exception类及其派生的子类具有特征:它们解决是由程序本身及环境所产生异常,它们可以被捕获并进行相应的处理。
3.什么是抛出异常?如何抛出异常?
抛出异常指的是当程序运行出现错误时,系统产生与该错误对应的异常类对象。异常对象中包含了必要信息,如所发生的异常类型及异常发生时程序的运行状态
。当生成的异常类对象传递给java运行时,系统将由相应的机制进行处理,以确保不会产生非正常中断情况。
4.设计一个程序,其功能是从命令行输入整数字符串,再将该整数字符串转换为整数,输入的数据可能具有以下格式:
12345
123 45
123xyz456
对这种异常进行捕获和处理。
import java.io.*; public class UseException { public static void main(String[] args) { System.out.println("请输入一个整数字符串"); try { //此处可能会产生IOException异常 BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int a=Integer.parseInt(in.readLine()); //此处可能会产生NumberFormatException异常 System.out.println("您输入的整数是:"+a); } catch(IOException e) //捕获IOException异常 { System.out.println("IO错误"); } catch(NumberFormatException ne) //捕获NumberFormatException异常 { System.out.println("您输入的不是一个整数字符串"); } } }
5.设计方法boolean prime(int n),用来判断数n是否为素数,若为素数,返回true;若不是素数,返回false;若n<0,抛出ArgumentOutOfBounda异常。
public class UseDefineException { public static boolean prime(int n) throws ArgumentOutOfBoundException { if(n<0) { ArgumentOutOfBoundException ae=new ArgumentOutOfBoundException(); throw ae; //抛出这个异常 } else { boolean isPrime=true; for(int i=2;i<n;i++) if(n%i==0) { isPrime=false; break; } return isPrime; } } public static void main(String[] args) { if(args.length!=1) //输入格式错误 { System.out.println("输入格式错误!请按照此格式输入:java UseDefineException m"); System.exit(0); //输入格式错误,系统退出! } int m=Integer.parseInt(args[0]); //读入整数 try { boolean result=prime(m); //调用方法判断是否为素数 System.out.println("对您输入的整数"+m+"是否为素数的判断结果是:"+result); } catch(ArgumentOutOfBoundException e) //捕捉可能抛出的异常 { System.out.println("异常名称:"+e.toString()); } } } //自定义异常类 class ArgumentOutOfBoundException extends Exception { ArgumentOutOfBoundException() { System.out.println("输入错误!欲判断的数不能为负!"); } }