对于java中的异常,相信大家都不会陌生,常见的异常有:
1、NullPointException,空指针异常
2、ClassCastException:类型强制转化异常
3、ArrayIndexOutBoundsException:数组下标越界异常
4、ArithmeticException:算数异常
5、SecurityException:违背安全异常
6、NumberFormatException:字符串转换为数字异常
7、FileNotFounfException:文件为找到异常
8、SQLException:数据库操作异常
9、NoSuchMethodException:为找到此方法异常
10、IOException:输入输出流异常
异常中的try,catch,throw,throws,finally处理方法,相信都能很好理解,下面我重点来说自定义异常了。
为什么需要自定义异常?
1、项目分模块开发时自定义异常类可以统一对外展示异常;
2、自定义异常可以继承相关的异常来抛出处理后的异常信息,从而隐藏底层的异常,这样更加安全直观,便与精确查查找异常信息,快速解决异常。
自定义异常类MyException的具体步骤:一、继承Exception
package test;
import java.io.PrintStream;
import java.io.PrintWriter;
public class MyException extends Exception {
private static final long serialVersionUID = 1L;
/**
* 重载构造函数
*/
public MyException() {
super();
}
public MyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public MyException(String message, Throwable cause) {
super(message, cause);
}
public MyException(Throwable cause) {
super(cause);
}
public MyException(String message) {
super(message);
}
/**
* 重写父类的方法
*/
@Override
public String getMessage() {
return super.getMessage();
}
@Override
public String getLocalizedMessage() {
// TODO Auto-generated method stub
return super.getLocalizedMessage();
}
@Override
public void printStackTrace() {
// TODO Auto-generated method stub
super.printStackTrace();
}
@Override
public void printStackTrace(PrintStream s) {
// TODO Auto-generated method stub
super.printStackTrace(s);
}
@Override
public void printStackTrace(PrintWriter s) {
// TODO Auto-generated method stub
super.printStackTrace(s);
}
@Override
public StackTraceElement[] getStackTrace() {
// TODO Auto-generated method stub
return super.getStackTrace();
}
@Override
public void setStackTrace(StackTraceElement[] stackTrace) {
// TODO Auto-generated method stub
super.setStackTrace(stackTrace);
}
}
使用MyException异常类:
package test;
public class Test2 {
public StringBuffer getNumber(Long a) throws MyException {
StringBuffer stringBuffer = new StringBuffer();
if(a<0 || a>99999) {
throw new MyException("输入数字范围不正确");
}
if(a/10000 >0 ) {
stringBuffer.append(a/10000);
}
if((a/1000)%10 >0) {
stringBuffer.append((a/1000)%10);
}
if((a/100)%10 >0) {
stringBuffer.append((a/100)%10);
}
if((a/10)%10 >0) {
stringBuffer.append((a/10)%10);
}
if(a%10 >0) {
stringBuffer.append(a%10);
}
return stringBuffer.reverse();
}
public static void main(String[] args) throws MyException {
Test2 test2 = new Test2();
StringBuffer aString = test2.getNumber(123456L);//输入的数值超100000,抛出异常
System.out.println(aString);
}
}
控制台输出: