Java异常

·语法和逻辑错误不是异常

·异常分为:Error,Exception

Error

·java虚拟机无法解决的严重问题

·例如:StackOverflow,out of memory

Exception

·Exception分为:运行时异常、编译时异常(必须处理,不然标红)

·例如:空指针访问、读取不存在的文件、网络连接中断

异常体系图

异常处理机制

try-catch-finally

·异常发生时,系统将异常封装成Exception对象e,传递到catch内

try{
    代码
}catch(Exception e){
    出现异常后的处理操作
}finally{
    无论有无异常都执行的代码
}

·finally中通常写对于资源的释放

·选取中一段代码加上快捷键Ctrl+Alt+T可以快速形成try-catch语句

·try中运行到有异常的语句后直接跳到catch中,而不会执行剩余语句

·finally和catch都可以不写,单留一个try

·catch语句可以不止一个

try{
    ...
}catch{
    return 1;
}finally{
    return 2;//最终返回2而不是1
}
int i=0;
try{...
}catch(Exception e){
    return i++;//将i++=2这个数存到temp中,返回temp=1
}finally{
    System.out.println("i=",++i);//输出2
}

throws(默认)

·异常throws到JVM是最底层的了。这时候JVM的处理为直接输出异常并退出程序

·每个方法默认为throws Exception,但编译异常需要写出throws才能IDEA中没有异常提示

public static void f1()throws Exception{//Exception是父类,也可以写具体的子类或列表
    ...
}

·子类重写父类方法时,子类方法throws的异常要为父类方法抛出异常的子类/相同类

class Father{
    public void f1()throws RuntimeException{
          ....
    }
}
class Son extends Father{
    @Override
    public void f1()throws NullPointerException/RuntimeException{
        ....
    }
}

自定义异常

·定义没在Throwable子类中的异常

例如定义一个年龄限制范围的自定义异常

public static void main(){
    int age=180;
    if(age>120){
        throw new AgeException("年龄出错!");//throw创建异常对象,可以是自定义异常,也可以Throwable子类
    }
}

class AgeException extends RuntimeException{
    public AgeEXception(String message){//构造器传入string
        super(message); 
    }
}

·自定义异常一般继承RuntimeException。好处为不是编译异常,因此不会标红。

throws与throw区别

意义位置后面跟的东西
throws异常处理的一种机制方法声明处异常类型
throw手动生成异常对象的关键字方法体内异常对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值