异常

异常:

     简介: try{

                      一切正常,执行这里

                 }catch(Exception e) {

                        如果不正常,执行这里(异常)

                                                }

            如果代码出现问题时,使用"异常机制"比选择结构更加方便。

        异常的继承结构:

 

                 运行时异常:代码在编辑(编译阶段)时 不报错,运行时才报错。可以选择性处理

                    检查异常:代码在编辑(编译阶段)时报错。在编辑时,必须处理。

package Exception;

public class Demo01
{
   public static void main(String[] args) {
//       int [] num=new int[3];
//       System.out.println(num[3]); //运行时异常,选择性处理
    //   Class.forName("Exception.Demo01");//检查异常, 强制处理
  }
}

 

         异常重点:

                try catch finally throws throw

              处理异常:try catch 或者 throws

                    try catch: 自己(当前方法)能够处理,使用try catch

                       try:将可能发生异常的代码用{}包囊起来

                  catch:捕获特定类型的异常;捕获时,先写范围小的类型,后写范围大的类型 如果try中的代码的确发生了异常,

                                 则程序不再执行try中异常之后的代码,而是直接跳到catch中执行。

public static void test04()
  {
       try{
           Object obj=null;
           obj.equals("");//空指针异常

           int []num=new int[3];
           num[3]=3;//数组越界异常
      }catch (NullPointerException e)
      {
           System.out.println("空指针异常");
      }
       catch (ArrayIndexOutOfBoundsException e)
      {
           System.out.println("数组越界异常....");
      }catch(Exception e)//还有一些 根本临时想不到的异常
      {
           System.out.println("其它异常....");
             System.out.println(e);//e:异常对象
           e.printStackTrace();//打印异常的堆栈信息
           System.out.println(e.getMessage());//提示你哪错了
      }
  }

 

        finally:

                  无论正常,还是异常,始终都会执行的代码

public static void test01()
  {
       try {
           System.out.println("1");
           Object boj=null;
           boj.equals("");//可能产生异常的代码
           System.out.println("2");
      }catch (NullPointerException e) //捕获特定类型的异常
      {
           System.out.println("发生了空指针异常");
      }finally {
           System.out.println("无论正常或异常,始终都会执行的代码");
      }
       /*
       结果
       1
       发生了空指针异常
       无论正常或异常,始终都会执行的代码
        */
  }

               无论执行完try,还是执行完catch,最终都会执行finally代码

                        1.即使遇到return,也仍然执行finally。(先执行finally在执行return)

public static int  test02()
  {
       try {
           Object object=new Object();
           object.equals("");
           return 1;

      }catch (Exception e)
      {
           return 0;

      }finally {
           System.out.println("finally...");
      }
       /*
       结果
       finally...
        1
        */
  }

                2.除非虚拟机关闭,才不会执行finally

public static int  test03()
  {
       try {
           Object object=null;
           System.exit(1);//关闭jvm(关闭程序)
           object.equals("");
           return 1;

      }catch (Exception e)
      {
           return 0;

      }finally {
           System.out.println("finally...");
      }
       /*
       结果
        1
        */
  }

 

              throws 自己(当前方法)不能处理,上交给上级(方法调用处)处理,使用throws

public static void test05() throws NullPointerException//抛出异常,抛出给上级(方法调用处)
  {
       try {
           Object obj=null;
           obj.equals("");//空指针
      }catch (NullPointerException e)
      {
           e.printStackTrace();
      }catch (Exception e)
      {

      }
  }

   public static void main(String[] args) throws Exception {//继续往上抛出异常(JVM)
       test05();
  }

 

            throw一般和自定义异常使用一起使用:

                        jdk自带了很多类型的异常,但如果这些内置的异常

                         仍然不能满足项目的需求,那么就需要创建 自定义异常。

                    如何编写自定义异常:

                                  1. 类,继承Exception,调用super("异常信息"):super就是把异常信息传递到父类里面,然后在子类声明

package Exception;

public class MyException extends Exception
{
   public MyException(String message) //异常信息
  {
       super(message);
  }
}

                            2. 使用throw声明一个自定义异常,并且进行try catch或throws

package Exception;

public class Demo03
{
   public static void main(String[] args) throws Exception{
       int age=188;
       //约定,年龄不能大于120
       if (age<=0||age>120)
      {
           //手工抛出(声明)一个异常
           throw new MyException("年龄不能大于120");
      }
  }
}

 

在开发的过程中,要逐步积累异常。有助于提高我们的排查bug的能力。

posted @ 2022-09-25 13:39  zjw_rp  阅读(61)  评论(0)    收藏  举报