Java带你去看流浪世界!(十四)

异常[exception]

ArrayIndexOutOfBoundsException 数组索引越界异常 AIOOBE

CheckedException 受检异常 CE

RuntimeException 运行时异常 RE

IllegalStateException 非法状态异常 ISE

NumberFormatException 数字格式异常 NFE

NoSuchElementException 没有这样的元素 NSEE

ArithmeticException 算术异常 AE

InputMismatchException 输入异常 IME

NullPointerException 空指针异常 NPE

//为了预防空指针,一般都会在return后面添加null。
return null;

1.了解异常概念

异常的概念:在程序运行中/生活中,所发生的不正常的/不符合预期的情况,这就是异常,他会导致程序的中断或者过程的结束。

2.理解Java异常处理机制

try:尝试

catch:捕获

finally:最终的

throw:抛出

throws:声明

3.会捕捉异常

1.try-catch
try{
    //可能会出现异常的问题的代码段
}cath(能够捕获的异常类型 名){
    //对异常进行处理的代码段
}

添加了异常处理机制之后,程序运行的情况:

1.未出现异常:正常执行try中的和try-catch的内容,不会执行catch中的代码。

2.出现对应异常:在执行try中的代码时,如果出现异常,try中的代码进将不再往下执行,JVM会立刻创建对应的异常对象,然后将此对象传递哥catch块中的异常类型形参,进入catch块对异常进行处理,处理完后继续执行后续代码。

3.出现不对应的异常:在执行try代码时,如果出现异常,try中的代码进将不再往下执行,JVM会立刻创建对应的异常对象,然后将此对象传递哥catch块中的异常类型形参。【但如果catch的形参不匹配,则无法传入,也就无法进行异常处理,程序中断(和未添加异常处理一样的效果)】。
2.多重catch
try{
    //出现问题的代码段,捕获多个异常情况下,使用多重catch 且catch中的异常类型不能出现相同的情况。
}catch(异常类型1){
    syso(xxx);// 对异常进行处理的代码段
}catch(异常类型2){
     syso(xxx);// 对异常进行处理的代码段
}catch(3){
    .....
}

它的应用场景:需要对不同的异常进行不同的处理操作时,需要多重catch,但在很多场景下,为了省事,会直接捕获一个Exception父类。

3.try-catch-finally
try{
    //出现问题的代码段
}catch(异常类型){
     syso(xxx);
    //无论程序出现正常异常,都会正常执行代码
}finally{
    syso(xxx);
}

finally中的代码,无论程序是否出现异常都会正常执行。

当finally和return同时出现时,会先执行finally中的代码然后执行return。

finally除断电等物理情况外的唯一不执行时机:System.exit(0); //退出虚拟机

1.finally和final的区别finalize

	final是一个修饰符,修饰变量,正常被声明成一个常量,final修饰方法后,方法不可以重写

	finally作为一个异常处理时提供块来执行任何清除操作,和catch一起使用,控制进入finally

	finalize是一个方法名,java允许使用finalize()方法在垃圾收集器将对象从内存中清除,做清理工作。
System.out.println(xxx);
//arr,可以在控制台清楚看到你的异常信息
System.arr.println(xxx);
//e.getMessage 可以在控制台清楚看到,你的异常信息是什么信息
System.out.println(xxx e.getMessage());
//打印异常的堆栈信息(它是JVM默认的处理方式)---堆栈跟踪
}catch(能够捕获的异常类型 名)
e.printStackTrace();//by zero 系统自带的一种异常提示

4.会抛出异常

throw 接异常对象 抛出自定义的或者更全面的异常信息对象。

throws 接异常类型,标注在方法声明上,用来声明此方法可能出现杂异常类型。

public void setAge(int age)throws Exception{
    if(age < 0 || age > 100){
        System.out.println(xxx);
        this.age = 18;
        //throw new Exception(xxxx + age);
        throw new IllegalStateException(xxxx + age;)
    }
}

自定义异常:

将出现的异常继承自Exception系统异常中

public class IllegalStateException extends Exception{
    public void IllegalStateException(){
        super();
    }
    public void IllegalStateException(int age){
        super(age);
    }
}

5.了解Java异常体系结构

在这里插入图片描述

Throwable

Error(程序无法修复,必须人工修改) Exception(可通过代码/程序进行动态修复的)

				Checked异常(受检异常:编写出来,就提示你进行修复)

				Runtime异常 (运行时异常:代码执行过程中出现的异常,有些时候不需要修复)

在这里插入图片描述

6.使用log4j(log for java)记录日志 xxx.log

QQ空间:空间日志

程序中的日志:记录程序运行过程分钟的状态信息(一般会记录重要信息),也是解决问题的哟中手段(推荐在大型项目中使用日志进行debug而不是工具debug)。

1.导包 将jar包变成“小奶瓶”

2.配置log4j  通过log4j.properties 放在src目录里面。

3.使用API进行日志记录
//调用log记录
public static Logger logger = Logger.getLogger(字节码 .class文件){
    //记录程序中需要输出的信息。
    logger.info(xxxx);
}
logger.info();
logger.error();
logger.debug();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值