• 木舟0基础学习Java的第十六天(异常,分类,自定义异常,注意事项)


    异常

    异常概述:异常是Java程序运行过程中出现的错误

    异常分类:API查找Throwable

    1.Error(服务器宕机,数据库崩溃等)

    2.Exception C(异常的继承体系)API查RuntimeException

    运行时异常:一般是程序员的错误异常可以让我们发现错误并修改

    编译时异常:Exception下除了RuntimeException其他都是编译时异常 在写代码时就要处理掉 不然编译不通过

    异常处理的两种方式

    1.try catch(抓取)

       try catch finally

    2.throws(抛出)  //直接抛给Jvm java虚拟机执行 缺点:程序会终止

    try...catch处理异常的基本格式 try…catch…finally

    通过 try{}carch(){} 把问题处理后程序会继续执行

    1. public static void main(String[] args) {
    2. try{
    3. int a=10;
    4. System.out.println(a/0);
    5. }catch(ArithmeticException e){
    6. //ArithmeticException类 中重写了Object中的toString()
    7. e=new ArithmeticException("不能除0");
    8. System.out.println(e);
    9. }finally{
    10. //这里的代码不管有没有抓取异常都会执行
    11. }
    12. //通过 try{}carch(){} 把问题处理后程序会继续执行
    13. System.out.println("出现异常行以下的程序-----------------------------------------");
    14. }

    开发常用:

    异常 名字.printStackTrace();

    //打印堆栈信息 输出异常名字和问题的原因 以及问题出现在某个类中某一行

    例:java.lang.ArrayIndexOutOfBoundsException: 7
        at com.muzhou.lesson.exception.Demo02.main(Demo02.java:8) //异常代码位置

    类中抛异常案例:

    1. public class Person {
    2. private String name;
    3. private int age;
    4. public Person() {
    5. }
    6. public Person(String name, int age) {
    7. this.name = name;
    8. this.age = age;
    9. }
    10. public String getName() {
    11. return name;
    12. }
    13. public void setName(String name) {
    14. this.name = name;
    15. }
    16. public int getAge() {
    17. return age;
    18. }
    19. public void setAge(int age) throws Exception {
    20. if(age>0&&age<=120){
    21. this.age = age;
    22. }else{
    23. //抛出异常
    24. /* try{
    25. throw new Exception();
    26. }catch( Exception e){
    27. e=new Exception("年龄非法");
    28. System.out.println(e);
    29. }*/
    30. throw new Exception();//不处理异常 再次往方法上抛出 使用场景:在数据库
    31. }
    32. }
    33. @Override
    34. public String toString() {
    35. return "Person{" +
    36. "name='" + name + '\'' +
    37. ", age=" + age +
    38. '}';
    39. }
    40. }
    1. Person p=new Person();
    2. p.setName("张三");
    3. try{
    4. p.setAge(130);//调用者被告知这个方法中有异常抛出 传值调用要注意 让调用者来处理
    5. }catch(Exception e){
    6. e.printStackTrace();
    7. }
    8. System.out.println(p);
    9. }
    1. public void setAge(int age) {
    2. if(age>0&&age<=120){
    3. this.age = age;
    4. }else{
    5. throw new RuntimeException("年龄非法");//运行异常 不需要手动处理 由jvm默认的异常处理机制处理
    6. }
    7. }
    throw和throws的区别

    throw:在功能方法内部出现某种情况 程序不能继续运行 需要跳转时 就用throw把异常对象抛出

    1.用在方法体内 跟的是异常对象

    2.只能抛出一个异常对象名

    3.表示抛出异常 由方法体内的语句处理

    throws:

    1.用在方法声明后面 跟的是异常类名

    2.可以根多个异常类名 用逗号隔开

    3.表示抛出异常 由该方法的调用者处理

    自定义异常:

    自定义异常是给了异常名字 可以更好的识别异常解决问题

    自定义异常继承Exception 继承自RuntimeException

    1. public class AgeException extends Exception{
    2. //自定义编译异常
    3. public AgeException() {
    4. super();
    5. }
    6. public AgeException(String s) {
    7. super(s);
    8. }
    9. }
    1. public class AgeRuntimeException extends RuntimeException{
    2. //自定义运行时异常
    3. public AgeRuntimeException() {
    4. super();
    5. }
    6. public AgeRuntimeException(String s) {
    7. super(s);
    8. }
    9. }

    注意:

    子类继承父类 不能抛出>父类的异常 只能抛出<=父类的异常

    父类没有抛异常 子类不允许抛异常

  • 相关阅读:
    C语言:用函数实现2个字符串的交换
    启动hdfs伪分布式模式过程中格式化namenode报错
    全志V3S嵌入式驱动开发(驱动开发准备)
    2022.9.15模拟赛总结
    Java基础复习 Day 23
    [SQL]数据查询(二)
    如何使用ArcGIS Pro制作粉饰效果
    羧甲基荧光素6-FAM修饰聚缩醛Polyacetal/HA透明质酸纳米载体6-FAM-Polyacetal|6-FAM-HA(齐岳)
    Worthington核糖核酸测定详细攻略
    在ESP32上使用Arduino(Arduino as an ESP-IDF component)
  • 原文地址:https://blog.csdn.net/tzh525/article/details/140351113