lyt0612

导航

2022-08-01 第二组 刘禹彤 学习笔记

打卡21天

 

 

###学习笔记

JavaSE高级部分

  1. 泛型
  2. 枚举
  3. 多线程
  4. 集合(数据结构,树,二叉树,红黑树,B+树,B-树
  5. IO流(文件)
  6. 网络通信Socket
  7. 反射和注解

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("哈哈");
    }
}

###运行结果

 

 

posted on 2022-08-01 19:14  小仙女吖~  阅读(17)  评论(0编辑  收藏  举报