Javase 基础加强 —— 02 泛型

本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员Java+AI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。

01 认识泛型

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

作用:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力!

package generic;

import java.util.ArrayList;

public class GenericDemo1 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>(); //泛型
        list.add("msc");
        list.add("zlg");
        list.add("phd");
        list.add("zqy");

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

02 泛型类

在这里插入图片描述

MyArrayList.java

//自定义泛型类
public class MyArrayList<E>{
    //换汤不换药
    private ArrayList list = new ArrayList();
    
    public boolean add(E e){
        return list.add(e);
    }
    
    public boolean remove(){
        return list.remove(e);
    }
    
    @Override
    public String toString(){
        return list.toString();
    }
}

03 泛型接口

在这里插入图片描述

Student.java 自定义类

public class Student {
}

Teacher.java 自定义类

public class Teacher {
}

Data.java 自定义接口

public interface Data<T> {
    void add(T t);
    void delete(T t);
    void update(T t);

    T find(int id);
}

StudentData.java 自定义接口实现类(传递Student类)

public class StudentData implements Data<Student>{

    @Override
    public void add(Student student) {

    }

    @Override
    public void delete(Student student) {

    }

    @Override
    public void update(Student student) {

    }

    @Override
    public Student find(int id) {
        return null;
    }
}

TeacherData.java 自定义接口实现类(传递Teacher类)

public class TeacherData implements Data<Teacher>{

    @Override
    public void add(Teacher teacher) {

    }

    @Override
    public void delete(Teacher teacher) {

    }

    @Override
    public void update(Teacher teacher) {

    }

    @Override
    public Teacher find(int id) {
        return null;
    }
}

GenericDemo3.java

public class GenericDemo3 {
    public static void main(String[] args) {
        //目标:自定义泛型接口
        StudentData stu = new StudentData();
        stu.add(new Student());
        stu.delete(new Student());

        Student stu2 = stu.find(1);
    }
}

04 泛型方法

在这里插入图片描述

public class GenericDemo4 {
    public static void main(String[] args) {
        String[] names = {"张三","李四","王五","赵六"};
        printArray(names);
        String max = getMax(names);

        Student[] stus = new Student[100];
        printArray(stus);
        Student max2 = getMax(stus);
    }

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

    }

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

05 通配符和上下限

通配符就是?,可以在使用泛型的时候代表一切类型,ETKV是在定义泛型的时候使用。

在这里插入图片描述

Car.java

public class Car {
}

Xiaomi.java

public class Xiaomi extends Car{
}

Weilai.java

public class Weilai extends Car{
}

GenericDemo5.java

import java.util.ArrayList;

public class GenericDemo5 {
    public static void main(String[] args) {
        ArrayList<Xiaomi> xiaomis = new ArrayList<>();
        xiaomis.add(new Xiaomi());
        xiaomis.add(new Xiaomi());
        xiaomis.add(new Xiaomi());

        ArrayList<Weilai> weilais = new ArrayList<>();
        weilais.add(new Weilai());
        weilais.add(new Weilai());
        weilais.add(new Weilai());

    }

    public static void go(ArrayList<? extends Car> cars){

    }
}

06 泛型支持的类型

泛型不支持基本数据类型,故产生了包装类,包装类就是把基本数据类型包装成对象类型。

在这里插入图片描述

  • 自动装箱:基本数据类型可以自动转换为包装类型。
  • 自动拆箱:包装类型可以自动转换为基本数据类型。

为了万物皆对象,并且泛型和集合都不支持基本类型,我们支持包装类!

package generic;

import java.util.ArrayList;

public class GenericDemo6 {
    public static void main(String[] args) {
        Integer it1 = Integer.valueOf(100); //不是数字100,而是对象100
        Integer it2 = Integer.valueOf(100); //it1 == it2

        //自动装箱
        Integer it3 = 150;
        Integer it4 = 145;
        ArrayList<Integer> list = new ArrayList<>();
        list.add(138);

        //自动拆箱
        int i1 = it3;
        int i2 = list.get(138);

        System.out.println("-----------------------------------------");

        //重要作用:包装类可以将字符串数值转化为对应的基本数据类型
        String s1 = "98";
        int i = Integer.valueOf(s1);
        System.out.println(i + 2); //100

        String s2 = "3.14";
        double d = Double.valueOf(s2);
        System.out.println(d + 2); //5.14
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值