异常[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();