1.异常与错误
异常:exception 例外,代码满足了用户需求,但是除掉例外
错误:error 人为所犯的错误,完全不符合java语法规范
2.异常的分类
分为运行时异常(非检查异常)和编译时异常(检查异常)
a、通常大部分运行时异常需要运行代码才会出现异常,非运行异常在编写代码时就出现(但是不绝对)
b、所有的异常类都是直接或者间接地继承于exception类,所有的运行时异常都是直接或间接地继承于RuntimeException类
3.检查异常的解决方式
1)继续抛,最后抛给了虚拟机:throws
2)进行捕获:try{ } catch(Exception e){ } finally{ }
Try{
可能抛异常的语句
}
Catch(Exception e){
捕获异常的语句
}
Finally{
不管是否抛异常都一定要执行的语句
}
注意:
a、当try里面的语句发生异常才会执行catch里面的语句
b、Finally实现资源链接的关闭(数据库等),不管是否发生异常,都需要关闭资源
c、Try必须跟catch或finally匹配存在,不能独立存在
4.throw和throws的区别
Throws:应用在方法外的,用于进行捕获异常继续抛
Throw:在方法内使用,相当于抛出一个异常对象
5. 自定义异常:自定义异常类必须直接或间接继承Exception类,也就是:定义一个类,继承exception类或者它的子类。
Class myexception extends Exception{
Public void fun1(){
System.out.println(“abcd”);
}
}
Public class test{
Public static void main(String[] args){
Try{
Fun2();
}catch(myexception e){
e.fun1();
}
}
Public static void fun2() throws myexception{
Int a=9;
If (a==9){
Myexception b=new myexception();
Throw b;
}
}
}
例:定义一个类,要求传入一个数组,如果该数组为空,抛出异常;否则,返回该数组的最大值。
//测试类
public class Test {
public static void main(String[] args) {
shuzu sz=new shuzu();
int a[]={};
try {
System.out.println(sz.retun(a));
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
//定义类
class shuzu{
public int retun(int a[]) throws Exception{
int max=0;
if (a.length==0||a==null) {
throw new myGetMessage();
}else{
for (int i = 0; i < a.length; i++) {
if(max<a[i]){
max=a[i];
}
}
}
return max;
}
}
//自定义的异常
class MyGetMessage extends Exception {
public String getMessage(){
System.out.println("该数组为空,没有返回值!");
}
}