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

2019-08-17  本文已影响0人  榆野铃爱

心得体会

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


内容简概

具体内容

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);
    }
}
上一篇下一篇

猜你喜欢

热点阅读