新手关于异常类的问题 在一个java程序中如何处理自定义异常和异常类的顺序? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 当出现程序无法控制的外部环境问题(用户提供的文件不存在,文件内容损坏,网络不可用...)时,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中Vector的问题。 请教一个关于JAVA接口的疑惑 请问谁是教育手拉手论坛的会员?? 求助啊!我的小程序不知道错在哪儿了? 一个百思不得其解的问题 附加分题!..........请问怎样用jsp实现删除指定文件?? 这是怎么回事? 我的类参数传递,错在哪儿? 菜鸟求助 java JS跳转
运行期异常: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,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理。
自定义异常类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("系统异常");
} }
}
但是catch的顺序要先子类异常 后父类异常!!!!
catch(数组角标越界异常)
{}
catch(自定义异常){}
{
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("数组角标越界啦!");
}
}
}
这样写可以吗?