异常处理与调试

139、异常机制 异常分类

案例
public static void main(String[] args) {
        System.out.println("step1");

        try{
            int i=1/0;
        }catch(Exception e){
            e.printStackTrace();
        }
        System.out.println("step2");
    }
缺点

逻辑代码和错误处理放在一起

本质

程序出现异常,程序安全的退出,处理完后继续执行的机制。

抛出异常

执行方法发生异常,生成代表该异常的对象,停止当前执行路径,把异常对象给jre

捕获异常

jre得到异常后,寻找对应的代码处理异常。

所有异常根类为java.lang.Throwable

在这里插入图片描述

error不用管,

内置异常类不满足使用,可以创建自己的异常类。

异常分类

运行时异常:编译器不知道,

checkedException:编译无法通过。

常见异常

NullPointerException异常

String str=null;
sout(str.charAt(0));

ClassCastExcetion异常

ArrayIndexOutOfBoundsException异常

140、checkedException

编译时检查出来的异常;不处理不让走

141、try-catch-finally

try:可能出现异常的语句

定义多个exception时,子类放前面,父类放后面。

finally:无论有没有碰到异常,都会执行。

做一些释放资源工作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mo3dnd2N-1651028788421)(C:\Users\Shenjh01\AppData\Roaming\Typora\typora-user-images\image-20220427005157268.png)]

语句一出现异常,处理完之后,不会处理语句二。

案例

io流结合

public static void main(String[] args) {

        FileReader reader=null;

        try{
            reader=new FileReader("d:/a.txt");
            char c=(char) reader.read();
            char c2=(char) reader.read();
        }catch (FileNotFoundException e){
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {if(reader!=null){
                reader.close();
            }

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

142、声明式异常处理

自己不处理,把异常扔出去,谁调用,谁处理

public int read() throws IOException{
    return sd.read();
}
example
	public static void main(String[] args) throws Exception {

        FileReader reader=null;

        reader=new FileReader("d:/a.txt");
        char c=(char) reader.read();
        char c2=(char) reader.read();
    }

一直没人处理,最后到框架处理

public class Test03 {

    public static void main(String[] args)  {

        try{
            readFile("d:/a.txt");
        }catch (Exception e){
            e.printStackTrace();
        }
    }


    public static void readFile(String path) throws Exception{
        FileReader reader=null;

        try{
            reader=new FileReader(path);
            char c=(char) reader.read();
            char c2=(char) reader.read();
        }finally {
            try {if(reader!=null){
                reader.close();
            }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

144、自定义异常

只需从Exception类或它的子类派生一个子类即可,

145、百度搜索处理异常

1、细心查看异常信息,确定异常种类和相关java代码代号

独立解决50个异常,可以搞定所有异常。

值得花时间解决

看至少10篇文章

2、确定上下文相关的关键词信息

拷贝异常信息到百度,查看相关帖子,寻找思路。

3、问同事

寻找问题本身关键词

寻找问题上下文关键词

尽量细致描述问题,开始搜索

放宽条件

写一篇博客,完整描述碰到一个异常的解决流程

146、idea调试视图 可视化bug追踪

核心是增加断点(breakpoint)

程序到此处暂时挂起

设置断点

1、行号后单机可以增加断点

在这里插入图片描述

public class Test05 {

    private int num=10;

    public void run(int a){


        for(int i=0;i<a;i++){
            num=num*a;
        }
        go(num);
    }
    
    public void go(int b){
        System.out.println("num="+b);
    }

    public static void main(String[] args)  {

        Test05 t=new Test05();
        t.run(3);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值