异常

1. 异常的体系结构* java.lang.Throwable*         |-----java.lang.Error:一般不编写针对性的代码进行处理。*         |-----java.lang.Exception:可以进行异常的处理*             |------编译时异常(checked)*                     |-----IOException*                         |-----FileNotFoundException*                     |-----ClassNotFoundException*             |------运行时异常(unchecked,RuntimeException)*                     |-----NullPointerException*                     |-----ArrayIndexOutOfBoundsException*                     |-----ClassCastException*                     |-----NumberFormatException*                     |-----InputMismatchException*                     |-----ArithmeticException
2.从程序执行过程,看编译时异常和运行时异常
编译时异常:执行javac.exe命名时,可能出现的异常
运行时异常:执行java.exe命名时,出现的异常3.常见的异常类型,请举例说明:
//******************以下是运行时异常***************************//ArithmeticException
    @Testpublic void test6(){int a = 10;int b = 0;System.out.println(a / b);}//InputMismatchException
    @Testpublic void test5(){Scanner scanner = new Scanner(System.in);int score = scanner.nextInt();System.out.println(score);scanner.close();}//NumberFormatException
    @Testpublic void test4(){String str = "123";str = "abc";int num = Integer.parseInt(str);}//ClassCastException
    @Testpublic void test3(){Object obj = new Date();String str = (String)obj;}//IndexOutOfBoundsException
    @Testpublic void test2(){//ArrayIndexOutOfBoundsException
//        int[] arr = new int[10];
//        System.out.println(arr[10]);//StringIndexOutOfBoundsExceptionString str = "abc";System.out.println(str.charAt(3));}//NullPointerException
    @Testpublic void test1(){//        int[] arr = null;
//        System.out.println(arr[3]);
        String str = "abc";str = null;System.out.println(str.charAt(0));}//******************以下是编译时异常***************************
    @Testpublic void test7(){
//        File file = new File("hello.txt");
//        FileInputStream fis = new FileInputStream(file);
//
//        int data = fis.read();
//        while(data != -1){
//            System.out.print((char)data);
//            data = fis.read();
//        }
//
//        fis.close();
        }

异常的处理

1.java异常处理的抓抛模型
过程一:"抛":程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象。*           并将此对象抛出。*           一旦抛出对象以后,其后的代码就不再执行。*         *         关于异常对象的产生:① 系统自动生成的异常对象*                          ② 手动的生成一个异常对象,并抛出(throw)*
过程二:"抓":可以理解为异常的处理方式:① try-catch-finally  ② throws

2.异常处理方式一:try-catch-finally
2.1 使用说明:
try{*         //可能出现异常的代码* * }catch(异常类型1 变量名1){*         //处理异常的方式1* }catch(异常类型2 变量名2){*         //处理异常的方式2* }catch(异常类型3 变量名3){*         //处理异常的方式3* }* ....* finally{*         //一定会执行的代码* }* * 说明:* 1. finally是可的。* 2. 使用try将可能出现异常代码包装起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象的类型,去catch中进行匹配* 3. 一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常的处理。一旦处理完成,就跳出当前的try-catch结构(在没写finally的情况。继续执行其后的代码* 4. catch中的异常类型如果没子父类关系,则谁声明在上,谁声明在下无所谓。*    catch中的异常类型如果满足子父类关系,则要求子类一定声明在父类的上面。否则,报错* 5. 常用的异常对象处理的方式: ① String  getMessage()    ② printStackTrace()* 6. 在try结构中声明的变量,再出了try结构以后,就不能再被调用* 7. try-catch-finally结构可以嵌套总结:如何看待代码中的编译时异常和运行时异常?* 体会1:使用try-catch-finally处理编译时异常,是得程序在编译时就不再报错,但是运行时仍可能报错。相当于我们使用try-catch-finally将一个编译时可能出现的异常,延迟到运行时出现。*     * 体会2:开发中,由于运行时异常比较常见,所以我们通常就不针对运行时异常编写try-catch-finally了。针对于编译时异常,我们说一定要考虑异常的处理。
2.2:finally的再说明:* 1.finally是可的* * 2.finally中声明的是一定会被执行的代码。即使catch中又出现异常了,try中return语句,catch中return语句等情况。* * 3.像数据库连接、输入输出流、网络编程Socket等资源,JVM是不能自动的回收的,我们需要自己手动的进行资源的释放。此时的资源释放,就需要声明在finally中。2.3:[面试题] final、finally、finalize三者的区别?类似:
throw 和 throws
Collection 和 Collections
String 、StringBuffer、StringBuilder
ArrayList 、 LinkedList
HashMap 、LinkedHashMap
重写、重载结构不相似的:
抽象类、接口
== 、 equals()
sleep()、wait()

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

4. 对比两种处理方式
try-catch-finally:真正的将异常给处理掉了。
throws的方式只是将异常抛给了方法的调用者。并没真正将异常处理掉。  

5. 体会开发中应该如何选择两种处理方式?*  5.1 如果父类中被重写的方法没throws方式处理异常,则子类重写的方法也不能使用throws,意味着如果子类重写的方法中异常,必须使用try-catch-finally方式处理。*  5.2 执行的方法a中,先后又调用了另外的几个方法,这几个方法是递进关系执行的。我们建议这几个方法使用throws的方式进行处理。而执行的方法a可以考虑使用try-catch-finally方式进行处理。补充:
方法重写的规则之一:
子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型

手动抛出异常对象

1.使用说明
在程序执行中,除了自动抛出异常对象的情况之外,我们还可以手动的throw一个异常类的对象。

2.[面试题]
throw 和  throws区别:
throw 表示抛出一个异常类的对象,生成异常对象的过程。声明在方法体内。
throws 属于异常处理的一种方式,声明在方法的声明处。

3.典型例题
class Student{private int id;public void regist(int id) throws Exception {if(id > 0){this.id = id;}else{//手动抛出异常对象
//            throw new RuntimeException("您输入的数据非法!");
//            throw new Exception("您输入的数据非法!");throw new MyException("不能输入负数");}}@Overridepublic String toString() {return "Student [id=" + id + "]";}}

自定义异常类

如何自定义一个异常类?
/** 如何自定义异常类?* 1. 继承于现的异常结构:RuntimeException 、Exception* 2. 提供全局常量:serialVersionUID* 3. 提供重载的构造器* */
public class MyException extends Exception{static final long serialVersionUID = -7034897193246939L;public MyException(){}public MyException(String msg){super(msg);}
}

转载于:https://www.cnblogs.com/LXL616/p/10923971.html

Java-笔记16-复习相关推荐

  1. Java编程笔记16:深入容器

    Java编程笔记16:深入容器 图源:PHP中文网 填充容器 填充容器会有Java编程笔记15:数组 - 魔芋红茶's blog (icexmoon.cn)种提到的填充数组同样的问题. 和数组类似,标 ...

  2. Java笔记07-List、Set、数据结构、Collections

    Java笔记07-List.Set.数据结构.Collections 主要内容 数据结构 List集合 Set集合 Collections 第一章 数据结构 2.1 数据结构有什么用? 当你用着jav ...

  3. 【个人笔记】《计算机图形学》部分课堂笔记与复习

    考完试有点伤之心,遂发笔记于csdn:考前看了一套11年左右的卷子,以为差不多的内容,最多改一下几道题就行了:结果自己还是图样图森破,十年前的卷子参考价值有但不能只全依赖试卷的题目,还是要好好上课听讲 ...

  4. Java笔记-Java日常笔记-Java核心语言-史上最全Java笔记-Java烂笔头-实时更新(~v~)

    阿一的日常Java笔记,实时更新,有什么问题可以留言交流一下,大家一起共同进步!!! 1.Java基础 1.1.基本语法 1.1.1.关键字 ​ 定义:被java赋予特殊含义的字符串(单词): ​ 关 ...

  5. 学java怎么做笔记?如何整理java笔记?java学习笔记

    许多开始学Java编程的朋友,都是跟着视频学习的,知道要记笔记,但又不知如何下手.其实笔记主要的还是记框架以及自己能感觉到不懂得地方方便巩固加深印象,笔记不要记得密密麻麻的看着就让人感觉头疼,学习编程 ...

  6. Java笔记--实时更新

    Java一学期复习 & 基础入门 前言 一.Java开发入门 1.1 Java概述 1.2 JDK, JRE, JVM 二.Java编程基础 2.1 基本语法 2.2 数据类型 2.3 运算符 ...

  7. Hadoop学习笔记—16.Pig框架学习

    Hadoop学习笔记-16.Pig框架学习 一.关于Pig:别以为猪不能干活 1.1 Pig的简介 Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-LIKE语言叫Pig Latin, ...

  8. 数据结构与算法-java笔记一 更新中

    数据结构与算法-java笔记一 更新中 数据结构与算法 什么是数据结构.算法 数据结构学了有什么用: 线性结构 数组 特点 应用 链表 存储结构 链表类型 单链表 双向链表 双向循环链表 链表与数组的 ...

  9. 【java笔记】网络编程概述

    [java笔记]TCP通信程序_m0_52043808的博客-CSDN博客 [java笔记]网络编程:文件上传案例_m0_52043808的博客-CSDN博客 网络编程: 在一定协议下,实现两台计算机 ...

  10. Java String知识复习及补充和包装类

    Java String知识复习及补充和包装类 1. String类 1.1 String API复习 1.2 正则表达式 1.3 StringBuffer 和 StringBuilder 1.4 St ...

最新文章

  1. VS2013 编译使用 stlport
  2. 安全地创建和存储密码
  3. 玩转oracle 11g(9):crud操作(亲测)
  4. spark运行pi_如何使用甜蜜的橙色Pi起床并运行
  5. Siemens ug二次开发---Snap
  6. 如何将 Python 的一个类方法变为多个方法?
  7. kotlin界面_Kotlin界面
  8. 白板推导系列Pytorch-隐马尔可夫模型-概率计算问题
  9. 家庭记账本开发进度4
  10. hadoop集群常见问题解决
  11. JUnit 4 超详细教程(一)
  12. 华为云服务器更换操作系统,云服务器更换操作系统
  13. 动画中的关键帧动画的原理
  14. IEC61400-6 2020 塔架及基础设计要求 附录K 翻译
  15. 1.socket网络编程
  16. 容器技术-Docker 网络03-用户自定义网络-网络命令的使用
  17. 凯立德car 3.0 夏季版 升级过程(备忘)
  18. 计算机二级Python学习笔记(三):天天向上的力量
  19. IBM服务器端口IP设置
  20. 三菱fx2n64mr说明书_三菱FX2N-64MR-UA1/UL使用说明书FX2N-64MR-UA1/UL手册 - 广州凌控

热门文章

  1. python【力扣LeetCode算法题库】7- 整数反转
  2. Android移动开发之【Android实战项目】DAY4-项目发布到真机
  3. 反射工具类 java_Java反射工具类
  4. mysql 正则表达式_MySQL(基础正则表达式)
  5. (5.1) Tomcat 8 源码, 实例化组件
  6. 影响网站权重的关键性因素有哪些?
  7. python jupyter notebook运行没反应_jupyter notebook运行命令没有反应,右上报错这个
  8. 开发日记-20190607 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
  9. dnscapy使用——本质上是建立ssh的代理(通过dns tunnel)
  10. 木马——本质就是cs socket远程控制,反弹木马是作为c端向外发起网络请求