第一节:泛型深入

泛型是JDK中引入的特性,用于在编译时限制集合操作的数据类型,并进行检查,避免运行时异常。泛型不能用于基本数据类型,只能用于引用类型。它可以应用于类、方法和接口定义,简化类型转换并提高代码安全性。泛型不具有继承性,但数据类型具有继承性,可以使用泛型通配符如?extendsE或?superE来处理。文章还介绍了泛型类、泛型方法和泛型接口的定义及使用场景。
摘要由CSDN通过智能技术生成

1,泛型的概述

泛型:是JDK中引入的特性,可以在编阶段译段约束操作的数据类型,并进行检查。

泛型的格式:<数据类型>

注意:泛型中只能使用引用数据类型

package Tom.zhu.lianxi;

import java.util.ArrayList;

public class fanixng {
    public static void main(String[] args) {
        ArrayList<String>arr=new ArrayList<>();
        arr.add("小红");
        System.out.println(arr);
    }
}

没有泛型的时候,集合如何存储数据??

package Tom.zhu.lianxi;

import java.util.ArrayList;
import java.util.Iterator;

public class fanixng {
    public static void main(String[] args) {
        ArrayList<String>arr=new ArrayList<>();

        System.out.println(arr);
        Iterator<String> it= arr.iterator();
        while (it.hasNext()){
            String str= it.next();
        }
    }
}

创建一个学生类 javabean

package com.itheima.a04mygenerics;

public class Student {
    private String name;
    private int age;


    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

2:泛型的好处

  • 统一数据类型

  • 把运行期间的问题提前到了编译期间,避免了强制类型转换可能出现的异常,因为在编译阶段类型就能确定下来。

  • 扩展知识点:Java中的泛型其实是伪泛型。

3:泛型的细节

1.泛型总不能写基本数据类型

2.指定泛型的具体的类型后,传入数据时可以传入该类类型或其子类类型

3.如果不写泛型,默认是Object

ArrayList<Animal> list=new ArrayList<>();
list.add(new Animal());
list.add(new Cat());
list.add(new Dog());

4:泛型可以在很多地方进行定义

ArrayList<String> list=new Arraylist<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
  • 类后面:泛型类

  • 方法上面:泛型方法

  • 接口后面:泛型接口

5:泛型类

使用场景:在一个类中,某个变量的数据类型不确定时,就可以定义带有泛型的类。

此处E可以理解为变量,但是不是用来记录数据的,而是记录数据的类型,可以写成T,E,K,V等。

package com.itheima.a04mygenerics;


import java.util.Arrays;

public class MyArrayList<E> {

    Object[] obj = new Object[10];
    int size;

    /*
    E : 表示是不确定的类型。该类型在类名后面已经定义过了。
    e:形参的名字,变量名
    * */
    public boolean add(E e){
        obj[size] = e;
        size++;
        return true;
    }


    public E get(int index){
        return (E)obj[index];
    }


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

6:泛型方法

方法中形参类型不确定时,可以使用类名后面定义的泛型<E>

方法中形参类型不确定时

  • 方案1:使用类名后面的泛型,所有方法都能用

  • 方案2:在方法声明上定义自己的泛型 只有本方法能用

 

 此处T可以理解为变量,但是不是用来记录数据的,而是记录类型的,可以写成:T,E,K,V等

8:泛型接口

9:泛型的继承和通配符

泛型不具备继承性,但是数据具备继承性

10:总结

1:什么是泛型?

  • JDK5引入的特性,可以在编译阶段约束操作的数据类型,并进行检查

2:泛型的好处?

  • 统一数据类型

  • 把运行时期的问题以前到了编译期间,避免了强制

    类型转换可能出现的异常,因为在编译阶段类型就能确定下来。

3:泛型的细节?

  • 泛型中不能写基本数据类型

  • 指定泛型的具体类型后,传递数据时,可以传入该类型和它的子类类型

  • 如果不写泛型,类型默认是Object

4:哪里定义泛型?

  • 泛型类:在类名后面定义泛型,创建该类对象的时候,确定类型

  • 泛型方法:在修饰符后面定义方法,调用该方法的时候,确定类型

  • 泛型接口:在接口名后面定义泛型,实现类确定类型,实现类延续泛型

5:泛型的继承和通配符

  • 泛型不具备继承性,但是数据具备继承性

  • 泛型的通配符:?

    ? extend E

    ?super E

6:使用场景

  • 定义类,方法,接口的时候,如果类型不确定,就可以定义泛型

  • 如果类型不确定,但是能知道是哪个继承体系中的,可以使用泛型的通配符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fɪʀsᴛovo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值