java中异常的处理逻辑

异常:

在程序运行过程中,出现的不正常的情况

注意,1 相同代码在运行时候,根据输入参数的不同,可能发生也可能不发生
2 如果要解决带麦肿出现的异常,需要添加非常复杂的代码逻辑进行判断,会使得代码变得非常臃肿
3 程序在运行时出现问题,会导致后面的代码无法执行,而使用异常机制之后
后续的代码会继续执行,不会中断整个程序
4 在异常的处理过程中,不要只是简单的输出错误,要尽可能将详细的异常信息进行输出
    e.printStackTrace() 打印异常的堆栈信息,可以从异常信息的最后一行开始追踪寻找自己编写的java类

异常处理的方式:

1、捕获异常
    try{代码逻辑 catch(Exception e){异常提醒}
    try{代码逻辑}catch(具体的异常)catch(具体的异常);
    可以针对具体异常更精确处理
    注意:当使用多重异常时一定要注意相关一场的顺序,将子类放在最前面catch
    执行过程中出现的情况:
        1、正常,只执行try{}
        2、遇到异常,会处理try中异常代码之前的逻辑,后面的逻辑不会执行,最后会执行catch中的代码
        3、使用多重catch时,会与到异常子类不匹配的情况,此时依然会报错,因此在catch的最后将父类写上
2、抛出异常

    在异常情况出现的时候,可以使用try。。catch...finally还可以将异常抛出,由外部进行处理
    1、在方法调用过程中,可以存在n多个方法之间的调用,此时假如每个方法中都包含了异常,那么需要每个方法中都进行try。。。catch,另一种简单的方式就是在方法最外层调用处理一次就好,使用throws的方法,对所有执行过程中的所有方法出现的异常进行统一集中处理
    2、如何判断用throws 还是 try...catch?
    偷懒的方式是判断整个调用的过程中,外层的调用方法是否有对异常的处理,如果有直接用throws,这里注意:main方法声明的异常 ,由Java虚拟机处理 

public class Person { 
 private String name = ""; // 姓名 
 private int age = 0; // 年龄 
 private String sex = "男"; // 性别 
 public void setSex(String sex) throws Exception { 
    if ("男".equals(sex) || "女".equals(sex)) 
        this.sex = sex; 
    else { 
        throw new Exception(“性别必须是\"男\"或者\"女\"!"); //抛出异常
 } 
 } 
} 

在程序运行过程中,如果处理异常的部分包含finally的处理,无论代码是否发生异常,finally中的代码都会运行
finally包含那些处理逻辑:

    1、IO流的关闭操作一般设置在finally中
    2、数据库的连接关闭操作设置在finally中

关于finally和return:
1、如果finally之前有return,同时finalli{}有return,那么返回finally内的retrun
2、如果finally中没有return语句,但是改变了返回值的值,这里有类似引用传递和值传递的区别

1)如果return的数据是基本数据类型或文本字符串,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值
2)如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变以后的该属性的值

你可能感兴趣的:(java)