1.
package com.ydlclass.exception;
public class ExceptionTest {
//java异常机制,对于一些异常我们可以使用判断来避免一个异常的发生,此外java还提供了一个可以帮助我们捕获异常并且处理异常的机制;
//使用背景是不能一段小的异常后,程序应当继续执行。而不应当被终止
//异常继承的顶级父类是Throwable类,这个类下面有两个直输的子类,分别为Error类,一个是Exception类
//只有继承thowalble类的对象才能被java虚拟机所抛出
//Exception是指能够被预料到的,并且能被捕获之后进行处理的
//Error正常情况下不会出现,一旦出现很难处理,outofmemoryError,stackoverflowError,noclassfounderError这几个常见的Error
public static void main(String[] args) {
byte[] bytes = new byte[1024 * 1024];
//可能会抛出虚拟机outofmemory内存的错误,这个错误可能是由于堆内存不足产生
//stackoverflowError,这种一般是由于方法之间的递归问题,循环递归产生的
//noclassfounderError,类文件的丢失
}
}
2.常见的检查性异常 package com.ydlclass.exception;
import java.sql.Time;
public class ExceptionTest { public static void main(String[] args) { //Exception可以分为两类:检查性异常(编译时就需要捕获的异常),这种的异常主要时提前预判,这类异常时检查性异常 // 运行时异常(非检查性的异常):这种时编码的逻辑问题,可以通过编码来避免掉,例如数组下标越界。
//1.常见的检查异常interruptedException,
try {
Thread.sleep(30000);//如果别的线程突然被其他的线程所打断掉,提前做出准备。
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println("我被吵醒了");//这个异常通常发生后应当判断是否能狗接着睡觉
}
//2.IOException,3.SqlException,
// 4.classNotFoundException(不同于之前的NOClassFoundError,之前的类是编译后,意外的被删除了)
try {
Class.forName("com.ydlclass.Dog");//如果没有这个类就是需要提前处理这种情况
} catch (ClassNotFoundException e) {//这时就会有检查性异常,尝试的动态加载一个类,但是这个类不存在,而之前的是错误原本是有,但是丢失了就是错误
e.printStackTrace();
}
}
}
3.常见的非检查性异常
``` 3.1常见的非检查性异常(空指针异常,算术运算异常,类转换异常(classcastException,解决办法是使用instanceof判断是否是一个类的子类,然后再去调用转型),下标越界异常,)
//3.1 nullpointerException()
String str = null;
try {
System.out.println(str.equals("123"));
} catch (NullPointerException e){
System.out.println("我这里出现了空指针异常的问题");
}
//这时就会产生空指针异常,我们可以使用异常捕获的机制来处理异常,
// 也可以使用编码的规范来实现,异常的处理问题
//这里的空指针异常怎么来处理:
//1.方法一:可以使用一个非空的字符串来使用equals方法来实现字符串的比较问题,即改写为“123”.equals(str)
//2.方法二:编码规范,在调用这个方法之前先写一个if判断来判断实现
//3.使用异常捕获的机制来解决这个问题
//Exception in thread "main" java.lang.NullPointerException
// at com.ydlclass.exception.ExceptionTest.main(ExceptionTest.java:27)
//3.2 ArithmeticException算数运算非检查性异常
int i = 10;
System.out.println(i/0);
//Exception in thread "main" java.lang.ArithmeticException: / by zero
// at com.ydlclass.exception.ExceptionTest.main(ExceptionTest.java:55)
//3.3classcastException
//在做类型转化之前没有先做判断而直接就转型可能导致类型的转化问题
//解决的办法就是在类型转化之前使用instanceof()函数做一个判断
//3.4 ArrayIndexOutOfBoundsException非检查性异常
//检查下标先进行一个检查
int[] ints = new int[12];
for (int i = 0; i < 12; i++) {
ints[i] = i;
}
System.out.println(ints[12]);
//Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 12 out of bounds for length 12
// at com.ydlclass.exception.ExceptionTest.main(ExceptionTest.java:48)
//3.5 numberFormatException这个异常
String s = "123";
int i = Integer.parseInt(s);
System.out.println(i);//这种情况是可以的,但是我们传入的是“adb呢”
int adb = Integer.parseInt("adb");
System.out.println(adb);
//Exception in thread "main" java.lang.NumberFormatException: For input string: "adb"
// at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
// at java.base/java.lang.Integer.parseInt(Integer.java:652)
// at java.base/java.lang.Integer.parseInt(Integer.java:770)
// at com.ydlclass.exception.ExceptionTest.main(ExceptionTest.java:62)