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


管道流
用于多线程间的通信

猜你喜欢

转载自blog.csdn.net/wsh596823919/article/details/82379741