Java基础泛型总结

举报
ksh1998 发表于 2021/12/25 23:36:32 2021/12/25
【摘要】 前言: 在阅读博客之前请大家思考下面这几个问题 1 什么是泛型? 2 泛型的好处? 3 为什么要使用发型 这三个问题大家先思考几分钟,然后在继续阅读下面的博客内容。我将在下面逐个进行介绍,如果大家有其他...

前言:
在阅读博客之前请大家思考下面这几个问题
1 什么是泛型?
2 泛型的好处?
3 为什么要使用发型

这三个问题大家先思考几分钟,然后在继续阅读下面的博客内容。我将在下面逐个进行介绍,如果大家有其他看法或者说认为我的理解有些偏差,敬请大家指正 ;评论在 下面评论区


正文:

概念

1 什么是泛型?

 概念
	泛型是一种不确定的数据类型,可以根据用户的选择来创建具
	体的数据类型。
	
	类型的确定
	   泛型类
	   		只有在创建对象的时候才能确定数据类型
	   泛型方法
	   		只有方法被调用的时候才能确定数据类型
	   泛型接口
	   		只有接口被实现的时候才能确定数据类型

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2 泛型的好处?

1 类型安全
	 过知道使用泛型定义的变量的类型限制,编译器可以在非常高的
	层次上验证类型假设。没有泛型,这些假设就只存在于系统开发
	人员的头脑中。
2 避免类型转换错误
	 消除源代码中的许多强制类型转换。这使得代码更加可读,并且
	减少了出错机会。
3 提高运行效率
  在非泛型编程中,将筒单类型作为Object传递时会引起Boxing(装
箱)和Unboxing(拆箱)操作,这两个过程都是具有很大开销的。引入泛型后,
就不必进行Boxing和Unboxing操作了,所以运行效率相
对较高,特别在对集合操作非常频繁的系统中,这个特点带来的性能提升
更加明显。

4 潜在的性能收益
	泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强
	制类型转换(没有泛型的话,Java系统开发人员会指定这些强制
	类型转换)插入生成的字节码中。但是更多类型信息可用于编译
	器这一事实,为未来版本的JVM的优化带来可能。

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3 为什么要使用泛型

通过泛型可以定义类型安全的数据结构(类型安全),而无须使用实际的数据类型(可扩展)。这能够显著提高性能并得到更高质量的代码(高性能),因为您可以重用数据处理算法,而无须复制类型特定的代码(可重用)。

定义格式

泛型类

定义格式
 修饰符 class 类名<代表泛型的变量> { }  

  
 
  • 1
  • 2

泛型方法

定义格式
修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }

  
 
  • 1
  • 2

泛型接口

定义格式
修饰符 interface接口名<代表泛型的变量> { }

  
 
  • 1
  • 2

代码实现:

泛型类

泛型类

 package com.itheima.demo03;
/*
* 定义一个含有泛型的类,模拟ArrayList集合
* 不确定数据类型可以使用泛型,可以接受任意数据类型
* 创建对象的时候确定泛型的数据类型
* */
public class Generic<E> {//含有泛型的类
    E name;

    public E getName() {
        return name;
    }

    public void setName(E name) {
        this.name = name;
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

调用泛型类

 package com.itheima.demo03;

import com.itheima.demo03.Generic;

public class Demo02GenericTest {
    public static void main(String[] args) {
// 不写类型默认是object类型,返回也是object类型。
// Generic<int> gc=new Generic<int>();
//        gc.setName("只能赋值字符串");
        //使用泛型类,泛型类只有在创建对象的时候确定数据类型。
        Generic<Integer> gc=new Generic<>();
        gc.setName(1);
        Integer name = gc.getName();
        System.out.println(name);
//创建Generic的字符串对象
        Generic<String> gc2=new Generic<>();
        gc2.setName("xiao");
        String name1 = gc2.getName();
        System.out.println(name1);
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

结果:
在这里插入图片描述

泛型方法

 package com.itheima.demo03;
/*
* 创建泛型的方法
* 类型确定
* 只有 在调用方法的时候 才能确定数据类型。
* */
public class Demo03Funtionf {
    public static void main(String[] args) {
       //整数类型方法
        Integer show = show(1);
        System.out.println(show);
       //字符串类型方法
        String str = show("这是字符串类型");
        System.out.println(str);
    }
    //使用泛型的方法
    private static  <E> E show(E s){
        return s;
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

结果:
在这里插入图片描述

泛型接口

泛型接口

 package com.itheima.demo03;
/*
* 定义泛型接口
* 类型确定
* 只有在实现接口的时候确定,接口的类型。
* */
public interface InterfaceGeneric<E> {
        E Show(E s);//显示数据
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

接口的实现类

 package com.itheima.demo03;
/*
* 实现InterfaceGeneric接口的方法
* */
public class Genericsxian implements InterfaceGeneric<String> {
    @Override
    public String Show(String s) {
        return s;
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

调用实现类

 package com.itheima.demo03;

public class Demo04 {
    public static void main(String[] args) {
        Genericsxian interFace=new Genericsxian();
        String ksh = interFace.Show("ksh");
        System.out.println(ksh);
         
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

结果:
在这里插入图片描述

------------------------------------END------------------------------------------------

文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。

原文链接:kangshihang.blog.csdn.net/article/details/108200632

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。