java中的异常处理机制_Java中的异常处理机制 r囧r小猫 2022-11-05 15:56 187阅读 0赞 一、异常概述 异常是为了反馈和处理/解决问题设计的一套机制。异常的顶级父类是Throwable,它有两个子类:Error、Exception。下面分别详细介绍二者。 二、异常的特点 1、Exception的定义:表示在合理的应用程序中出现的可以处理的问题。 2、异常的分类: 编译时异常:在编译的时候就出现并要求处理的异常。比如CloneNotSupportedException ParseException 运行时异常:在编译的时候不出现,到了运行的时候才会报错。在使用的时候可以处理,如果不处理在运行的时候会报错。比如:RuntimeException NullPointerException ArrayIndexOutOfBoundsException ClassCastException等。 3、异常的处理方式: 继续向上抛出:throws 可以捕获:try-catch 4、自定义异常:如果在实际开发过程中,遇到了问题但是在java中没有对应的异常,那么就需要自己定义一个异常。 如果定义的是一个编译时异常,写一个类继承Exception。 如果需要定义一个运行时异常,需要继承RuntimeException。 示例如下: public classExceptionDemo2 \{public static String readTxtFile(String path) throwsPathNotExistException, FileFormatException \{//路径问题 if (!newFile(path).exists())//需要将抛出的问题以对象的形式来进行封装//如果跑出了异常对象,那么该方法的后续代码不再执行 throw new PathNotExistException("亲,这个路径不存在哦~~~");//文件格式不正确 if (!path.endsWith(".txt")) \{//xxxx.xxx.xxx int index = path.lastIndexOf('.'); String suffix= path.substring(index + 1);throw new FileFormatException("需要一个txt文件,但是传入一个" + suffix + "文件"); \}//正常读取 return "读取成功~~~"; \} \} @SuppressWarnings("serial")class PathNotExistException extendsException \{//private String message; publicPathNotExistException(String msg) \{//this.message = msg; super(msg); \}//public String getMessage() \{//return message;//\} \} @SuppressWarnings("serial")class FileFormatException extendsException \{publicFileFormatException(String msg) \{super(msg); \} \} 5、异常的捕获方式 分别处理:每一个异常分别对应一个catch,适合于每一个异常的处理方式各不一样的情况。 统一处理:如果所有的异常处理方式都一样,那么可以统一捕获一个父类异常对象。 分组处理:如果异常之间的处理方式进行了分组,那么同一组异常之间可以用“|”隔开---从JDK1.7开始。 public static void main(String\[\] args) /\*throws FileFormatException\*/\{ //1.分别处理异常//try \{//String msg = readTxtFile("D:\\\\a.bmp");//System.out.println(msg);//\} catch (PathNotExistException e) \{// //处理问题// //System.out.println("捕获到了一个问题:路径不存在~~~");//System.out.println(e.getMessage());//\} catch (FileFormatException e) \{// //System.out.println("文件格式不正确~~~");//System.out.println(e.getMessage());//\}//2.统一处理//try \{//String msg = readTxtFile("D:\\\\a.bmp");//System.out.println(msg);//\} catch (Exception e) \{//System.out.println(e.getMessage());//\}//3.分组处理 try\{ String msg= readTxtFile("D:\\\\a.bmp"); System.out.println(msg); \}catch (PathNotExistException |FileFormatException e) \{//表示捕获PathNotExistException或者是FileFormatException System.out.println(e.getMessage()); \} \} 6、异常对方法的重载没有影响。 //异常对方法的重载的有影响吗? classA \{public void m() throwsIOException \{ System.out.println("A m()"); \}public void m(int i) throwsParseException \{ System.out.println("A m(int)"); \} \}class B extendsA \{public void m() throwsEOFException, FileNotFoundException, NullPointerException \{ System.out.println("B m()"); \} \} 7、异常对方法重写的影响:在方法重写的时候,子类中重写的方法抛出的编译时异常不能超过父类方法抛出的编译时异常的范围。即:子类不能抛出比父类更高级的异常。 8、finally:无论前边的代码执行成功与否,finally中的代码都会执行一次。内存中的栈可以分为计算区和结果区;当try检测到finally时,程序还是会顺序执行。只不过会返回结果会延迟,此时,当执行到try中的return语句时,会先将结果存储到结果区,等到finally程序执行完毕后,再将结果返回。如果try 和 finally都有return语句,这以finally返回语句为准。例如如下实例返回结果为5。 public static voidmain(String\[\] args) \{ System.out.println(m()); \}private static intm() \{int i = 5;try\{//代码依然是从上到下顺次执行的//在执行try之前会先检测是否有finally//如果有finally,那么会将try中的返回过程推后//栈内存的结构:计算区域,结果区域 -> 栈帧//实际执行过程:try->finally->方法返回实际结果//先执行try中的代码//执行return语句,只是将结果放入结果区域//i在计算区域继续自增为6 return i++; \}finally\{//继续执行finally//i在计算区域继续自增为7//执行完成finally,方法会将结果区域的值进行返回 i++; System.out.println("finally:" +i); \} \} 当返回的是一个引用类型时,由于finally中值的改变是改变的结果区的数据,因此,此时会影响到返回结果。例如: public classExceptionDemo8 \{public static voidmain(String\[\] args) \{ System.out.println(m()); \}private staticStudent m() \{ Student s= newStudent();try\{ s.setName("翠花"); s.setAge(18);//因为结果区域存储的是s的地址 returns; \}finally\{ s= newStudent(); s.setName("周星星"); s.setAge(80); \} \} \}classStudent \{privateString name;private intage;publicString getName() \{returnname; \}public voidsetName(String name) \{this.name =name; \}public intgetAge() \{returnage; \}public void setAge(intage) \{this.age =age; \} @OverridepublicString toString() \{return "Student \[name=" + name + ", age=" + age + "\]"; \} \} 此时,返回的结果是:周星星,80 9、如果方法抛出的是父类异常,那么使用的时候也必须捕获一个父类异常;再捕获异常的时候,必须先捕获子类异常后捕获父类异常。原因:如果先捕获父类异常,父类异常中已经包含子类异常,就会报错了。 10、当项目处在开发期间是,如果项目中出现了异常,打印这个异常的栈轨迹,然后根据这个轨迹进行调错;如果项目已经上线,出现了异常,记录错误日志。 三、Error 1、表示严重的错误。 2、出现之后不能处理。 3、出现之后只能尽量优化代码,减少错误出现的几率。
相关 详解Java中异常处理机制 在Java编程语言中,异常处理机制是用于处理程序运行时出现的错误情况的一种机制。以下是详细解析: 1. 异常类型:Java中的所有错误或异常都封装在一个名为`Exceptio 女爷i/ 2024年09月17日 11:42/ 0 赞/ 12 阅读
相关 理解Java中的异常处理机制 在Java中,异常处理机制是一种通过预设的方式处理程序运行时可能出现的错误情况。这个过程主要涉及到以下几种元素: 1. **抛出异常(Throwing an Exceptio 拼搏现实的明天。/ 2024年09月15日 02:39/ 0 赞/ 9 阅读
相关 Java中的异常处理机制详解。 在Java中,异常处理是一种机制,用于捕获和处理程序运行过程中的错误情况。以下是Java中异常处理的主要概念: 1. **抛出异常**:当程序内部出现错误或无法继续执行时,可 忘是亡心i/ 2024年09月14日 15:21/ 0 赞/ 15 阅读
相关 详解Java中的异常处理机制 在Java中,异常处理是一种机制,用于应对程序运行过程中可能发生的错误或异常情况。以下是Java中异常处理的几个核心部分: 1. **抛出异常**:当程序遇到无法正常处理的情 Bertha 。/ 2024年09月11日 04:27/ 0 赞/ 46 阅读
相关 Java中的异常处理机制是什么?如何使用异常处理机制? Java异常处理机制是Java编程语言中的一种错误处理机制,它可以帮助程序员在程序运行时检测到并处理错误。异常处理机制主要包括抛出异常、捕获异常和处理异常三个方面。 1. Dear 丶/ 2024年03月22日 13:36/ 0 赞/ 28 阅读
相关 java中的异常处理机制_Java中的异常处理机制 一、异常概述 异常是为了反馈和处理/解决问题设计的一套机制。异常的顶级父类是Throwable,它有两个子类:Error、Exception。下面分别详细介绍二者。 二、异 r囧r小猫/ 2022年11月05日 15:56/ 0 赞/ 188 阅读
相关 Java中异常处理机制,事件机制 Java中异常处理机制,事件机制 参考文章: [(1)Java中异常处理机制,事件机制][1_Java] (2)https://www.cnblogs.com/wangy 水深无声/ 2022年09月04日 11:49/ 0 赞/ 212 阅读
相关 Java中的异常及其处理机制 异常是Java编程中碰到的十分常见的一种情况,分为Checked和Unchecked类型,Unchecked异常必须对其进行处理,处理方式一般有两种,要么捕获要么抛出异常交给调 小灰灰/ 2022年05月11日 01:36/ 0 赞/ 192 阅读
还没有评论,来说两句吧...