讲解
try-catch结构
Java提供了一个“捕获”的处理器,为什么要提供一个“捕获”的处理器呢
如果程序出错时,你终止程序?比起抛出异常,让人们自己寻找其中的问题要好?
比如:
package Lesson;
import java.io.*;
import java.net.*;
public class Lesson_17
{
public static void main(String[] args)
{
FileReader fr =null;//设fr为空
//读取文件
fr =new FileReader("d:\\ARE.txt");
}
}
呵呵呵呵呵,D盘没有ARE.txt这个文件
上面的文字且不看,就说运行吧,起码运行不了
要加try-catch才能运行,为什么?
如果你不加try-catch,那么……(没有什么,Java必须让你加try-catch)
好,如果不加try-catch且程序可以运行,那么👇
首先我D盘莫得有ARE.txt这个文件,你程序找不到,继续往下执行?(假设还有语句)
其次你弹出“程序终止”,我不知道我错在何处,会把你这个编译器给:
👆图就是不加try-catch的下场
如果你加了try-catch,那么会有几个好处:找不到文件会直接抛出异常,提示你什么什么错了,方便修改
它的流程可以这么表示:
1.try里面的语句是否异常
2.如果异常,就中断try里的代码,执行catch里面的代码
3.继续执行try-catch外的语句
注意事项
1.如果有多个catch块,则进入匹配异常的那个catch
2.儿子的本事不能比父亲大
3.儿子要开放
4.儿子要孝敬父亲,不能惹更多的事,不然要连累父亲
父亲and儿子的try-catch代码
package lesson_26;
import java.io.FileReader;
public class Lesson_26_1 {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
// TODO 自动生成的方法存根
Father father =new Father();
father.test1();
}
}
@SuppressWarnings("unused")
class Father
{
private Son son=null;
public Father()
{
son =new Son();
}
public void test1() throws Exception
{
System.out.println("1");
/* try{
son.test2();
}catch(Exception e){
System.out.println("父亲");
e.printStackTrace();
}*/
}
}
@SuppressWarnings({"resource","unused"})
class Son
{
public void test2() throws Exception
{
FileReader fr =null;
fr =new FileReader("d:\\dd.txt");
}
}
感受try-catch的威力
//面对疾风吧
FileReader fr =null;
try
{
//咱们先尝试下面的代码有没有错
//1.如果没错,那么会执行A处代码
//2.如果有错,那么会执行catch里面的代码
fr =new FileReader("D:\\ARE.txt");
System.out.println("No Q");//A处
//没有问题执行上面代码
}
catch(Exception e)//好不凑巧出错了
{
System.out.println("No A");
e.printStackTrace();//打印错误代码
}
System.out.println("我出来了");
System.exit(-1);//异常退出
结果(无ARE.txt的)
结果(有ARE.txt的)
try-catch-finally结构
finally代表结束
那么try-catch我们懂了,Java中还有try-catch-finally结构
它的流程还是跟try-catch差不多:
1.如果try中有异常,进入catch
2.执行catch里的代码,然后进入finally
3.执行finally语句,再执行try-catch-finally结构外的语句
注意事项
不管你有多少个catch块,终究还要执行finally块,try-catch-finally这个结构,我们逃不了finally块,必须执行finally块语句,才能结束该结构
使用范围
如果使用Java做一个文件流,那么try-catch-finally这个结构很普遍,finally块的作用是关闭文件流,不然你的文件……全部空!
宾果!try-catch-finally用法已经讲完
感受try-catch-finally的威力
package lesson_26;
import java.io.*;
import java.net.*;
@SuppressWarnings({"unused"/*,"resource"*/})
public class Lesson_26 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
//检查异常:打开文件
FileReader fr =null;
try
{
//在出现异常的地方,就停止执行代码,
//然后进入到catch
//如果,你有多个catch语句,则进入匹配异常的那个catch
System.out.println("go on");
fr =new FileReader("d:\\45.text");
Socket s =new Socket("192.168.1.23",78);
}
catch(Exception e){
//把异常的信息输出,利于排除bug
System.out.println("111");
//System.exit(-1);
//System.out.println("message="+e.getMessage());
e.printStackTrace();
//处理
}finally{
System.out.println("进入finally");
//这个语句块,不管有没有异常,都会执行
//一般说,把需要关闭的资源.[文件,链接,内存...]关闭
if(fr!=null)//判断
{
try{
fr.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
System.out.println("OK1");
}
}
完结,撒花
喜欢的可以点赞+关注哦