异常的使用概述
异常及时Java程序在运行的过程中出行的错误
异常分类
JVM是如何处理异常的
main方法遇到这种问题有两种处理异常的方式 a:自己将问题处理,然后运行 b:没有针对处理方式,就会交给main方法的JVM去处理 c:JVM里面有一个默认的异常处理机制,将异常的名称,信息打印在控制台,并停止程序运行。
try抛出异常的三种方式
try...catch
try...finally
try...catch...finally
public class Demo2_Exception {
public static void main(String[] args) {
// demo();
int a=10;
int b=0;
int[] arr = {11, 22, 33, 44, 55};
try {
int c=a/b;
arr=null;
System.out.println(arr[10]);
System.out.println(c);
//JDK7出现的抛出异常方法,只要出现其中一个就可以抛出异常,为发生错误
}catch(ArithmeticException |ArrayIndexOutOfBoundsException e){
System.out.println("发生错误");
}
}
public static void demo() {
int a=10;
int b=0;
int[] arr = {11, 22, 33, 44, 55};
try {
int c=a/b;
arr=null;
System.out.println(arr[10]);
System.out.println(c);
//如果一个try后边跟着多个catch,最小的条件放在前面,大的条件放在后面
}catch(ArithmeticException e){
System.out.println("被除数为0");
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("数组索引越界");
}catch (Exception e){
System.out.println("发生错误");
}
}
}
异常分类
运行时异常:就是程序出现的错误 编译时异常:在编译程序时会出现的异常,必须在编译时候处理。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
Throwable
a:getMessage()是获取异常信息 b:toString()是获取异常的名称 c:printStackTrace()抛出异常信息和名称,已经异常出现的位置,返回值为void
异常throw的方式处理
throws是抛出问题,暴露问题,让调用这使用
编译时异常需要对其处理
运行时异常可以处理也不可以处理
Throw概述:
在方法类部使用,程序不能进行,需要跳转,就用throw抛出异常
Throws是在方法名称上声明后面,跟在类名后面,可以接多个异常类名,可以用逗号隔开。
final ,finally,finallize
final是修饰类的,类不能被继承。
final修饰方法,不能被重写。
fianl修饰常量,只能赋值一次
finally,是try…catch的一个语句,不能单独使用,使用来释放资源
fianllize是一个方法,当垃圾回搜器不存在引用对象,由对象的垃圾回收此调用方法。
public class Demo7_Finally {
public static void main(String[] args) {
try {
System.out.println(10/0);
}catch (Exception e){
e.printStackTrace();
System.exit(0);
return;
}finally {
System.out.println("我这有没有执行");
}
}
自定义异常
通过名称去确定啥类型的异常,这样就有针对性的解决异常
Java
public class Demo8_Exception {
}
class AgeOutOfBoundsException extends Exception {
public AgeOutOfBoundsException() {
super();
}
public AgeOutOfBoundsException(String message) {
super(message);
}
public class Demo8_Exception_Zhidingyi {
public static void main(String[] args) {
Person1 person1 = new Person1();
person1.setAge(99);
System.out.println(person1.getAge());
}
}
异常注意事项
子类在重写父类的方法时候,子类必须抛出和父类相同,父类子类的异常,子类不能抛出父类没有的异常。 try… catch的区别 try后面要接运行的代码 finally后面接不运行的代码