Day02常用API--泛型和异常






一:认识泛型

概述:

定义类,接口,方法时,同时声明了一个或者多个类型变量(如:<E>) ,称为泛型类、泛型接口,泛型方法、它们统称为泛型。

语法:

泛型类   修饰符 class 类名<类型变量,类型变量,…> {}

泛型接口     修饰符 interface 接口名<类型变量,类型变量,…> {}

泛型方法    修饰符 <类型变量,类型变量,…>  返回值类型 方法名(形参列表) {}

作用:

泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力!这样可以避免强制类型转换,及其可能出现的异常。

 泛型的本质:把具体的数据类型作为参数传给类型变量。

1:代码

public static void main(String[] args) {
        // 目标:认识泛型。
         ArrayList<String> list = new ArrayList<String>();
//        list.add(12);
//        list.add(12.4);
//        list.add(false);
//        list.add('a');
        list.add("楚留香");
        list.add("石观音");
        System.out.println(list);

//        ArrayList list2 = list;
//        list2.add(9.9);
//        System.out.println(list2);

        for (int i = 0; i < list.size(); i++) {
            String result = list.get(i);
            System.out.println(result);
        }


      // 注意实现: 泛型和集合都只能支持引用数据类型。只支持对象数据!
//        ArrayList<int> list2 = new ArrayList<>();  // 错误!
//        ArrayList<Integer> list3 = new ArrayList<>();

    }

2:总结

泛型和集合都只能支持引用数据类型。只支持对象数据!基本数据类型要报装成对象类型。

集合的泛型规定内容后,集合只能放泛型规定的类型。

二:泛型类

概述:

修饰符 class 类名<类型变量,类型变量,…> {}

1:代码

public static void main(String[] args) {
    // 目标:掌握自定义泛型类。
    // 需求:要求你模拟ArrayList集合,自己写一个集合MyArrayList, 可以添加,删除数据。
    // MyArrayList<String> list = new MyArrayList<String>();
    MyArrayList<String> list = new MyArrayList<>(); // JDK 7开始后面类型可以不写
    list.add("Java1");
    list.add("Java2");
    list.add("Java3");
    list.add("Java4");

    list.remove("Java2");
    list.remove("Java3");

    System.out.println(list);

}
public class MyArrayList<E> {
    private ArrayList list = new ArrayList();

    public boolean add(E e){
        list.add(e);
        return true;
    }

    public void remove(E e){
        list.remove(e);
    }

    @Override
    public String toString() {
        return list.toString();
    }

2:总结

可以自定义泛型类,满足需要的类型。

三:泛型接口

概述:

修饰符 interface 接口名<类型变量,类型变量,…> {}

1:需求

处理老师和学生的数据

2:代码

// 自定义泛型接口
public interface Data<T> {//T代表类型,自定义泛型接口
    void add(T t);
    boolean delete(T t);
    boolean update(T t);
    T getById(int id);
}

四:泛型方法、泛型通配符、上下限

概述:

 修饰符 <类型变量,类型变量,…>  返回值类型 方法名(形参列表) {}

泛型方法就是可以在返回值类型左边定义一个类型

可以避免强制类型转换

 Java提供了一个语法:泛型通配符:其实就是“?”,可以在使用泛型的时候代表一切类型。

1:代码

public static void main(String[] args) {
    // 目标:认识泛型方法。
    // 需求:提供一个方法,可以打印任意对象数组的内容。
    Integer[] arr1 = {11, 223, 243};
    printArray(arr1);

    String[] names = {"所得税", "试试"};
    printArray(names);

    // 避免返回值的强转问题
    Integer max = getMax(arr1);
    String max2 = getMax(names);
}

public static <T> void printArray(T[] arr){

}

public static <T> T getMax(T[] arr){
    return null;
}

2:上下限

 Java提供了一个语法:泛型通配符:其实就是“?”,可以在使用泛型的时候代表一切类型。

泛型上限:   ? extends Car:   ? 能接收的必须是Car或者其子类 。

最多是Car最低是子类

 泛型下限:  ?  super Car : ?  能接收的必须是Car或者其父类。

最低是Car,最高是父类

3:擦除问题

泛型是工作在编译阶段的,一旦程序编译成class文件,class文件中就不存在泛型了,这就是泛型擦除。

1:代码

 ArrayList<String> list = new ArrayList<String>();
//        list.add(12);
//        list.add(12.4);
//        list.add(false);
//        list.add('a');
        list.add("楚留香");
        list.add("石观音");
        System.out.println(list);
//        ArrayList list2 = list;
//        list2.add(9.9);
//        System.out.println(list2);

2:

五:泛型的注意事项:基本数据类型问题

概述:

泛型不能直接支持基本数据类型,只能支持对象类型(引用数据类型)。

1:

很正常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值