java学习笔记——异常处理

异常处理

一、异常的分类:

 

1、 检查性异常:java.lang.Exception(编译时候检查出的),外在条件不满足引发的,不是程序、的错,很可能是远程机器名出错,如果不处理程序就不能被编译。

 

2、运行期异常:java.lang.RuntimeException,意味着程序存在Bug,如数组越界,0被除,入参不满足规范……需要更改程序来处理

 

3、错误:java.lang.Error,一般很少,很难通过程序解决,可能源于程序的Bug,但是一般更可能源于环境问题,如内存耗尽,错误在程序中无需处理,而由运行环境处理。

 

 

二、try & catch块 异常处理:

 

1、try块中包含可能存在异常的代码,catch块中包含了对应异常的处理机制。

 

2、设置了捕获,而且真的捕获到了异常,后面的异常就检测不到,遵循一个先后的顺序,但是程序还是会继续执行,正常程序和e.printStackTrace();执行后显示的顺序貌似有点乱了,所以书上推荐用System.out.println("message:="+e.getMessage());显示顺序不会乱

 

3、在出现异常的地方就中止执行代码,然后直接进入到catch语句,如果有多个catch语句,就进入匹配异常的那个catch语句。

 

4

try

{

    FileReader fr=new FileReader("d:\\12334.txt");

}

catch (Exception e) //或者Exception e,Exception e是捕获所有的

{

    System.out.println("message:="+e.getMessage());

    e.printStackTrace();

}

 

5finally:如果把finally块置try…catch语句后,finally块一般都会得到执行,相当于一个万能的保险,即使前面的try块发生异常,而又没有对应异常的catch块,finally块将马上执行

 

6文件被打开一直没有关闭是很恐怖的!所以就有了finally语句,不管有没有异常都会执行,一般说,把需要关闭的资源[文件,连接,内存……]

 

7.以下情况finally将不被执行:

    Finally块中发生了异常

    程序所在的线程死亡了

    使用了System.exit(-1)

    关闭CPU

 

8

import java.io.*;

import java.net.*;

 

public class Demo7_6

{

 

    public static void main(String[] args)

    {

       //检查异常1.打开文件

       FileReader fr=null;

       try

       {

           //在出现异常的地方就中止执行代码,然后直接进入到catch语句

           //如果有多个catch语句,就进入匹配异常的那个catch语句

           fr=new FileReader("d:\\1234.txt");//如果找不到咋办啊?你必须处理

           //Socket s=new Socket("192.1638.0.1",8080);

 

       }

       catch (Exception e) //或者Exception e,Exception e是捕获所有的

       {

           //要输出异常的信息,利于排错

          

           System.out.println("message:="+e.getMessage());

 

           e.printStackTrace();

           //处理

       }

//     catch (IOException e2)

//     {

//         e2.printStackTrace();   

//     }

       finally

      

       {

           System.out.println("进入finally");

           //这个语句块,不管有没有异常,都会执行

           //一般说,把需要关闭的资源[文件,连接,内存……]

           if(fr!=null)

           {

              try {

                  fr.close();

              } catch (IOException e) {

                  // TODO Auto-generated catch block

                  e.printStackTrace();

              }

           }

       }

//    

       System.out.println("kankan");

      

       //2.连接一个192.168.12.12  ip的端口号:4567

      

       //Socket s=new Socket("192.168.0.1",78);

      

       //运行异常

       //int a=4/0;

       //数组越界

       //int arr[]={1,2,3};

    //  System.out.println(arr[23]);

    }

 

}

 

 

三、抛出异常

 

1、原理:不断的将异常向上一个等级抛出,子类向父类抛,直至JVM

 

2、格式:在方法后面写throws exception,注意,在主函数main之后也能够这样做。

 

3、示例:

import java.io.FileReader;

 

public class Demo7_7

{

 

    public static void main(String[] args) throws Exception

    {

       Father father=new Father();

       father.test1();

    }

 

}

 

class Father

{

    private Son son;

   

    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();

       }

    }

 

}

 

class Son

{

    public void test2() throws Exception

    {

       FileReader fr=null;

       fr=new FileReader("d:\\123d4.txt");      

    }  

}

 

猜你喜欢

转载自yuyongjia.iteye.com/blog/1676194
今日推荐