Java成长计划
Wonderful Java 知识点总结
本文是博主对Java的中高级知识点进行了一些总结
–Java相关知识来源于以下书籍与视频教程
- 《Java核心技术卷I》
- 《Java核心技术卷II》
- 《Java编程思想》
- 《Head First servlets & jsp》
- 《Head First 设计模式》
- 《深入分析JavaWeb技术内幕》
- 《Effective Java》
- 《深入理解Java虚拟机》
- 《Java并发编程实战》
- 《Spring实战》
- 《代码整洁之道》
- 《互联网轻量级框架整合开发》
- 《数据结构与算法分析》
- 《算法第四版》
- 《阿里巴巴Java开发手册》
- “慕课网”Java相关教程
- “LifeCat”系列项目的经验
目录
一些概念
《Java核心技术卷I》
▷
null为空,代表无对象,在内存中没有分配空间
“”为长度为零的字符串,但也是Java对象,在内存中生存
▷
成员变量:堆中,随对象存在会赋初值
局部变量:栈中,随方法存在,不会自动赋初值
▷
BigDecimal 任意精度
BigInteger 任意精度
▷
默认访问范围 default < protected
(子孙类无法访问)
▷
接口默认方法:
default int compareTo(…) { return 0;}
▷
值传递:基本数据类型
引用传递:对象引用
☆ string,integer, double等包装类型,相当于不可变对象,传递值的克隆,生成新的包装对象
▷
final修饰变对象变量,引用不可变,引用的对象可变化
▷
泛型
编译时检查,擦除后域为Object
Object不能存储Integer等包装类型
▷
泛型
命名规范:
E 集合
T 任意
K 键
V 值
▷
泛型
通配符:
? extend T
? super T
▷
集合框架
《Java核心技术卷II》
▷
Java脚本引擎
javax.script.ScriptEngine
▷
Java调用本地脚本 callshell方式
Process process = Runtime.getRuntime.exec(命令行语句调用本地脚本)
▷
注解
注解本身无行为,需要处理工具调用才有用,例如使用AOP切面进行注解操作
▷
流库
流并不存储其元素
流的操作不会修改数据源
流的操作是惰性执行的
▷
过滤-》转换-》终结
▷
使用基本类型流,直接处理基本类型而不通过包装类型,节约空间和内存
IntStream
DoubleStream
…
▷
并行流
多线程
parallelStream()
▷
Optional类型 “可选的”
▷
XML
文档对象模型DOM –> 树形解析器
XML简单API –> 流机制解析器
▷
套接字socket
创建对象
获取输入输出流
数据传输
▷
URL资源对象
创建对象
获取输入流
加载对象
▷
JDBC
▷
preparedStatement 预设语句
▷
行结束符
Windows \r\n
UNIX \n
《Java编程思想》
▷
回收器只释放由new分配的内存
先调用finalize方法,下一次才会真正回收
垃圾回收只与内存有关,内存小,回收多
一面回收内存空间,一面使堆中的对象紧凑排列
▷
引用计数法:
有引用+1,删除引用-1,若值为0,标记回收
当循环情况时,或者遍历引用表工作量大
▷
停止-复制:
从堆栈和静态存储区开始,遍历找到所有活的对象,暂停程序,将活的对象复制到另一个堆,新堆排列紧凑
▷
标记清扫:
遍历标记所有活的对象,未标记的进行清理
▷
对象稳定:标记清扫
碎片多:停止复制
▷
成员变量初始化
对象引用默认null
实例变量的初始化在构造函数之前运行
▷
对象创建过程:
首次创建类对象/类静态域时:Java解释器查找类路径,加载.class文件
载入class文件,静态初始化运行
new时,先在堆上分配空间
将这块空间清零,然后复制给对象引用
执行字段定义处的初始化动作
执行构造器
▷
先父类static –> 后本类static
父类构函 –> 本类实例域 –> 本类构函
▷
一个类只能有一个public 的class
一个类对应一个class文件
▷
多态:
a.方法() 动态绑定,编译器不知道对象类型,方法调用机制实现多态
func(a/b) 静态绑定,编译时确定方法类型
▷
内部类:
内部类可访问外部类所有元素
外部类访问内部类需要对象引用
内部类对象会连接到创建他的外部类对象上
▷
局部内部类
在方法和作用域内的类
▷
匿名内部类
▷
嵌套类static
创建嵌套类对象,不需要外部类对象
不能从嵌套类对象访问非静态的外部类对象
在接口中可定义嵌套类
▷
内部类可以有多个实例,并且与外部类对象的信息相互独立
通过内部类实现不同接口,实现不同的功能
▷
类加载:
加载,查找字节码,从字节码构建class对象
链接,验证字节码,为静态域分配存储空间
初始化,对超类初始化,执行静态初始化器和静态块
.class的初始化被延迟到对静态方法、构造函数或者静态域首次引用时
static final在链接时进行,可直接访问
static需要先初始化才可访问
class.forName直接进行了初始化
▷
尽量使用容器替代数组
Arrays数组操作
▷
随机读写randomAccessFile
▷
管道流
用于多线程间的通信
▷