2022-08-01 第四组 王佳齐 学习笔记

 

 

 

泛型和枚举

包括泛型、枚举、多线程、集合(数据结构)、IO流(文件)、网络通信Socket、反射和注解

 

泛型(Generics):

什么是泛型?

【类型参数化】

泛型是广泛的、普通的类型,泛型能够帮我们把【类型明确】的工作推迟到创建对象或者掉方法的

时候

意思就是,我定义类的时候,不需要考虑这个数组要存什么类型

创建这个超级数组对象的时候把里面要存的数据的类型确定下来。

 

泛型的修饰:

1.泛型类

2.泛型方法

3.泛型接口

 

接口中存放的方法一定要让所有实现类都能用

卖你想接口编程一定不能让实现类中存在空的方法体

 

泛型类把泛型定义在类上,用户使用类的时候才能把类型给确定

具体的使用方法使用<>加上一个未知数,通常用T、K、V、E等大写字母表示。

实际上用什么都行,只要是个字母。

 

当我们在一个类名后面加上了泛型<T>,这个T就是一个数据类型。

既然T是一个数据类型,那我们就可以拿过来用{private T t}

如果一个泛型类,在创建对象的时候没有指定泛型类型,默认还是Object。

在使用这个类的时候,要去确定泛型类型【在等号左边类名后加上<类>,等号右边类名后加上

【<>】

类型推断

 

泛型方法:

我们如果只关心某个方法,那我们可以不定义泛型类,只定义一个泛型方法

泛型方法一定要在泛型类里吗? 不是

泛型类里一定要有泛型方法吗?不是

在定义泛型方法要首先定义泛型类型。

定义在方法中间,泛型的使用处之前。

定义泛型方法要必须传参。

使用泛型方法最好要结合返回值。

要知道什么样的方法是泛型方法。

 

继承关系:

泛型类在继承时:

1.父类是泛型类,子类要不要是泛型类? 不必须。

2.永远记住,泛型的声明只能在当前类名后或者方法的中间,而且声明的泛型类是自己的

3.在子类继承父类时,子类泛型和父类泛型都写出来的情况下,父跟子

4.如果在继承时没有写出任何泛型,当前子类不是泛型类

如果在一个泛型类中,尽量不要写泛型方法

泛型方法多数都是出现在非泛型类中

继承了泛型类不会变成泛型类

 

静态泛型方法

1.静态方法如果时泛型方法,泛型的声明必须写

2.因为静态结构是属于类的,不属于某个对象。

 

?通配符,可以接受任何类型

如果使用Object,就别写泛型

泛型约束类的数据类型

 

类型擦除

为了一些兼容性,使用原始类型(没有泛型)是可以的

在泛型刚刚出现的时候存在大量不使泛型的代码,为了保证代码的兼容性,需要将参数化类型的实

例传递给设计用于原始类型的方法必须

为了保持兼容性,Java泛型中,其实有一种类似的伪泛型,因为Java在编译期间

所有的泛型都会被擦掉

Java的泛型语法实际上是在编译期这个维度上实现的

正常来说在生成的字节码文件中,不包含泛型的类型信息的

在JVM中看不到,由泛型附加的类型信息。

可以理解为,泛型的本质就是让程序员在编写代码时遵守的一个规则

在确定泛型后,统一只放该类型参数,放其他类型,编译不通过。

 

泛型要求:

1.泛型不能是基本数据类型(原则上来说,数组可以作为泛型,语法角度,不可以)

<>里面放的应该是类名,数组是在编译后才生成一个类($xxx)

2.方法重载:

泛型不同,其它相同,不是重载,原理:类型擦除

3.多态上:

 

泛型的应用场景

1.发生在父类或者接口中,起到一个规范的作用,对里面的数据类型没有明确的要求

2.容器类,(超级数组,链表,队列,栈)

 

当类型无法确定时,使用泛型

 

开发中,我们更多的时使用到泛型类或泛型接口

 

枚举

使用enum声明类

public enum 类名

应用场景

在某些情况下,一个类的对象的个数是有限的

如季节,星期等等

 

规定这个类的对象个数

 

枚举类中

声明要用到的对象

写对应构造器

可以有set、get方法

 

枚举在switch case中可以使用(JDK5之后)

枚举的静态导入

枚举类的命名规则,所有的枚举类都要以Enum结尾

 

枚举的应用

使用枚举类实现单例模式

单元素的枚举类型已经成为实现单例模式的最佳方案

 

枚举的优势

1.int类型不具备安全性,假如某个程序员在定义int时少写了一个final,会存在被他人修改的风险。

枚举类,天然的常量

2.使用int类型,语义不够明确,如果说在控制台打印输出1

 

枚举里面都是常量、静态

推荐枚举的比较使用==

 

学习心得:今天学习了枚举和泛型,用枚举写出的懒汉式单例模式开始有地方没弄懂,在晚上的时候,重新回顾。

posted @   Iamnotarapper  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
ヾ(≧O≦)〃嗷~
点击右上角即可分享
微信分享提示