异常处理总结

一:try-catch-finally
/*
* 说明:
* 1.finally类是可选的
* 2.使用try将可能出现异常的代码包装起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象
* 的类型,去catch中进行匹配
* 3.一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常类的处理。一旦处理完成,就跳出当前的
* try-catch结构(在没有写finally的情况)。继续执行其后的代码
* 4.catch中的异常类型如果没有子父类关系,则声明在上,谁声明在下无所谓
* 如果满足子父类的关系,则要求子类一定要声明在父类上面,否则,报错
* 5.常用的异常对象处理的方式,String  getMassage()  printStackTrace()
* 6.在try结构中声明的变量,出了try结构以后,就不能再被调用
*
* 7.finally类声明的是一定会被执行的代码。即使catch中又出现异常了、try中有return语句、catch中有return语句等情况
* 这种情况下如果没有finally,则系统会直接结束运行
*
* 8。像数据库连接,输入输出流网络编程Socket等资源,JVM是不能自动回收的,需要我们自己手动进行资源的释放,
* 此时的资源释放(7中的情况),就需要声明在finally中。
*
* 体会:使用try-catch-finally将一个编译时可能出现的异常,延迟到运行时出现。*/
public class text1 {
    public static void text(){
        FileInputStream fis = null;
        try {
            File file = new File("hello1.txt");
            fis = new FileInputStream(file);

            int data = fis.read();
            while (data!=-1)//没数据时,为负一
            {
                System.out.print((char)data);
                data=fis.read();
            }
        }catch (FileNotFoundException e){
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();;
        }finally {
            try {
                if(fis!=null)//防止空指针异常
                    fis.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        String str="123";
        str="abc";
        try{
            int num=Integer.parseInt(str);

            System.out.println("hello--1");//如果发现异常,直接进入catch不在进行下面的语句;
        } catch (NumberFormatException e) {
            System.out.println("出现了数值转换异常...");
            //String getMessage()
            System.out.println(e.getMessage());
            //打印出运行时调用的数据(错误信息)
//            e.printStackTrace();
        }catch(NullPointerException e){//在新的catch中e可以再次利用
            System.out.println("出现了空指针...");
        }catch (Exception e){
            System.out.println("出现异常了..");
        }
        System.out.println("hello---2");
        text();
    }
}

二:throws

/*
1."throws + 异常类型"写在方法的声明出处。指明此方法执行时,可能会抛出的异常类型
   一旦当方法体执行时,出现异常,仍会在异常代码处生成一个异常类的对象,此对象满足throws后异常
   类型时,就会抛出。异常代码后续的代码,就不再执行。

 2.体会:try-catch-finally:真正将异常给处理掉了。
 throws的方式,只是将异常抛给了方法的调用者。并没有真正将异常给处理掉.

 3.如果子类重写父类的方法时,当父类抛出异常类型时,子类抛出的异常类型不能大于父类的异常类型

 4.如何选择使用try-catch-finally 还是throws?
  4.1如果父类中被重写的方法没有用throws方式处理异常,则子类重写的方法也不能使用throws,意味着
  如果子类重写的方法有异常,必须使用try-catch-finally 方式处理。
  3.2执行的方法a中,先后又调用了另外几个方法,这几个方法是递进关系执行的。我们建议这几个方法使用throws
  的方式进行处理。而执行的方法a可以考虑使用try-catch-finally 方式进行处理

  如果递进关系中使用try-catch-finally 处理。如果某一段代码出现异常了,后面的代码没有必要在运行了,

  通常从程序代码中抛出的是自己编写的异常(系统不会帮我们自动抛出,除了系统定义的运行异常)
 */
public class text2 {
    public static void main(String[] args) {
        try {
            method2();
            System.out.println("hello--1");
        }catch (IOException e){
            e.getMessage();
        }
    }
    public static void method2() throws IOException{
        method1();
    }
    public static void method1() throws FileNotFoundException,IOException {//file..继承io所以只写io..也行
        File file = new File("hello.txt");
        FileInputStream fis = new FileInputStream(file);

        int data = fis.read();
        while (data!=-1){
            System.out.println((char)data);
            data = fis.read();//继续读取下一个;
        }
        fis.close();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值