日期:2014-05-20  浏览次数:20702 次

大家来帮忙普及一下异常知识
我有几个异常的知识搞不清。麻烦大家。


问题一: 异常种类 Exception这是一种异常么?  

  即

  try{


  }
  catch(异常类型 异常形参)
  {

  }

catch 括号中的异常类型有多少种?




问题二: 如果存在多个异常处理,那么系统要怎么判断选哪一个?



try{
int a;
a=b.nextInt();
System.out.println(a);
}
catch(Exception e)
{
System.out.println("输入错误");
}



这里的try 并没有指定用catch中的处理,系统是怎么判断,这个异常要用哪个catch处理?


本人新手(请大家)说得通俗一点。 最好是有生活中的例子说明。 谢谢。



------解决方案--------------------
问题一:
在整个java的异常结构中,实际上有以下两个最常用的类:Exception、Error,这两个类全都是Throwable的子类
Exception:一般表示的是程序中出现的问题,可以直接使用try…catch处理
Error:一般指的是JVM错误,程序中无法处理
在整个java的异常处理中,实际上也是按照面向对象的方式进行处理,处理步骤如下:
一旦产生异常,则首先会产生一个异常类的实例化对象;
在try语句中对此异常对象进行捕捉;
产生的异常对象与catch语句中的各个异常类型进行匹配,如果匹配成功,则执行catch语句中的代码。
在整个java的异常处理中,实际上也是按照面向对象的方式进行处理,处理步骤如下:
一旦产生异常,则首先会产生一个异常类的实例化对象;
在try语句中对此异常对象进行捕捉;
产生的异常对象与catch语句中的各个异常类型进行匹配,如果匹配成功,则执行catch语句中的代码。
所有的子类实例可以全部使用父类接收、那么就可以利用向上转型的概念,让所有的异常对象都使用Exception接收。
注意:在java中所有捕获范围小的异常,必须放在捕获大的异常之前,否则程序在编译的时候就会出现错误提示。

至于异常类的种类。。可以说无数多,因为不断有人在开发解决新的异常的问题。开发人员可以自己写异常类来满足各种需求。
在java中已经提供了大量的 异常类,但是这些异常类有些时候也很难满足开发者的要求,所以此时用户可以根据自己的需要定义自己的异常类,定义异常类,只需要继承Exception类即可。



问题二:
在一种已经说过,因为所有的可以用try-catch方法写的异常类都是继承自exception,多以对于多异常问题需要用多个try-catch来解决。
系统可以自己识别错误,开发人员只需要针对不同的可能性来catch异常,如果开发人员没有提供出现的异常那么jvm虚拟机会自己处理。

------解决方案--------------------
补充代码:
问题一:自己可以写异常类:
class MyException extends Exception{ // 自定义异常类,继承Exception类
public MyException(String msg){
super(msg) ; // 调用Exception类中有一个参数的构造方法,传递错误信息
}
}
public class DefaultException{
public static void main(String args[]){
try{
throw new MyException("自定义异常。") ; // 抛出异常
}catch(Exception e){
System.out.println(e) ;
}
}
}

问题二:多异常处理
public class ExceptionDemo05{
public static void main(String args[]){
System.out.println("********** 计算开始 ***********") ;
int i = 0 ; // 定义整型变量
int j = 0 ; // 定义整型变量
try{
String str1 = args[0] ; // 接收第一个参数
String str2 = args[1] ; // 接收第二个参数
i = Integer.parseInt(str1) ; // 将第一个参数由字符串变为整型
j = Integer.parseInt(str2) ; // 将第二个参数由字符串变为整型
int temp = i / j ; // 此处产生了异常
System.out.println("两个数字相除的结果:" + temp) ;
System.out.println("----------------------------") ;
}catch(ArithmeticException e){ // 捕获算术异常
// System.out.println("算术异常:" + e) ;
e.printStackTrace() ;
}catch(NumberFormatException e){ // 捕获数字转换异常
System.out.println("数字转换异常:" + e);
}catch(ArrayIndexOutOfBoundsException e){ // 捕获数组越界异常
System.out.println("数组越界异常:" + e) ;
}
System.out.println("********** 计算结束 ***********") ;
}
}

------解决方案--------------------
API可以很好解决你的第一个问题
一个一个的匹配啊,符合那一个就运行catch里语句