异常、回顾常用类

异常

异常:程序执行过程中的不正常情况

异常的作用:增强程序的健壮性

异常存在的形式

  1. 异常在java中以类的形式存在,每一个异常类都可以创建异常对象
int a = 10;
int b = 0;
int c = a / b;
// 实际上JVM在执行到此处的时候,会new异常对象:new ArithmeticException("/ by zero");
//并且JVM将new的异常对象抛出,打印输出信息到控制台了。
System.out.println(c);

异常分类

检查性异常:

? 最具代表的检查性异常使用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在的文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略

运行时异常:

? 运行时异常是可能被程序员避免的异常。与检查性异常相反 ,运行时异常可以在编译时被忽略

错误ERROR:

? 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如:当栈溢出时,一个错误就发生了,它们在编译也检查不到

异常体系结构

  • Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类
  • 在Java API中已经定义了许多异常类,这些异常类分为两大类,错误ERROR和异常Exception

异常、回顾常用类

异常处理机制

  • 第一种:抛出异常

    • 在方法声明的位置上,使用throws关键字,抛给上一级。

    • 上抛类似于推卸责任(继续把异常传递给调用者)

    • public class Exception {
          // 第一种处理方式:在方法声明的位置上继续使用throws来完成异常的继续上抛。抛给调用者
          public static void main(String[] args) throws ClassNotFoundException{
              doSome();
          }
      
          public static void doSome() throws ClassNotFoundException{
              System.out.println("ClassCastException");
          }
      }
      
  • 第二种:捕获异常

    • 使用try...catch语句进行异常的捕获。

    • 捕捉等于把异常拦下了,异常真正地解决了,(调用者不知道)

    • public class Exception {
          //第二种处理方式:try...catch进行捕捉
          public static void main(String[] args){
              try {
                  doSome();
              } catch (ClassNotFoundException e) {
                  e.printStackTrace();
              }
          }
      
          public static void doSome() throws ClassNotFoundException{
              System.out.println("ClassCastException");
          }
      }
      

注意:Java中异常发生之后如果一直上抛,最终抛给了main方法,main方法继续上抛,抛给了调用者JVM,程序将被终止。

如果希望调用者处理异常就用throws上报,其余情况使用try...catch

  • 异常处理五个关键字

    • try、catch、finally、throw、throws

      public class Test{
          public static void main(String[] args){
              int a = 1;
              int b = 0;
              
              //IEDA快捷键:Ctrl + Alt + T
              try{//try监控区域
                  System.out.prtinln(a/b);
              }catch(Exception e){//catch(想要捕获的异常类型!) 捕获异常		表示是否有这个异常,有则执行此处代码块
                  System.out.println("程序出现异常");
              }finally{// 处理善后工作,一定会执行
                  System.out.println("finally");
              }
              //finally 可以不要finally, 假设IO,资源,关闭
          }
      }
      
      • 抛出异常
      public class Exception {
          public static void main(String[] args) {
              try {
                  new Exception().test(1,0);
              } catch (java.lang.Exception e) {
                  e.printStackTrace();
              } finally {
              }
          }
      
          // 假设这方法中,处理不了这个异常。方法上抛异常
          public void test(int a , int b) throws ArithmeticException{
              if (b==0){//throw throws
                  throw new ArithmeticException();//主动地抛出异常,一般在方法中使用
              }
          }
      }
      

try....catch

  1. catch后面的小括号中的类型可以是具体的异常类型,也可以是该异常类型的父类型。
  2. catch可以写多个。
  3. catch写多个的时候,从上到下,必须遵循从小到大
  4. JDK8新特性:catch(FileNotFoundException | ArithmeticException |NullPointerException e) { } 可以或多个异常

自定义异常

两步:

  • 第一步:编写一个类继承Exception或者RuntimeException
  • 第二步:提供两个构造方法,一个无参的,一个带有String参数的

回顾常用类

  1. String类
    1. 对String在内存存储方面的理解:
      1. 字符串一旦创建不可改变
      2. 双引号括起来的字符串存储在字符串常量池
      3. 字符串的比较必须使用equals方法
      4. String已经重写了toString()和equals()方法
    2. String的构造方法
      1. String s = " " ;
      2. String s = new String(" ");
      3. String s = new string(byte数组);
      4. String s = new string(byte数组, 起始下标, 长度);
      5. String s = new string(char数组);
      6. String s = new string(char数组, 起始下标, 长度);
    3. String类常用的21个方法(看文档)
  2. StringBuffer/StringBuilder
    1. StringBuffer/StringBuilder可以看做可变长度字符串
    2. StringBuffer/StringBuilder初始化容量16
    3. StringBuffer/StringBuilder是完成字符串拼接操作的,方法名:append
    4. StringBuffer是线程安全的。StringBuilder是非线程安全的
    5. 频繁进行字符串凭借不建议使用 "+"
  3. 那种基本数据类型对应的包装类
    1. 包装类存在有什么用?
      1. 方便编程
    2. 八种包装类的类名是什么?
      1. Byte
      2. Short
      3. Integer
      4. Long
      5. Float
      6. Double
      7. Boolean
      8. Character
    3. 所有数字的父类Number
    4. 什么是装箱?什么是拆箱?

异常、回顾常用类

上一篇:单例设计模式


下一篇:TreeSet的简单介绍与使用方法