首页 > 编程语言 >java学习日记20230330-异常

java学习日记20230330-异常

时间:2023-03-30 23:33:56浏览次数:53  
标签:java 代码 try finally catch 20230330 异常 日记

异常基本概念

  • java语言中,将程序执行中发生的不正常情况称为异常,开发中的语法错误和逻辑错误不是异常;
  • 执行中的异常事件可以分为两类
    • error(错误),java虚拟机无法解决的严重问题:如jvm系统内部错误,资源耗尽:StackOverflowError【栈溢出】和OOM(out of memory)
    • exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如:空指针访问,读图读取 不存在的文件,网络连接中断等,分为运行时异常和编译时异常;
  • 异常体系图
    • java源程序-编译异常——字节码文件-运行异常——在内存中加载运行类
    • 异常分为两大类,编译时异常和运行时异常
    • 运行时异常,编译器不要求强制处置的异常,一般是指编程时的逻辑错误,是程序员应该避免其出现的异常。java.lang.RuntimeException类及其子类都是运行时异常
    • 对于允许时异常,可以不做处理,因为这类异常很普遍,若泉处理可能会对程序的可读性和运行效率产生影响
    • 编译时异常,时编译器要求必须处置的异常
  • 常见运行时异常
    • NullPointerException空指针异常
      • 当程序试图在需要对象的方法使用null时,抛出该异常
    • ClassCastException类型转化异常
      • 当试图将对象强制转化为不是实例的子类时,抛出该异常
    • ArithmeticException数学运算异常
      • 当出现异常的运算条件时,抛出此异常
    • ArrayIndexOutOfBoundsException数据下标越界异常
      • 用非法索引访问数组时抛出的异常,如果索引为负或大于等于数组大小,则该索引为非法索引
    • NumberFormatException数字格式不正确异常
      • 当应用程序试图将字符串转化成一种数值类型时,但该字符串不能专为为适当格式,则抛出异常
  • 编译异常:在编译期间,就必须处理的异常,否则代码不能通过编译
    • SQLException 操作数据库时,查询表可能发生异常
    • IOException操作文件时,发生的异常
    • FileNotFoundException 当操作一个不存在的文件时,发生异常
    • ClassNotFoundException 加载类,而该类不存在时,异常
    • EOFException 操作文件,到文件末尾,发生异常
    • IIIegalArgumentException 参数异常
  • 异常处理机制
      • try-catch-finally:当异常发生时,系统将异常封装成Exception对象e,传递给catch,得到异常对象时,自定义处理,不管try代码块是否有异常发生,始终要执行finally,如果没有发生异常,catch代码块不会执行,finally一般时资源释放
        • java中提供try和catch块来处理异常,try中包含可能出错的代码,catch块用于try块中发生的异常;
        • try{可以的代码,将异常生成对应的异常对象,传递给catch块}catch(异常){对异常的处理};
        • 如果异常发生,则异常发生后面的代码不会执行,直接进入catch块
        • 如果异常没有发生,则顺序执行try的代码块不会进入到catch
        • 如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源)则使用finally{}
        • 可以有多个catch语句捕获不同的异常,要求父类异常在后,子类异常在前,比如Exception在后,NullPointerException在前
        • 可以进行tr-finally配合使用,这种用法相当于没有捕获异常,因此程序会直接崩掉,应用场景就是执行一段代码,不管是否发生异常,都必须执行某个业务逻辑
        • public class TryCatchDetail01 {
              public static void main(String[] args) {
                  try {
                      int n1 = 10/1;
                      String str = "123";
                      int a = Integer.parseInt(str);
                      System.out.println(a);
                      Person person = new Person();
                      person = null;
                      person.getName();
                  } catch (ArithmeticException e) {
                      System.out.println(e.getMessage());
                  } catch (NumberFormatException e) {
                      System.out.println(e.getMessage());
                  } catch (NullPointerException e) {
                      System.out.println(e.getMessage());
                  }finally {
                      System.out.println("finally");
                  }
              }
          }
          class Person{
              private String name ="jack";
          
              public String getName() {
                  return name;
              }
          }
          View Code

           

      • throws:JVM——MAIN方法——其他方法,throws可以将异常范围给上一层级,jvm输出异常信息,终止程序,默认采用throws方法

标签:java,代码,try,finally,catch,20230330,异常,日记
From: https://www.cnblogs.com/DragonJack/p/17274585.html

相关文章

  • java条件判断和循环
    一流程控制三大流程控制语句:顺序,选择,循环二选择结构在多重if-else中,只有一个语句不加括号时:else匹配最近的,就近原则 if结构,if-else结构if(条件)  语句1;else  语句二  if(条件){  语句1;}else{  语句2;} 多重if......
  • Java线程池应用
    原文:https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html(难得的权威技术分享文章,拷贝过来防止丢失) 本文开篇简述线程池概念和用途,接着结合线程池的源码,帮助读者领略线程池的设计思路,最后回归实践,通过案例讲述使用线程池遇到的问题,并给出了一种动态......
  • 如何解决Java代码上传到Git仓库显示Git冲突的错误
    问题描述好多次进行Commit和Push,都是显示被Git仓库拒绝了,就很崩溃,靠着友友帮我才解决的问题解决需要先在GitBash里面进行gitpull更新一下,将Git仓库里面最新的内容跟更新出来,然后才能进行代码上传,记住啦!!!!!!!!!!!......
  • 每日总结-23.3.29-利于云服务器和javaweb简单实现一个网站
    每日总结-23.3.29-利于云服务器和javaweb简单实现一个网站 3月29日总结今日使用云服务器和tomcat实现了简单网站的搭建。使用工具(个人体验,仅作参考,使用其他版本或工具应该也行):1.移动云新人体验免费云服务器一台。(个人专享:通用型云主机)活动页面 (https://ecloud.10086.......
  • 总结20230330
    今天是周四,又是一周内上课时间最短的一天。今天的课是计算机网络和羽毛球课;今天是把计算机网络昨天的课补了回来,今天计网开启了第四章,讲的是网络层。下午的羽毛球课时间是打双打比赛,结果不理想,打了两场,输了一场,还是再接再厉吧,下节课加油!今天晚上接着学习小程序。......
  • java.lang.String中的trim()方法的…
    String.Trim()方法到底为我们做了什么,仅仅是去除字符串两端的空格吗?一直以为Trim()方法就是把字符串两端的空格字符给删去,其实我错了,而且错的比较离谱。首先我直接反编译String类,找到Trim()方法:publicstringTrim(){returnthis.TrimHelper(WhitespaceChars,2);}Trim......
  • C#使用Java的秘钥对进行SHA256withRSA签名验签
    usingOrg.BouncyCastle.Crypto.Parameters;usingOrg.BouncyCastle.Security;usingSystem;usingSystem.Security.Cryptography;usingSystem.Text;usingSystem.Xml;///<summary>///RSA私钥,从Java格式转.net格式(不依赖第三方包)///</summary>//......
  • 有关归并排序-Java实现
    有关归并排序:其中的分治思想很值得参考:1/**2*归并排序块合并3*@paramnum目标的排序数组4*@paramleftIndex传入的分治块的做左端索引5*@parammid中间索引6*@paramrightIndex传入的分治块的做右端索引7*@param......
  • java
    Java目录Java数据类型基本数据类型转换获取变量数据类型long后面加Lfloat后面加F包装类使用包装类的原因?为什么要保留基本数据类型?包装类的自动拆装箱机制!变量类型静态变量成员变量局部变量变量默认初始值运算符算数运算符赋值运算符比较运算符逻辑运算符三元运算符位运算符原码......
  • 记录首次部署Linux服务器搭建Java项目的经历
    1.下载JDK1.8下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html本次下载版本:jdk-8u361-linux-x64.tar.gz2.安装JDK1.8(1)复制“jdk-8u361-linux-x64.tar.gz”到Linux服务器的/usr/local/install文件夹下(2)执行【tar-zxvfjdk-8u361-linux-x64.tar.g......