JavaSE入坑知识点合集(二)

本文详细探讨了Java中的类变量、类方法、main方法、单例模式,以及final关键字、抽象类和接口等核心概念。讲解了类加载过程、静态变量加载顺序、饿汉式和懒汉式单例区别,以及异常处理、多线程和IO流等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图片来源于韩顺平教育

目录

(文章目录分类最多三级,有些细分不了,有些会不好分)

类变量和类方法

类变量

类方法

main方法

代码块

细节/类加载

类加载过程

代码块重点(加载顺序)

不包含静态属性的加载顺序

包含静态属性的加载顺序

单例设计模式

饿汉式和懒汉式

两者的区别

final关键字

抽象类

接口

基本介绍

细节与注意事项

继承vs实现接口

接口的多态

内部类

基础介绍

内部类的四种分类

1局部内部类

2匿名内部类

3成员内部类

4静态成员内部类

枚举和注解

枚举

自定义实现枚举

使用枚举关键字实现枚举

注解

@interface是注释类

override

deprecated

suppressWarnings可传入的值

四种元注解

异常(exception)

基本概念

异常体系图

常见的运行时异常

常见编译型异常

两种异常处理办法

try-catch-finally

处理机制

语法

多catch语句

不包括catch语句

catch语句处理顺序

throws

处理机制

throws注意事项和细节

throws与theow的区别

常用类

八大包装类(Wrapper)

包装库和基本数据转换

包装类型转String类型

Integer和Character的常用方法

String类

理解和创建对象

String的八个细节

两种创建对象的区别

两种方式内存示意图

常见方法

StringBuffer

StringBuilder

三个String类型对比

math类

常用方法​编辑

Arrays常用方法​编辑

 System类​编辑

 大数和极精数

Date

第一代日期应用实例

第二代日期类和实例(Calendar)

第三代日期类

集合

集合的框架图​编辑

collection接口

Iterator(迭代器)和增强for循环

List 接口

set接口

Map接口

实现类的特点

常用方法​编辑

HashMap注意事项​编辑

HashTable​编辑

HashMap对比HashTable​编辑

Properties​编辑

Map的遍历方法

Map集合中两个重要的取值方法---keySet()和entrySet()

entry/keyset/value区别

开发中选择集合实现类​编辑

泛型

自定义泛型

泛型类​编辑

泛型接口​编辑

泛型方法

泛型的继承和通配符

多线程

概念

程序​编辑

进程​编辑

线程

线程其他概念​编辑

线程

Runnable接口

线程常用方法​编辑

用户线程和守护线程​编辑

线程的七种状态

线程同步

IO流

文件流

文件

创建文件的三种方式​编辑

文件的相关方法​编辑

IO流的原理和分类

原理

流的分类


文章目录分类最多三级,有些细分不了,有些会不好分)

类变量和类方法

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的字节流

 

 

对象流

细节和注意事项

标准输入输出流

转换流

构造器

打印流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值