1、类java.lang.Throwable作为所有异常的超类;
其下分为Error和Exception,Error为程序本身无法处理的错误,而Exception则是程序本身可以捕获并可处理的异常;
2、Exception下面有很多异常类
这些异常类被分为两种,一种是运行时异常(又称非检查异常),另一种则是编译异常(即检查异常)。
常见异常介绍
运行时异常:
- ArrayIndexOutOfIndex:数组越界异常
- NullPointerException:空指针异常
- ClassCastException:类型转换异常
- ClassNotFoundException:无法找到指定类异常
- ArithmeticException:算术异常
- IllegalArgumentException:非法参数异常
- MissingResourceException:资源缺失异常
1.ArrayIndexOutOfIndex:数组越界异常
List list = new ArrayList();
list.get(0);
//打印结果:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
2.NullPointerException:空指针异常
比如说你创建一个对象Student s=null;,然后你还用s来调用它的方法,那么就会空指针异常,因为你指向的对象已经不存在了。
实际上就是变量里没有地址值,却要强行用这个变量指向一个对象,没有地址当然找不到对应的东西,然后就报错了。
@Data
class People{
private String name;
private Integer age;
}
People people = new People();
String name = people.getName();
System.out.println("String"+":"+name);
Integer age = people.getAge();
System.out.println("ageInteger" +":"+age);
int ageInt = people.getAge();
System.out.println("ageInt" +":"+ageInt);
//打印结果:
String:null
ageInteger:null
java.lang.NullPointerException
People people2 = null;
people2.getAge(); //指向的对象已经不存在,还调用它的方法
//打印结果:
java.lang.NullPointerException
此处例子是null赋值给int类型变量,所以报错
3.ClassCastException:类型转换异常
大部分原因是因为强制转换或者是SQL映射时发生了这个异常
<delete id="deleteByRoadName">
DELETE FROM transport_record_today
<where>
1=1
and road_desc != #{describe,jdbcType=VARCHAR}
<if test="describe!= -1 ">or road_desc IS NULL </if>
</where>
</delete>
以上describe为varchar与-1比较就会抛出该异常;
4.ClassNotFoundException:无法找到指定类异常
ERROR [main] com.demo.vite.task.QuartzManager [QuartzManager.java:43] jobjob1 添加失败,java.lang.ClassNotFoundException: com.demo.vite.task.PostTask1
5.ArithmeticException:算术异常除数为0
java.lang.ArithmeticException: / by zero
6.IllegalArgumentException:非法参数异常
抛出的异常表明向方法传递了一个不合法或不正确的参数。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-rr-dd"); System.out.println(sdf.format(new Date())); //打印结果: java.lang.IllegalArgumentException: Illegal pattern character 'r'
7.MissingResourceException:资源缺失异常
资源丢失,要不你指定的路径错误就是把资源删掉了。
检查异常:
FileNotFoundException:找不到文件异常
Logging system failed to initialize using configuration from 'classpath:logback.xml' java.io.FileNotFoundException: class path resource [logback.xml] cannot be resolved to URL because it does not exist
异常
一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。
例如,下面的方法声明抛出 RemoteException 和 InsufficientFundsException:
public void withdraw(double amount) throws RemoteException,
InsufficientFundsException {
// Method implementation
}
抛出异常的两种方式
- 显式抛出异常,在程序同使用throw关键字,手动将异常实例抛出。
- 隐式抛出异常,抛出的主体是JVM,在运行时遇到无法处理的异常情况。
- 程序级异常:由程序或者API程序抛出的异常。例如 IllegalArgumentException 类,IllegalStateException 类。
- JVM(Java虚拟机) 异常:由 JVM 抛出的异常或错误。例如:NullPointerException 类,ArrayIndexOutOfBoundsException 类,ClassCastException 类。