【第二阶段:java基础】第13章:泛型(P553-P568):自定义泛型、泛型的集成和通配符、Junit

news2024/9/23 17:17:31

本系列博客是韩顺平老师java基础课的课程笔记,B站:课程链接,吐血推荐的一套全网最细java教程,获益匪浅!

韩顺平P553-P568

  • 1. 泛型的理解和好处
  • 2. 泛型的定义
  • 3. 泛型的语法
  • 4. 泛型的细节
  • 5. 自定义泛型
  • 6. 泛型继承和通配符
  • 7. Junit

1. 泛型的理解和好处

传统方法的缺点

  • 使用传统的方法不能对加入到集合中的数据类型进行约束(不安全)
  • 遍历的时候,需要进行类型转换,如果集合中的数据量较大,对效率有影响

泛型的好处

  • 编译时,检查添加元素的类型,提高了安全性
  • 减少了类型转换的次数,提高效率
  • 不再提示编译警告

2. 泛型的定义

  • 泛型又称为参数化类型,是jdk5.0出现的新特性,解决数据类型的安全性问题
  • 在类声明或实例化时只要指定好需要的具体类型即可
  • 泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生classCastException异常。同时diamante更加简洁健壮。
  • 泛型的作用是可以在类声明时通过一个标识表示类中的某个属性的类型,或者某个方法的返回值类型,或者是参数类型
class xgs<E>{
	E e; // 泛型表示数据的类型(在定义xgs对象时指定)    		
	public xgs(E e) {// 泛型可以是参数类型        
	this.e = e;    
	}
	
	public E f(){ // 泛型可以是函数的返回值类型        
	return e;    
	}
}

3. 泛型的语法

泛型的声明

  • interface{} 或者 class <K,V>{}
  • 其中TKV 不代表值,而是表示类型
  • 任意字母都可以,常用T表示,是Type的缩写

泛型的实例化

  • 要在类名后指定类型参数的值(类型)
  • List strList=new ArrayList();

4. 泛型的细节

  • interface List {} 其中T只能是引用类型,不可以放基本数据类型(int不能放,integer可以放)
  • 在给泛型指定了具体类型之后,可以传入该类型或者其子类类型
  • 泛型的使用形式:List strList=new ArrayList(); 可以简写为List strList=new ArrayList<>(); 在实际的开发中往往采用简写的方式
  • List strList=new ArrayList(); 泛型默认为Object,也就是等价于List strList=new ArrayList<>();

5. 自定义泛型

自定义泛型类

  • 基本语法:class 类名<T,R…>{}
  • 普通成员(属性、方法)可以使用泛型
  • 静态方法和静态属性不能使用泛型:因为静态方法是和类相关的,在类加载的时候对象还没有创建,即还没有确定出泛型的类型,所以不能用。
  • 使用泛型的数组不可以初始化(不可以在定义的时候给长度):因为数组在new时,不能确定T的类型,所以无法开辟内存空间
  • 泛型类的类型是在创对象的时候确定的(因为创建对象时,需要指定类型),如果没有指定,默认为Object

自定义泛型接口

  • 基本语法:interface 接口名<T,R…>{}
  • 接口中,静态成员不能使用泛型(和自定义泛型类规定一样)
  • 泛型接口的类型,在继承接口或者实现接口的时候确定的
  • 没有指定类型,默认为Object

自定义泛型方法

  • 基本语法:修饰符 <T,R…> 返回类型 方法名(参数列表){}
  • 泛型方法可以定义在普通类中,也可以定义在泛型类中
  • 当泛型方法被调用时,传入参数,类型会被确定
  • public void eat(E e){} 修饰符后没有<T,R…> eat方法不是泛型方法,只是使用了泛型
  • 泛型方法可以使用类声明的泛型,也可以使用自己的泛型

6. 泛型继承和通配符

  • 泛型不具备继承性:不允许:List list=new ArrayList()
  • 通配符
    • <?>支持任意泛型类型
    • <? extends A>:支持A类以及A类的子类,规定了泛型的上线
    • <? super A>:支持A类以及A类的父类,不限于直接父类,规定了泛型的下限

7. Junit

为什么需要Junit

  • 一个类有很多代码需要测试,为了测试就需要写入到主方法中
  • 如果一个类有多个功能代码测试,就需要来回注销很麻烦
  • 如果可以 直接运行一个方法,就方便很多,并且可以给出相关信息
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/356977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

62 一次 Promotion failed 的调试

前言 最近 有一个想法就是, 调试一下 DefNewGeneration 里面的晋升失败的情况 呵呵 对于这块的代码上面, 看着感觉有一些疑问的地方, 因此想通过 实际的调试, 来验证一下 实际的情况 然后 之前写了一个用例, 但是 和心中的期望差距甚大, 当然 主要的问题 还是自己对于 细…

CSDN 算法技能树 蓝桥杯-基础 刷题+思考总结

切面条-蓝桥杯-基础-CSDN算法技能树https://edu.csdn.net/skill/algorithm/algorithm-530255df51be437b967cbc4524fe66ea?category188 目录 切面条 大衍数列 门牌制作 方阵转置 微生物增殖 成绩统计 星系炸弹 判断闰年的依据: 特别数的和 *日志统计*&#xff08;双指…

结构体与引用

1.结构体基本概念结构体属于用户自定义的数据类型&#xff0c;允许用户存储不同的数据类型2.结构体定义和使用语法: struct 结构体 { 结构体成员列表 };通过结构体创建变量的方式有三种:struct 结构体名 变量名struct 结构体名 变量名 { 成员1值&#xff0c;成员2值...}定义结构…

《爆肝整理》保姆级系列教程python接口自动化(十八)--重定向(Location)(详解)

简介   在实际工作中&#xff0c;有些接口请求完以后会重定向到别的url&#xff0c;而你却需要重定向前的url。URL主要是针对虚拟空间而言&#xff0c;因为不是自己独立管理的服务器&#xff0c;所以无法正常进行常规的操作。但是自己又不希望通过主域名的二级目录进行访问&…

分布式session共享解决方案

分布式session共享解决方案 1.分布式 Session 问题 示意图 解读上图&#xff0c;假如我们去购买商品 当 Nginx 对请求进行负载均衡后, 可能对应到不同的 Tomcat比如第 1 次请求, 均衡到 TomcatA, 这时 Session 就记录在 TomcatA, 第 2 次请求&#xff0c; 均衡到 TomcatB, 这…

【Mysql8.0取消严格区分大小】已安装的mysql8.0取消严格区分大小写及mysql8.0重装与赋权限详解(2023年亲测有效)

【写在前面】其实故事要从my.cnf为空&#xff0c;且lower-case-table-names为0开始&#xff0c;linux环境下mysql8.0及其之后的版本对表名和数据库是严格区分大小写的&#xff0c;从而导致我们运行项目时候会报错Table xxx.QRTZ_LOCKS doesnt exist。但是我已经装好了mysql8.0咋…

17.CSS伪类

举一个简单的例子来说明什么是伪类&#xff1f; 从之前的代码中&#xff0c;如下图&#xff0c;我们像给这两个列表中的某一列单独设置样式&#xff0c;我们该如何做呢&#xff1f; 我们肯定会选择在li标签上添加class去实现&#xff0c;如下 开始标记结束标记实际元素 <…

python--matplotlib(2)

前言 Matplotlib画图工具的官网地址是 http://matplotlib.org/ Python环境下实现Matlab制图功能的第三方库&#xff0c;需要numpy库的支持&#xff0c;支持用户方便设计出二维、三维数据的图形显示&#xff0c;制作的图形达到出版级的标准。 实验环境 Pycharm2020.2.5社区版,w…

算法练习-链表(二)

算法练习-链表&#xff08;二&#xff09; 文章目录算法练习-链表&#xff08;二&#xff09;1. 奇偶链表1.1 题目1.2 题解2. K 个一组翻转链表2.1 题目2.2 题解3. 剑指 Offer 22. 链表中倒数第k个节点3.1 题目3.2 题解3.2.1 解法13.2.2 解法24. 删除链表的倒数第 N 个结点4.1 …

中国智能物流行业市场规模及未来发展趋势

中国智能物流行业市场规模及未来发展趋势编辑中国智能物流行业市场规模正在快速增长。随着电子商务、物流配送、物联网等行业的发展&#xff0c;物流行业需求不断提高&#xff0c;智能物流产品应运而生。智能物流行业主要通过智能化管理、智能路径规划、智能定位、物流配送等方…

Java特性之设计模式【工厂模式】

一、工厂模式 概述 工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式 在工厂模式中&#xff0c;我们在创建对象时不会对客户端暴露创建逻辑&#xff0c;并且是通…

投票需要什么流程微信投票互助平台的免费投票平台搭建

“最美家政人”网络评选投票_免费小程序投票推广_小程序投票平台好处手机互联网给所有人都带来不同程度的便利&#xff0c;而微信已经成为国民的系统级别的应用。现在很多人都会在微信群或朋友圈里转发投票&#xff0c;对于运营及推广来说找一个合适的投票小程序能够提高工作效…

Java-集合(5)

Map接口 JDK8 Map接口实现子类的特点 Map和Collection是并列关系&#xff0c;Map用于保存具有映射关系的数据&#xff1a;Key-ValueMap中的key和value可以是任何引用类型的数据&#xff0c;会封装到HashMap$Node对象中Map中的key不允许重复&#xff0c;原因和HashSet一样Map…

2023年美赛MCM 问题C:预测Wordle结果 ​

目录2023年美赛MCM 问题C: 预测Wordle结果 ​1. 背景2. 要求3. 附件1. 数据文件。2. 纽约时报网站上发布的 Wordle 指南4. 参考2023年美赛MCM 问题C: 预测Wordle结果 ​ 1. 背景 Wordle 是纽约时报目前每天提供的流行拼图。 玩家尝试通过在六次或更少的尝试中猜测一个五个字母…

记录一次Binder内存相关的问题导致APP被杀的BUG排查过程

事情的起因的QA压测过程发生进程号变更&#xff0c;怀疑APP被杀掉过&#xff0c;于是开始看日志 APP的压测平台会上报进程号变更时间点&#xff0c;发现是在临晨12&#xff1a;20分&#xff0c;先大概确定在哪个日志文件去找关键信息一开始怀疑是crash&#xff0c;然后就在日志…

shiro CVE-2020-1957

0x00 前言 在之前只是单纯的复现了漏洞&#xff0c;没有记笔记&#xff0c;所以补充了这篇分析笔记。 影响版本&#xff1a;shiro < 1.5.2 0x01 环境搭建 环境用的是&#xff1a;https://github.com/lenve/javaboy-code-samples/tree/master/shiro/shiro-basic 0x02 漏…

用python实现对AES加密的视频数据流解密

密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法。 在做网络爬虫的时候,会遇到经过AES加密的数据,可以使用python来进行解密。 在做爬虫的时候,通常可以找到一个key,这个key是一个十六进制的一串字符,这传字符是解密的关键。所以对于…

SpringBoot2.X整合ClickHouse项目实战-从零搭建整合(三)

一、ClickHouseSpringBoot2.XMybatisPlus整合搭建 二、需求描述和数据库准备 三、ClickHouse统计SQL编写实战和函数使用 四、ClickHouseSpringBoot2.X案例-基础模块搭建 controller/request层 mapper层 model层 service层 五、ClickHouseSpringBoot2.X案例-数据统计接口 …

城市轨道交通供电系统研究(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…

一文告诉你什么是财务数据治理?

大家好&#xff0c;我是梦想家Alex&#xff0c;今天是周末&#xff0c;就不给大家分享技术文了&#xff5e;应出版社老师推荐&#xff0c;文末给大家送几本DAMA中国主席力荐&#xff0c;20位行业专家历时2年共同打造的《财务数据治理实战》&#xff0c;将数据治理理论应用于财务…