面向对象-内部类-枚举-泛型-API

1、内部类:概述、成员内部类

  • 内部类:内部类是类中的一个成员,

  • 创建方法:外部类.内部类 对象名= new 外部类(...).new 内部类(...);

  • 成员内部类的实例方法的特点:可以直接访问外部类的所有成员;可以拿到当前外部类对象, 外部类.this

2、内部类:静态内部类[了解]

  • static 修饰的内部类:属于外部类自己特有

  • 特点:可以直接访问外部类的静态成员,不可以直接访问外部类的实例成员(同其他的static修饰类)

3、内部类:匿名内部类[重点]

  • 没有名字的类 :直接 new 出来的

  • new 类或接口(参数值...){ 类体(一般是方法重写);}

  • 特点: 匿名内部类本质就是一个子类,并会立即创建出一个子类对象

  • 作用:更方便的创建一个子类对象

  • 用途:Thread 中直接 new 一个子线程并且重写方法

4、内部类:匿名内部类的使用场景

  • 匿名内部类在开发中通常作为一个参数传输给方法

5、枚举:认识枚举

  • 枚举类的第一行只能写一些名称,每个名称本质是常量,每个常量都会记住枚举类的一个对象

  • 枚举类的构造器都是私有的,枚举类对外不能创建对象

面向对象-内部类-枚举-泛型-API_第1张图片
  • 枚举中,从第二行开始,可以定义类的其他成员

  • valueOf : 将字符串名称转换为枚举对象

  • 主要用于在与web端交互中

  • 枚举也可以创建单例对象 实现单例设计模式

6、枚举:枚举的作用

  • 可以有效的控制传入数据的合法性,用switch分支类型判别如何返回相应的值

7、泛型:认识泛型

  • 定义类,接口,方法时,同时声明一个或多个类型的变量

  • 泛型的本质:把具体的数据类型作为参数传给具体的变量,

  • 泛型本质上是一个类型变量,可以指定具体操作的数据类型。(基本数据 -> 包装类)

  • 作用:泛型可以在编译阶段去检查数据的类型是否合法,可以避免不必要的类型强制转换及类型的强转异常。

8、泛型:泛型类

  • 修饰方法:修饰符 class 类名<类型变量,类型变量,...> {}

  • 类型变量:E,T,K,V

9、泛型:泛型接口

  • 如何定义泛型接口 : interface 接口名

10、泛型:泛型方法

  • 如何定义泛型方法:修饰符 返回值 方法名(T t){}

  • 注意 如果返回值类型是泛型 不是泛型方法

11、泛型:泛型的注意事项

  • 泛型的擦除问题:泛型的工作在编译阶段的,在反射阶段有讲解一旦程序编译成class文件,class文件中就不存在泛型了,这就是泛型擦除。

  • 泛型不支持基本数据类型,只能支持对象(应用数据类型)

  • java不能够创建泛型数组 ,与java中数组是协变数组有关,在内存中不能够创建一片没有声明类型的数组空间。

  • 这与数组本身有关,每个数组都必须确定其所允许存储的对象类型,并且在运行时做类型检查。

  • 参考链接:

  • https://blog.csdn.net/Acx77/article/details/122645613

  • https://blog.csdn.net/Acx77/article/details/122693960?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-122693960-blog-118463976.pc_relevant_recovery_v2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-122693960-blog-118463976.pc_relevant_recovery_v2&utm_relevant_index=2

12、API课程介绍

  • API :Application Progamming Interface

13、API:Object类的toString、equals方法

  • 直接重写/或者自动生成

14、API-Object的克隆方法

继承cloneable需要一定重写clone()

  • 默认clone是protected 的只能在本类和子类中使用,而且返回值类型是Object的需要强转

  • 通过clone后可以将权限变成public 而且 可以返回当前类的类型,而不是Object类型,方便使用

深克隆

  • 对象中的基本类型的数据直接拷贝

  • 对象中的字符串数据拷贝的还是地址

  • 对象中包含的其他对象,不会拷贝地址,会创建新对象

浅克隆

  • 拷贝出的新对象,与原对象中的数据一摸一样(引用类型拷贝的只是地址)

如何克隆

  • 类实现Cloneable接口,重写克隆方法

  • 如果要深克隆,就需要将对象内部的引用类型数据再次克隆

  • 对User对象中的非字符串,非基本类型数据再次做克隆

扩展

  • 数组的clone()方法 是 浅克隆,是不能改变的

  • native :native标识的是调用java底层的方法栈的c或c++代码

  • 对象的创建有3种 :new ; clone() ;反射

15、API-Objects类

  • 工具类:

  • Objects.equals(a,b) :自动进行非空判断的对比

  • Objects.isNull() : 是否为空

  • Objects.nonNull(): 是否不为空

16、API-包装类

  • 自动装箱和自动拆箱 (valueOf)

  • 基本数据类型 -> 字符串类型

  • toString()

  • 直接拼接一个空串 i + ""

  • 字符串类型 -> 基本数据类型

  • valueOf / parseXxx(8种包装类型中 除了Character 类型)

面向对象-内部类-枚举-泛型-API_第2张图片
  • eg.

总结和问题

1.泛型和通配符

E,T,K,V:主要用于第一种,声明泛型类或泛型方法,

无界通配符?:主要用于第二种,使用泛型类或者是泛型方法,注意:泛型也可以使用,但需要先声明再使用

你可能感兴趣的:(java,jvm,开发语言)