139、异常机制 异常分类
案例
public static void main(String[] args) {
System.out.println("step1");
try{
int i=1/0;
}catch(Exception e){
e.printStackTrace();
}
System.out.println("step2");
}
缺点
逻辑代码和错误处理放在一起
本质
程序出现异常,程序安全的退出,处理完后继续执行的机制。
抛出异常
执行方法发生异常,生成代表该异常的对象,停止当前执行路径,把异常对象给jre
捕获异常
jre得到异常后,寻找对应的代码处理异常。
所有异常根类为java.lang.Throwable
error不用管,
内置异常类不满足使用,可以创建自己的异常类。
异常分类
运行时异常:编译器不知道,
checkedException:编译无法通过。
常见异常
NullPointerException异常
String str=null;
sout(str.charAt(0));
ClassCastExcetion异常
ArrayIndexOutOfBoundsException异常
140、checkedException
编译时检查出来的异常;不处理不让走
141、try-catch-finally
try:可能出现异常的语句
定义多个exception时,子类放前面,父类放后面。
finally:无论有没有碰到异常,都会执行。
做一些释放资源工作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mo3dnd2N-1651028788421)(C:\Users\Shenjh01\AppData\Roaming\Typora\typora-user-images\image-20220427005157268.png)]
语句一出现异常,处理完之后,不会处理语句二。
案例
io流结合
public static void main(String[] args) {
FileReader reader=null;
try{
reader=new FileReader("d:/a.txt");
char c=(char) reader.read();
char c2=(char) reader.read();
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally {
try {if(reader!=null){
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
142、声明式异常处理
自己不处理,把异常扔出去,谁调用,谁处理
public int read() throws IOException{
return sd.read();
}
example
public static void main(String[] args) throws Exception {
FileReader reader=null;
reader=new FileReader("d:/a.txt");
char c=(char) reader.read();
char c2=(char) reader.read();
}
一直没人处理,最后到框架处理
public class Test03 {
public static void main(String[] args) {
try{
readFile("d:/a.txt");
}catch (Exception e){
e.printStackTrace();
}
}
public static void readFile(String path) throws Exception{
FileReader reader=null;
try{
reader=new FileReader(path);
char c=(char) reader.read();
char c2=(char) reader.read();
}finally {
try {if(reader!=null){
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
144、自定义异常
只需从Exception类或它的子类派生一个子类即可,
145、百度搜索处理异常
1、细心查看异常信息,确定异常种类和相关java代码代号
独立解决50个异常,可以搞定所有异常。
值得花时间解决
看至少10篇文章
2、确定上下文相关的关键词信息
拷贝异常信息到百度,查看相关帖子,寻找思路。
3、问同事
寻找问题本身关键词
寻找问题上下文关键词
尽量细致描述问题,开始搜索
放宽条件
写一篇博客,完整描述碰到一个异常的解决流程
146、idea调试视图 可视化bug追踪
核心是增加断点(breakpoint)
程序到此处暂时挂起
设置断点
1、行号后单机可以增加断点
public class Test05 {
private int num=10;
public void run(int a){
for(int i=0;i<a;i++){
num=num*a;
}
go(num);
}
public void go(int b){
System.out.println("num="+b);
}
public static void main(String[] args) {
Test05 t=new Test05();
t.run(3);
}
}