2022-08-02 第六组 刘明延 学习笔记

JavaSE高级部分
1.泛型
2.枚举
3.多线程
4.集合(数据结构,树)
5.IO流(文件)
6.反射和注解
7.网络通信Socket(tomcat,navicat)

泛型能帮助我们把【类型明确】的工作推迟到创建对象或调方法的时候
意思就是:定义类的时候。不需要考虑这个数组到底要存什么类型
创建这个超级数组对象的时候把要存的数据类型确定下来

泛型的修饰:
泛型类:把泛型定义到类上,用户在使用类的时候才能把类型给确定
使用方法<>加上一个未知数,通常用T K V等大写字母表示,用啥都行,只要是个单词
类名后面加<T><K><V>或其他
如果加了<T>,这个T就是一个数据类型,可以拿过来用
定不下来的地方都用泛型代替
如果一个泛型类,在创建对象的时候没有指定泛型类型,默认还是Object
在使用这个类的时候,去确定泛型类型

确定为String:
SuperArray<String> SuperArray=new SuperArray<>()
泛型方法(有返回值通常要传参数):
一般出现在非泛型类中,如果本身是泛型类就没必要写泛型方法,除了静态方法,因为它属于类层面
如果只关心某个方法,可以不定义泛型类,只定义泛型方法
在定义泛型方法时,要先定义泛型类型,如果定不下来就是Object
定义在方法中间,泛型的使用处之前
!!!!!只有声明才叫泛型方法

这种形式叫泛型方法:
public <T>T show(T t){
t在方法中可以做好多事情,再把T返回回去
调用另一个方法
System.out.println(t);
return t;
}
泛型接口:如果有抽象方法,还是泛型方法
有返回值的<T>t show(T t);

static<T>T info(T t){

return t
}

继承关系:
泛型类在继承时
1.父类是一个泛型类,子类要不要是泛型类(是不是都行)
2.泛型的声明只能在当前类名后或者方法中间
3.继承,实现接口等父类后面都不能写<T>,除了下面的

在确定子类泛型的时刻,父类的泛型和子类一样(T是子类自己的,都写出来的情况下父类跟着子类走)
class Son<T> extends Father<T>{}

?通配符,可以接收任何类型
如果使用Object类型,别写泛型
泛型约束类的数据类型

类型擦除:
为了兼容性,使用原始类型(没有泛型)是可以的
在泛型刚出现的时候,存在着大量不使用泛型的代码
为了保证代码的兼容性,将参数化类型的实例的设计用于原始类型的方法必须合法
为了保持兼容性,Java反省中,有一种类似的伪泛型,因为Java在编译期
所有的泛型都会被擦掉
Java的泛型在编译器这个维度上实现的
正常来说在生成的字节码文件中,不包括泛型的类型信息的
泛型的本质就是让程序员在编写代码时遵守的一个规则
比如SuperArray,在确定泛型后,这个超级数组中就统一只放同一类型的

经验:开发中,能在业务上解决的问题,尽量不要在技术上解决

泛型不能是基本数据类型,用包装器(原则上来说数组能作为泛型,但是从语法角度不可以)
<>里面放的应该是类名,数组是在编译后才会生成一个类($xxxx)

泛型的应用场景:
1.发生在父类或接口中,起到的是一个规范地作用,对立面的数据类型没有明确要求
2.容器类(超技数组,链表,队列,栈)

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

开发中,更多的是会使用到一些泛型类和泛型接口

以后我们面向接口编程,接口里的方法不能出现实现类中方法体为空的情况(接口设计失败)

枚举类型
JDK1.5更新了枚举类
枚举类不能写主方法
关键字:enum(替换类中的class)
//public static final Season SPRING=new Season(1,"春天")
SPRING(1,"春天")
枚举类不能创建对象,构造器默认被私有化

枚举类中把需要用到的对象声明出来,会写对应的构造器
可以有set,get方法
Season season=Season.SPRING
枚举类要以Enum结尾(左侧文件区)

枚举的优势:
int类型不具备安全性,存在被他人修改的风险
枚举类,天然就是一个常量类
使用int类型,语义不够明确,如果说在控制台打印输入1

推荐枚举间的比较使用==

学习心得:这周继续学java基础,今天主要讲枚举和泛型,明天多线程难度大,今天要先预习下。




posted @ 2022-08-02 08:28  sadajasoidyaof  阅读(25)  评论(0)    收藏  举报