当前位置:网站首页>2022-08-01 第四小组 修身课 学习笔记(every day)
2022-08-01 第四小组 修身课 学习笔记(every day)
2022-08-02 07:01:00 【修身课】
泛型:(Generics)
广泛的,普通的类型,泛型能够帮助我们把【类型明确】的工作推迟到创建对象或者调方法的时候
定义类的时候,不需要考虑这个数据到底要存在什么类型‘
泛型的修饰
1.泛型类
2.泛型方法
3.泛型接口
泛型类把泛型定义在类上,用户在使用类的时候才能把类型给确定
具体使用方法使用<>加上一个未知数,通常用 T K V 等大写字母表示
实际用啥都行,只要架构单词就可以
当我们在一个类后面加上泛型<T> 这个T就是数据类型,我们可以拿来用
如果一个泛型类,在创建对象的时候没有确定泛型的类型
默认还是Object
在使用这个类的时候,去确定泛型类型
泛型方法
如果我们只关心某个方法,可以不定义泛型类
只定义泛型方法
在定义泛型方法时,要首先定义泛型类型
使用泛型方法,最好要结合返回值
继承关系
泛型类继承时
泛型行的声明只能在当前类名后或方法声明
在确定子类泛型的时候,父类的泛型和子类的一样,父跟子
如果继承时没有写出任何泛型,当前子类就不是泛型类
在泛型类中没不要在写泛型方法
静态方法
1.静态方法如果是泛型方法,泛型声明必须写
2.因为静态属于类的,不属于某个对象
<?> 通配符,可以接收任何类型
类型擦除
为了兼容性,使用原始类型(没有泛型)是可以的
泛型刚刚出现的时候,还存在大量的不适用泛型的代码
保证代码的兼容性,将参数化类型的实例传递给设计用于原始数据的方法
为了保持兼容性,Java泛型中没及时有一种类似伪泛型,
泛型的本质就是让程序猿编写代码是遵守的一个规则
经验:开发中,能够在业务上解决的问题,尽量不要在技术上解决
泛型不能是基本数据类型
泛型的应用场景
父类,起到的是一个报错的作用,对里面的数据类型没有明确要求
容器类(超级数组,链表,队列,栈)
当类型无法确定时,使用泛型
枚举
自定义类实现枚举
1.不需要提供setXxx方法,因为枚举对象通常为只读
2.对枚举对象/属性使用 final static 共同修饰,实现底层化
3.枚举的对象名通常使用全部大写,常量的命名规范
4.枚举对象根据需要,也可以有多个属性
应用:
public class Ch01 {
public static void main(String[] args) {
System.out.println(Season.SPRING);
System.out.println(Season.SUMMER);
System.out.println(Season.AUTUMN);
System.out.println(Season.WINTER);
}
}
class Season{
private String name;
private String attributes;
public final static Season SPRING=new Season("春天","春暖花开奔你而来");
public final static Season SUMMER=new Season("夏天","夏日炎炎有你超甜");
public final static Season AUTUMN=new Season("秋天","秋高气爽对你向往");
public final static Season WINTER=new Season("冬天","冬日暖阳住我心房");
private Season(String name,String attributes){
this.name=name;
this.attributes=attributes;
}
public String getName() {
return name;
}
public String getattributes() {
return attributes;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", attributes='" + attributes + '\'' +
'}';
}
}小结:
定义自定义类实现枚举:
1.构造器私有化
2.本类内部创建一组对象
3.对外暴露对象(通过为对象添加public final static修饰符)
4.可以提供get方法,但是不要提供set
枚举类关键字
1.当我们使用enum关键字开发一个枚举类时,默认继承Enum类,而且是一个final类
2.传统的 public static final Season SPRING=new Season("春天","春暖花开奔你而来");简化成 SPRING("春天","春暖花开奔你而来"),这里必须知道,它调用的是哪个构造器
3.如果使用无参构造器创建枚举对象,则实参表和小括号都可以省略
4.当有多个枚举对象时,使用,间隔,最后有一个分号结尾
5.枚举对象必须放在枚举类的行首
public class Ch02 {
public static void main(String[] args) {
System.out.println(Season.SPRING);
System.out.println(Season.SUMMER);
System.out.println(Season.AUTUMN);
System.out.println(Season.WINTER);
}
}
enum Season1{
SPRING("春天","春暖花开奔你而来"),SUMMER("夏天","夏日炎炎有你超甜"),
AUTUMN("秋天","秋高气爽对你向往"),
WINTER("冬天","冬日暖阳住我心房");
private String name;
private String attributes;
private Season1(String name,String attributes){
this.name=name;
this.attributes=attributes;
}
public String getName() {
return name;
}
public String getattributes() {
return attributes;
}
public String getAttributes() {
return attributes;
}
public void setAttributes(String attributes) {
this.attributes = attributes;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", attributes='" + attributes + '\'' +
'}';
}
}javap工具演示

enum常用方法应用
public class Ch02 {
public static void main(String[] args) {
Season1 season1=Season1.AUTUMN;
//输出枚举对象的名称
System.out.println(season1.name()); //AUTUMN
//输出枚举对象的次序.从0开始编号
System.out.println(season1.ordinal()); //2
//从反编译可以看出values方法,返回Season1[]
//含有定义的所有枚举对象
Season1[] values = Season1.values();
for (Season1 season:
values) {
System.out.println(season);
}
//valueOf()将字符串转换为枚举对象,要求字符串必须为以后的常量名,否则报错
//执行流程
//1.根据输入的字符串到Season1的枚举对象去查找
//2.如果找到了返回,否则报错
Season1 season11 = Season1.valueOf("AUTUMN");
System.out.println(season11);
System.out.println(season1==season11); //true 相同对象
//compareTo:比较两个枚举常量,比较编号
//偏移量
System.out.println(Season1.AUTUMN.compareTo(Season1.SPRING)); //2
}
}
enum Season1{
SPRING("春天","春暖花开奔你而来"),SUMMER("夏天","夏日炎炎有你超甜"),
AUTUMN("秋天","秋高气爽对你向往"),
WINTER("冬天","冬日暖阳住我心房");
private String name;
private String attributes;
private Season1(String name,String attributes){
this.name=name;
this.attributes=attributes;
}
public String getName() {
return name;
}
public String getattributes() {
return attributes;
}
public String getAttributes() {
return attributes;
}
public void setAttributes(String attributes) {
this.attributes = attributes;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", attributes='" + attributes + '\'' +
'}';
}
}enum使用细节
1.使用enum关键字后,就不能在继承其他类了因为enum会隐式继承Enum,Java是单继承
2.枚举类和普通类一样,可以实现接口
边栏推荐
猜你喜欢
![WebGPU 导入[2] - 核心概念与重要机制解读](/img/8f/195a3b04912d8872d025df58ab5960.png)
WebGPU 导入[2] - 核心概念与重要机制解读

Gradle系列——Gradle插件(基于Gradle文档7.5)day3-2

海缆探测仪TSS350(二)

替换ptmalloc,使用tcmalloc和jemalloc

在VMware上安装Metasploitable2
![MySQL error 1055 solution: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains](/img/aa/ab58ec47bb96df803dbc6a8ff6dde3.png)
MySQL error 1055 solution: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains

【ROS基础】map、odom、base_link、laser 的理解 及其 tf 树的理解

Splunk Filed Alias field name

【CV】OpenVINO安装教程

spark架构
随机推荐
OC-NSDictionary
MySQL报错1055解决办法:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains
Please tell me, how to write Flink SQL and JDBC sink into mysql library and want to create an auto-incrementing primary key
我与csdn
使用hutool做本地缓存的工具类
飞桨paddle技术点整理
查看端口号占用
PLSQL Developer安装和配置
OC-NSString
【请教】SQL语句按列1去重来计算列2之和
Metasploit(MSF)基础超级详细版
Compact格式下MySQL的数据如何存储到磁盘
修改apt-get源为国内镜像源
playwright 爬虫使用
spark读取文件夹数据
SQL server 2014 怎么一次性导出多个查询结果?
OC-error prompt
CollectionUtil:一个函数式风格的集合工具
吃透Chisel语言.31.Chisel进阶之通信状态机(三)——Ready-Valid接口:定义、时序和Chisel中的实现
MySQL-多版本并发控制