怎么增加网站收录/洛阳seo外包公司费用
异常
本质上异常是程序上的错误,包括程序逻辑错误和系统错误
异常体系
所有异常的父类--------Throwable
- Error(不可处理)
- 运行期异常(RuntimeException)
- 非运行期异常
- Exception(可处理)
常见异常
-
IndexOutOfBoundsException
下标越界,例如数组长度为5,却操作第十位的数据
-
NullPointerExceptiopn
空指针异常,未赋值便操作
-
ArithmeticException
异常运算条件 例如:7除0
-
IllegalArgumentException
非法参数
-
ClassCastException
强制类型转换实例错误,例如:
Man extends People
Woman extends People
People person = new Man( );
Woman xx = (Woman) person;
异常处理流程
try --catch–finally(总会运行,多用于释放资源)
-
首先运行try中的代码块
-
若有异常则进行catch捕获异常,并根据异常的种类,执行不同的catch中的代码
-
无论如何最终都会运行finally中的代码
try尝试 {需要被检测异常的代码 } catch(异常类 变量) {处理异常的代码 } catch(异常类 变量) {处理异常的代码 } finally最终化 {一定会被执行的代码 }
异常处理原则
-
方法内如果抛出需要检测的异常,那么方法上必须要声明,否则必须在方法内用try-catch捕捉,否则编译失败。
-
如果调用了声明异常的函数,要么try-catch要么throws,否则编译失败。
-
.什么时候catch,什么时候throws?功能内容可以解决,用catch,解决不了,用throws告诉调用者,有调用者解决。
-
如果一个功能抛出了多个异常,那么调用时必须有对应多个catch进行针对性的处理。
异常的抛出 **throws Exception **
当我们将该类的异常直接抛出后,可以不用在此类中执行该类的try catch的异常捕获操作,进而将异常抛到执行该类的类中去进行try catch操作
public class ThrowsException {
//显示异常 必须处理,如果不在该类中处理,那就必须在调用它的类中使用public static Date dateTransfer(String date) throws ParseException {//抛出此异常,所以此类中可有不用处理该异常SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");return simpleDateFormat.parse(date);}public static void main(String[] args) {try {System.out.println(dateTransfer("1999-02-78"));} catch (ParseException e) {//调用了该方法,所以必须处理该异常,并且已经无法再向外抛出e.printStackTrace();}}
}
throw &throws
throw为人为触发一个异常,出现在方法内部后面跟异常对象
throws为可能出现的异常,出现在方法声明上
自定义异常
可以通过extends Exception来自定义一个异常
例如下面代码展示的 AppException & SystemException
AppException code
public class AppException extends Exception {private int ErroCode;private String ErrorMessage;public int getErroCode() {return ErroCode;}public void setErroCode(int erroCode) {ErroCode = erroCode;}public String getErrorMessage() {return ErrorMessage;}public void setErrorMessage(String errorMessage) {ErrorMessage = errorMessage;}public AppException(int erroCode, String errorMessage) {ErroCode = erroCode;ErrorMessage = errorMessage;}}//TestCode============================================public class TestException {public static int Divide(int a,int b) throws AppException {try{return a/b;}catch(Exception e){throw new AppException(999,"AppException");//throw人为抛出一个异常,将原有的异常转化为A异常}}public static void main(String[] args) {try {System.out.println(Divide(2,0));} catch (AppException e) {System.out.println(e.getErroCode());System.out.println(e.getErrorMessage());}}
}
SystemException code
public class SystemException extends Exception {private int ErroCode;private String ErrorMessage;public int getErroCode() {return ErroCode;}public void setErroCode(int erroCode) {ErroCode = erroCode;}public String getErrorMessage() {return ErrorMessage;}public void setErrorMessage(String errorMessage) {ErrorMessage = errorMessage;}public SystemException(int erroCode, String errorMessage) {ErroCode = erroCode;ErrorMessage = errorMessage;}public SystemException(String message, int erroCode, String errorMessage) {super(message);ErroCode = erroCode;ErrorMessage = errorMessage;}public SystemException(String message, Throwable cause, int erroCode, String errorMessage) {super(message, cause);ErroCode = erroCode;ErrorMessage = errorMessage;}public SystemException(Throwable cause, int erroCode, String errorMessage) {super(cause);ErroCode = erroCode;ErrorMessage = errorMessage;}public SystemException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, int erroCode, String errorMessage) {super(message, cause, enableSuppression, writableStackTrace);ErroCode = erroCode;ErrorMessage = errorMessage;}
}
//TestCode=============================================public class TestSys {public static int Divide2(int a) throws SystemException {try{int []aaa = new int[2];aaa[3]=a;return aaa[3];}catch(Exception e){throw new SystemException(1000,"system error");}}public static void main(String[] args) {try {System.out.println(Divide2(34));} catch (SystemException e) {System.out.println(e.getErroCode());System.out.println(e.getErrorMessage());}}}