美文网首页
【Java学习】泛型的简单使用|异常处理

【Java学习】泛型的简单使用|异常处理

作者: 榆野铃爱 | 来源:发表于2019-08-17 22:51 被阅读0次

    心得体会

    一开始我也不太理解泛型,后面按老师说的自己尝试去写一个简单的ArrayList方法后,才真正理解了。当然说是自己写,其实大部分都是参考源码来敲,但是这样做真的有利于加深对列表和泛型的理解。异常处理感觉还是很实用的,而且处理方法也很简单。


    内容简概

    • 一、泛型的简单使用
    • 二、异常类的层次结构
    • 三、处理异常的五个关键字
    • 四、异常的处理方法
    • 五、自定义异常类
    • 六、自定义异常类的使用(throw和try...catch的联合使用)

    具体内容

    • 一、泛型的简单使用

    1. 概念
    Java中有多种数据类型,而泛型,顾名思义,不是一种广泛的数据类型,它包括其他大部分数据类型。
    2. 为什么要用泛型?
    泛型的使用非常广泛,如泛型类、泛型方法、泛型接口。就拿泛型和数组来说,一个数组中可以存放不同的数据类型,那编写这个数组类时,就需要用一个东西来替代传入的参数类型,而这个参数类型不确定,这时就需要用到泛型了。
    3. 泛型常见字母含义
    格式: 类名<字母列表>  class Person<T>{}

    字母 含义
    E Element 元素
    K Key 键
    N Number 数值
    T Type 类型
    V Value 值
    ? 不确定的类型

    4. 泛型的简单使用
    运行结果为:False

    class GenericTest<T>{
        int age;
        T a1;
        T a2;
      
        public void test(T a1, T a2){
            this.a1 = a1;
            this.a2 = a2;
            
            System.out.println(a1.equals(a2));
        }
    }
    public class MyClass {
        public static void main(String[] args){
            //<T>被替换成<String>
            GenericTest<String> g1 = new GenericTest<>();
            g1.test("jack","jacker");
        }
    }
    

    二、异常类的层次结构

    Java的异常是一个对象,所有的异常都直接或间接地继承Throwable类。Throwable类的继承层次结构如下:

    异常类的层次结构

    三、处理异常的五个关键字

    关键字               用法
    try 它里面放置可能引发异常的代码
    catch 后面对应异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块,可以有多个catch块。
    finally 主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件),异常机制总是保证finally块总是被执行。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者 throw等终止方法的语句,则就不会跳回执行,直接停止。
    throw 用于抛出一个实际的异常,可以单独作为语句使用,抛出一个具体的异常对象。
     throws  用在方法签名中,用于声明该方法可能抛出的异常。
    • 四、异常的处理方法

    方法一:try...catch
    要注意的是,如果异常出现,try{}异常语句后面的代码将不会被执行,所以尽量不要放太多代码在try{中}

    try{
         执行的代码
         可能出现异常
         一旦出现异常 系统自动为我们创建一个异常对象 并抛出
     }catch(NullPointerException){
         如果需要自己处理异常就catch
     }catch(IOException e){
         如果有多个异常 可以使用多个catch来捕获
         如果有多个异常 catch的顺序是从小到大
     }catch(Exception1 e){
    
     }finally{
         不管有没有异常finally都会被执行
         处理资源回收 网络连接 数据库连接 I/O流
     }
    

    方法二:throw (异常类型)
    一般自己编写代码时,还是抛出具体的异常类型比较好,不过如果异常太多了,也可以直接抛出IOException等大的异常类型,这样代码看起来也比较简洁。

    //文件不存在异常、空指针异常
    public static void test() throws FileNotFoundException,NullPointerException{
            FileReader fr = new FileReader("");
    }
    
    //也可直接用大的异常类型来解决
    public static void test() throws IOException{
            FileReader fr = new FileReader("");
    }
    

    五、自定义异常类

    书写格式如下:

    class MyException extends Exception{
    
        // 1.提供一个无参构造方法
        public PXDException(){
        }
    
        // 2.提供一个有参构造方法 参数是一个字符串
        public PXDException(String desc){
            super(desc);
        }
    }
    

    六、自定义异常类的使用(throw和try...catch的联合使用)

    自定义异常类的好处就在于可以时异常提示更为通俗易懂,因为Java本身的异常提示一般是不太容易看得懂的。下面代码的
    运行结果为:自己的异常类:无所作为Exception1.java->main->75

    public class Exception1 {
        public static void  main(String[] args){
               try {
                    TException.test2();
               }catch (MyException e){
                     System.out.println(e.getMessage());
               }
         }
    }
    class TException {
        public static void test() throws FileNotFoundException,NullPointerException{
            //尝试打开一个不存在的文件
            FileReader fr = new FileReader("");
        }
    
        public static void test2() throws MyException {
            StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
            StackTraceElement e = stackTrace[2];
            //提示错误的代码位置:文件→方法→代码行数
            String detail = e.getFileName()+"->"+e.getMethodName()+"->"+e.getLineNumber();
            throw new MyException("自己的异常类:无所作为"+detail);
        }
    }
    
    class MyException extends Exception{
    
        // 1.提供一个无参构造方法
        public MyException(){
        }
    
        // 2.提供一个有参构造方法 参数是一个字符串
        public MyException(String desc){
            super(desc);
        }
    }
    

    相关文章

      网友评论

          本文标题:【Java学习】泛型的简单使用|异常处理

          本文链接:https://www.haomeiwen.com/subject/vqnksctx.html