2022-08-01 第二组 刘禹彤 学习笔记
打卡21天
###学习笔记
JavaSE高级部分
- 泛型
- 枚举
- 多线程
- 集合(数据结构,树,二叉树,红黑树,B+树,B-树
- IO流(文件)
- 网络通信Socket
- 反射和注解
1.泛型(Generics)
- 泛型广泛的,普通的类型,泛型能够帮助我们把【类型明确】的工作推迟到创建对象或者调方法的时候
意思:(例)定义的时候,不需要考虑这个数组要存什么类型
创建这个超级数组对象的时候,把里面要存的数据的类型确定下来
- 泛型的类型:
1.泛型类:(1)把泛型定义在类上,用户在使用类的时候才能把类型给确定
(2)具体使用方法:使用<>加上一个未知数,通常用T,K,V,E的大写字母表示
(3) 当我们在一个类里面加了泛型<T>,这个T就是一个数据类型,既然T是
一 个数据类型,就可以拿过来用:(例)private T t———声明了一个
T类型的t
(4)如果一个泛型类,在创建对象的时候没有指定类型,默认还是Object,在
使用这个类的时候,去确定泛型类型
(5) 如果一个泛型类中,尽量不要再出现泛型方法,泛型方法多数出现在非
泛型类中
2.泛型方法:(1)我们如果只关心某个方法,可以不定义泛型类,只定义泛型方法
(2) 泛型方法不是一定要在泛型类里,泛型类里也不是一定要有泛型方法
(3) 在定义泛型方法时,要首先定义泛型类型,定义在方法中间,泛型的
使用处之前
(4) 使用泛型方法,最好要结合返回值,和Object一样
3.泛型接口
- 继承关系:泛型类在继承时(1)父类是一个泛型类,子类可以不是泛型类
(2)泛型的声明只能在当前类名后或者方法中间 ,而且声明的类型是自
己的
(3)在子类继承父类时,子类的泛型和父类的泛型都写出来的情况下,
父跟子
(4)如果在继承时没有写出任何泛型,当前子类不是泛型类
- 静态方法:1.静态方法如果是泛型方法,泛型的声明必须写
2.因为静态结构是属于类的,不属于某个对象
- 特殊:?通配符----------可以接受任何类型
如果使用Object类型,别写泛型
泛型的束型的数据类型
类型擦除:为了兼容性,使用原始类型(没有泛型)是可以的,在泛型刚刚出现的时候,还存在大量
的不使用泛型的代码,为了保证代码的兼容性,将参数化类型的实例传递给设计用于原
- 始类型的方法必须删除
为了保持兼容性,JAVA泛型中,其实有一种类似伪泛型,因为JAVA在编译期间,所有的
泛型类型都会被擦除
JAVA的泛型语法实际上是在编译器这个期间实现的
正常来说在生成的字节码文件中不出现泛型的类型信息的
在JVM中看到的只是看到的类型,由泛型附加的类型信息JVM是看不到的
可以理解为:泛型的本质就是让程序员在编写代码时遵循的一个规则
比如SuperArray:在确定了泛型之后,这个超级数组就统一只放该类型参数,如果放
入其他类型,编译不通过
要求:1.泛型不能是基本数据类型,可以用包装器(原则上来说,数组可以作为泛型,语
- 法角度,不可以)
<>里面放的应该是类名,数组是在编译后才生成的一个类($xxx)
’ 2.方法重载:a.同一个类型 b.方法名相同 c.参数不同
原理:类型擦除
3.多态上
- 泛型的应用场景:1.父类(接口),起到的是一个规范作用,对里面的数据类型没有明确要求
2.容器类,(超级数组,链表,队列,表)
3.当类型无法确定时,使用泛型
4.开发中,我们更多的是会使用到一组泛型类或泛型接口
2.枚举
- 应用场景
在某些情况下,一个类的对象的个数是有限的,如:季节,春夏秋冬,24节气,星期。。。。
规定这个类的对象的个数
- 枚举类中:
把需要用的对象声明出来
写对应的构造器
可以有set,get方法
- 使用enum声明类,public enum 类名
- 枚举在switch中使用:JDK1.5以后
- 枚举的静态导入:*代表导入枚举类的所有对象
- 枚举的命名规则:所有的枚举都需要以Enum结尾
- 使用枚举类实现单例模式
高效JAVA
单元素的枚举类型已经成为实现单例模式的最佳方案
- 枚举的优势:1.int类型不具备安全性,假如某个程序员在定义int时少写了个final,会存在被他人修 改的风险,枚举类,他天然就是一个常量类
2. 使用int类型,语义不够明确如果说在控制台输出1
3. 枚举里面都是常量,静态
4.推荐枚举的比较使用==
3.多线程入门
- 计算机组成相关知识
- 为了完成特定的任务,用某种编程语言写一个软件(程序)
程序要想运行就必须加载到内存中执行
- 在执行程序时,实时的指令加载到cpu内存的指令寄存器中执行
执行过程中产生的数据要加载到数据寄存器中,ALU负责进行算术逻辑运行的操作
- 系统总线(System Bus):连接计算机系统的主要组件,用来降低成本和促进模块化
- 进程:一个正在执行中的程序就是一个进程,系统就会为这个进程发起独立的运行资源
进程是程序中的依次执行过程,他有自己的生命周期
他会在启动程序时产生,运行程序时存在,关闭程序时消亡
- 比如:QQ,idea,腾讯会议,PDF
- 早期的计算机,单进程,同一时间只能执行一个进程
计算器:同一时间段只能执行一段代码
- 随着计算机的发展,CPU的计算能力大幅提升
按照时间线交替执行不同的继承方式
每个执行一点点时间,感觉是在同时运行
如果为每一个任务分配单独的进程去执行,进程间通信,CPU在调度
- 引入线程:
(1)线程是由进程创建,是进程的一个实体,是具体干活的人
(2)一个进程有多个线程,线程不独立分配内存,而是共享进程的内存资源
(3)线程可以共享cpu资源
(4)进程更关心的是【内存资源分配】,线程更强调的是【计算资源分配】
(5)因为有了线程的概念,一个进程的线程不能修改另一个线程的数据,线程之间相互各路, 更安全,同一进城中的线程不能相互修改数据
###学习心得
今天学习了泛类,枚举,并接触了一点多线程,知识点比较集中,学习的东西还都理解,也要多加练习
###掌握情况:一般
###课上案例
public class Ch03 { public <T> T show(T t) { // 拿着这个t在方法中做好多事情,再把t返回回去 // 调用另一个方法 System.out.println(t); return t; } public static void main(String[] args) { new Ch03().show("哈哈"); } }
###运行结果