在一个java程序中如何处理自定义异常和异常类的顺序?

解决方案 »

  1.   

    当出现程序无法控制的外部环境问题(用户提供的文件不存在,文件内容损坏,网络不可用...)时,JAVA就会用异常对象来描述。JAVA中用2种方法处理异常:1.在发生异常的地方直接处理;2.将异常抛给调用者,让调用者处理。JAVA异常可分为3种:检查性异常:java.lang.Exception
    运行期异常:java.lang.RuntimeException
    错误:java.lang.Error
    顶层是java.lang.Throwable类,检查性异常,运行期异常,错误都是这个类的子孙类。java.lang.Exception和java.lang.Error继承自java.lang.Throwable,而java.lang.RuntimeException继承自java.lang.Exception.检查性异常------程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。JAVA编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。运行期异常------这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,JAVA编译器强制要求处理这类异常。错误------一般很少见,也很难通过程序解决。它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理。
      

  2.   

    一、第一种定义方式,继承Exception类public class MyFirstException extends Exception {public MyFirstException() {super();}public MyFirstException(String msg) { super(msg);}public MyFirstException(String msg, Throwable cause) {super(msg, cause);}public MyFirstException(Throwable cause) {super(cause);}//自定义异常类的主要作用是区分异常发生的位置,当用户遇到异常时,//根据异常名就可以知道哪里有异常,根据异常提示信息进行修改。}二、 第二种定义方式:继承Throwable 类public class MySecondException extends Throwable {public MySecondException() {super();}public MySecondException(String msg) {super(msg);}public MySecondException(String msg, Throwable cause) {super(msg, cause);}public MySecondException(Throwable cause) {super(cause);}}
      

  3.   

    catch异常的顺序是先小再大
    自定义异常类MyException 
    package csdn.programbbs_524;@SuppressWarnings("serial")
    public class MyException extends Exception{
    public MyException() {}
    public MyException(String message) {
    super(message);
    } @Override
    public String toString() {
    return "出现自定义的MyException";
    }
    }TestMyException 测试类
    package csdn.programbbs_524;import java.util.Scanner;public class TestMyException {
    public static void main(String[] args) {
    Scanner i = new Scanner(System.in);
    int a = i.nextInt();
    try {
    if (a == 1)
    throw new MyException();
    else
    throw new Exception();
    } catch (MyException e) {
    System.err.println("自定义异常");
    } catch (Exception e) {
    System.err.println("系统异常");
    } }
    }
      

  4.   

    可以throw 也可以try catch  
    但是catch的顺序要先子类异常 后父类异常!!!!
      

  5.   

    抱歉,我可能说的不是很清楚。我的意思是,在一个java程序里面,有一个自定义异常和数组角标越界异常,怎样处理它们的位置才能在程序中捕捉到异常?
      

  6.   

    try{}
    catch(数组角标越界异常)
    {}
    catch(自定义异常){}
      

  7.   

    class IntegerValueOutOfBoundsException extends Exception
    {
    private int value; IntegerValueOutOfBoundsException(String msg,int value)
    {
    super(msg);
    this.value = value;
    } public int getValue()
    {
    return value;
    }
    }public class ExceptionDemo {
    static void array() {
    Scanner sc = new Scanner(System.in);
    try {
    int i = sc.nextInt();
    if(i<0 || i>100)
    throw new IntegerValueOutOfBoundsException("整数取值越界:",i);
    }
    catch(IntegerValueOutOfBoundsException e) {
    System.out.println(e);
    }
    }

    public static void main(String args[]) throws IOException{

    System.out.println("请输入数组中的元素:");
    Scanner sc = new Scanner(System.in);
        int arr[] = new int[10];
        try {
         array();
         for(int x=0;x<10;x++) {
         arr[x] = sc.nextInt();
         }
         System.out.print("[");
          for(int i=0;i<arr.length;i++) {
           if(i!=arr.length-1)
           System.out.print(arr[i]+", ");
           else
           System.out.println(arr[i]+"]");
          }
    }
        
        catch(ArrayIndexOutOfBoundsException e) {
         System.out.println(e.toString());
         System.out.println("数组角标越界啦!");
        }
     }
    }
    这样写可以吗?
      

  8.   

    自定义异常类,新手就记下一点,用子类去继承exception,定义好后,在调用时用try捕获一下就行,相应的catch处理下,从输出结果就可以看出来的