图片来源于韩顺平教育
(
目录
Map集合中两个重要的取值方法---keySet()和entrySet()
文章目录分类最多三级,有些细分不了,有些会不好分)
类变量和类方法
1.不管static所修饰的变量/方法在哪,都是可以被一个类的所有实例对象所共享(可以理解为是这个类的全局变量/方法)
2.static类变量,在类加载的时候就生成了(就是编译的时候,不需要new这个类。没有创建这个类也可以调用这个类变量)当类加载器将类加载到JVM中的时候就会创建静态变量,这跟对象是否创建无关。静态变量加载的时候就会分配内存空间。
3.类加载属于运行期,运行期首先将.class文件通过类加载器加载到jvm虚拟机中,然后通过字节码验证器来验证字节码是否合法,之后在通过解释器运行或者通过JIT编译成机器码运行。编译期是将Java文件编译成字节码文件。
类变量
类变量内存布局
类变量的定义和访问
类变量细节
类方法
类方法里面不能用this
介绍
细节
main方法
main方法调用非静态方法/变量需要创建这个方法/变量所在的对象。
代码块
1.静态代码块的代码只会在类第一次初始化的时候执行一次。一个类可以有多个静态代码块,它并不是类的成员,也没有返回值,并且不能直接调用。静态代码块不能包含this或者super,它们通常被用初始化静态变量
细节/类加载
类加载过程
1. JVM启动,加载所需要的class文件
2. JVM加载class文件时,会把所有的静态内容(静态成员变量、静态方法、静态代码块)都先加载到方法区中的静态区中。
3. 静态加载完成之后,JVM开始给所有的成员变量默认初始化,静态成员变量开辟空间。
4. 当给类中的所有静态成员变量默认初始化完成,开始按照代码的顺序依次执行(遇到静态代码块就执行,遇到静态成员变量就显示初始化)
5. 静态都执行完毕,类才彻底加载完成
代码块重点(加载顺序)
不包含静态属性的加载顺序
包含静态属性的加载顺序
单例设计模式
饿汉式和懒汉式
两者的区别
final关键字
final使用细节
final与static搭配使用不会引发类加载
抽象类
细节
接口
基本介绍
细节与注意事项
接口默认方法 作用:假设没有默认方法这种机制,那么如果要为Mortal增加一个新的方法revive,那么所有实现了Mortal接口的类,都需要做改动。但是引入了默认方法后,原来的类,不需要做任何改动,并且还能得到这个默认方法通过这种手段,就能够很好的扩展新的类,并且做到不影响原来的类
继承vs实现接口
接口的多态
注:接口存在多态传递现象就是接口的继承(学了师傅的武功就相当于学了师傅的师傅的武功)
内部类
基础介绍
内部类的四种分类
1局部内部类
2匿名内部类
匿名内部类的使用方法
注意事项与细节
3成员内部类
说明
注意事项和细节
4静态成员内部类
说明
枚举和注解
枚举
自定义实现枚举
有点类似于单例模式
自定义枚举所带有的特点
使用枚举关键字实现枚举
枚举对象要放在行首
枚举关键字的注意事项和细节
enum常用的方法(继承于enum)
注意事项和细节
注解
annotation介绍
@interface是注释类
override
target(修饰注解的注解,说明只能用于修饰方法)
deprecated
suppressWarnings可传入的值
有很多可以百度
四种元注解
注释注解的注解
异常(exception)
基本概念
异常体系图
常见的运行时异常
常见编译型异常
两种异常处理办法
try-catch-finally
处理机制
语法
多catch语句
不包括catch语句
catch语句处理顺序
throws
处理机制
throws注意事项和细节
throws与theow的区别
常用类
八大包装类(Wrapper)
包装类和继承体系。包装类分为两类,一种是对象型包装类,不继承任何其他类(Object的直接子类),另一种是数值型包装类,继承于Number类。
包装库和基本数据转换
其他类型的转换类似
包装类型转String类型
其他包装类相似
Integer和Character的常用方法
String类
格式化输出就是c语言的输出方式
理解和创建对象
String的八个细节
两种创建对象的区别
两种方式内存示意图
常见方法
StringBuffer
基本情况
StringBuffer与String比较
StringBuffer可以实现增 删 改 查 插
构造器
String与Stringbuffer的转换
StringBuffer常用方法
StringBuilder
介绍
细节解读
三个String类型对比
使用选择
math类
常用方法
Arrays常用方法
System类
大数和极精数
常用算数运算
尽量转化为相同的大数或者极精数然后运算
Date
第一代日期应用实例
第二代日期类和实例(Calendar)
第三代日期类
出现原因
格式日期类
常用方法
时间戳(Instant)
第三代日期更多方法
集合
好处
集合还有一个工具类collections
集合的框架图
collection接口
常用方法
Iterator(迭代器)和增强for循环
terator(迭代器)
当遍历一边以后需要把迭代器重置
执行原理
增强for循环
因为底层使用的是迭代器,又称简化版的迭代器(必须是相同类型的数据)
List 接口
List接口常用方法
ArrayList
常用方法
注意事项
ArrayList是List的子类
扩容机制
Vector
基本情况
Vector与ArrayList的区别
LinkedList底层结构
ArrayList与LinkedListde区别
set接口
常用方法
hashSet
全面说明
hashSet底层实现结构
只要添加到阀值的个数就会触发扩容,并不是要表单用到阀值再去扩容。只要size超过12(假设)就会触发扩容
LinkedHashSet
底层实现机制
Map接口
实现类的特点
常用方法
HashMap注意事项
底层机制
HashTable
底层机制
HashMap对比HashTable
Properties
常用方法
Map的遍历方法
Map集合中两个重要的取值方法---keySet()和entrySet()
Map集合中是没有迭代器 的 ,Map集合取出键值的原理:将map集合转成set集合,再通过迭代器取出
keyset
keySet() :返回此映射中包含的键的 Set 视图
将map中所有的键存入到Set集合(需要编译类型转换),因为set具备迭代器,用迭代方式取出所有的键
再根据get()方法 ,获取每一个键对应的值
entrySet
entrySet()
取出的是关系,关系中包含key和value,其中Map.Entry来表示这种数据类型
即:将map集合中的映射关系存入到set集合中,这个关系的数据类型为:Map.Entry
entrySet() 实现了Map.entry 接口,可以通过getKey和getValue来获取HashMap里Node节点里的映射关系。也实现了set接口,可以调用迭代器(需要编译类型转换)。
entry/keyset/value区别
他们都是一种取值方式,三种取得对象都不一样。
开发中选择集合实现类
泛型
1.有点类似C语言里面的define(符号定义),用一个符号去代替一种类型。
2.使用泛型后编译时可以检测添加的元素,提高了安全性。减少了类型转换次数,提高了效率。也避免了没有强制类型转换后的编译警告。
自定义泛型
泛型类
泛型接口
泛型方法
泛型的继承和通配符
多线程
概念
程序
进程
线程
运行时,终端输入jconsole 可以查看线程运行情况
线程其他概念
线程
只有start()方法才能另起一个线程,其他都只是一个普通方法
Runnable接口
继承图
runnable接口里面只有一个run方法
Thread是一个代理模式的类,里面包含了start()方法,它可以被继承或者帮别人代理启动start()方法,new Thread时传入一个实现了Runnable接口的类,赋给target。调用start()方法->调用run犯法->调用动态绑定后的Target.run方法
线程常用方法
用户线程和守护线程
线程的七种状态
RUNNABLE可以细分为准备/运行两种状态。所以可以说是七种。
生命周期图
线程同步
Thread.currentThread().getName()//取出当前程序名字
机制
synchronized同步关键字
互斥锁
注意事项
同时也要注意死锁现象发生
释放锁的情况
不会释放的情况
IO流
文件流
文件是文件,流是流。他们绑定了关系以后才称为文件流
文件
创建文件的三种方式
实例
文件的相关方法
IO流的原理和分类
原理
流的分类
IO流的体系图
FileInputStream
构造方法和常用方法
FileOutStream
在创建写入流时传入true ,可以只追加不覆盖
FileReader与FileWriter
节点流和包装流(处理流)
区别和联系
buffered的字节流
对象流
细节和注意事项
标准输入输出流
转换流
构造器
打印流