当前位置:编程学习 > JAVA >>

新手关于异常类的问题

在一个java程序中如何处理自定义异常和异常类的顺序? --------------------编程问答-------------------- catch呗,
先catch的先处理。。。 --------------------编程问答-------------------- 当出现程序无法控制的外部环境问题(用户提供的文件不存在,文件内容损坏,网络不可用...)时,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,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理。 --------------------编程问答-------------------- 一、第一种定义方式,继承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);

}

}
--------------------编程问答-------------------- 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("系统异常");
}

}
}
--------------------编程问答-------------------- 多谢各位啦! --------------------编程问答-------------------- 原则是向上抛! --------------------编程问答-------------------- 可以throw 也可以try catch  
但是catch的顺序要先子类异常 后父类异常!!!! --------------------编程问答-------------------- 抱歉,我可能说的不是很清楚。我的意思是,在一个java程序里面,有一个自定义异常和数组角标越界异常,怎样处理它们的位置才能在程序中捕捉到异常? --------------------编程问答-------------------- try{

}
catch(数组角标越界异常)
{

}
catch(自定义异常){

}

--------------------编程问答-------------------- 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("数组角标越界啦!");
    }
 }
}
这样写可以吗? --------------------编程问答-------------------- 自定义异常类,新手就记下一点,用子类去继承exception,定义好后,在调用时用try捕获一下就行,相应的catch处理下,从输出结果就可以看出来的
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,