文章目录
一、字符串常量池
2.1 池以及常量池的概念
- 关于池的概念:编程中常见的用于提升效率的方式,当需要某个东西时,直接去池里拿,不用再自己创建,用完就放回去,效率很高。为了节省存储空间 + 提高效率,Java中引入了下面这些池子
- Class文件常量池:每个java源文件编译后生成.Class文件中会保存当前类中的字面常量以及符号信息
- 运行时常量池:在.Class文件被加载时,.Class文件中的常量池被加载到内存中称为运行时常量池,运行时常量池每个类都有一份
- 字符串常量池
- java为基本数据类型和String类都提供了常量池:Java中经常会使用字面类型的常量,为了提升效率+节省内存,Java为8种基本数据类型和String类都提供了常量池
2.2 字符串常量池
-
字符串常量池的不同形式:字符串常量池在JVM中是 StringTable类,其实际是一个固定大小的HashTable(哈希表),不同JDK版本下字符串常量池的位置以及默认大小是不同的
- jdk6:字符串常量池在方法区,默认大小为1009且固定
- jdk7:字符串常量池在堆中,默认大小为60013(大小可以设置,没有限制)
- jdk8:字符串常量池在堆中,最小为1009(可设置且有范围限制)
-
字符串常量池示例:
-
关于intern方法:
二、泛型
2.1 泛型的概念及使用
- 概念:泛型就是【适用于许多类型】,从代码上看就是【可以将类型作为参数传递】,让类型实现了参数化
- 是jdk5引入的语法
- 为什么我们需要使用泛型:
- 泛型的基础使用:
- 建议的泛型写法:
2.2 泛型的擦除机制
- 什么是擦除机制:
2.3 泛型的上界
2.4 通配符
-
什么是通配符: ? 在泛型的使用
-
为什么需要通配符:
-
通配符的上下界:通配符是有边界的
-
通配符上限:<? extends 上界>,上界是个类
- 示例:<? extends Number> -----> 可以传入的参数类型是 Number 或者 Number 的子类
- 示例:<? extends Number> -----> 可以传入的参数类型是 Number 或者 Number 的子类
-
通配符下限:<? super 下界>,下界是个类
- 示例:<? super Number> -----> 可以传入的参数类型是 Number 或者 Number 的父类
- 示例:<? super Number> -----> 可以传入的参数类型是 Number 或者 Number 的父类
-
2.5 如何越过 泛型类 直接调用 泛型方法
三、包装类
3.1 什么是包装类
- 概念:包装类就是基本数据类型对应的类类型
- Java中有8种基本数据类型
- 形式:除了 Integer 和 Character ,其余基本类型的包装类都是首字母大写
基本数据类型 | 包装类 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
3.2 为什么要有包装类
- 原因:让【基本数据类型】可以【面向对象】
- 因为类是面向对象的,所以可以让基本数据类型创建出对象,并借助类中的方法/属性实现类型上的一些操作
3.3 装箱和拆箱
-
概念:
- 装箱/装包:基本类型------------>包装类型
- 拆箱/拆包:包装类型------------>类型类型
-
装箱/装包代码:
-
拆箱/拆包代码: