Java回顾4【笔记】
查漏补缺
源自于pad上的内容
流
1. IO数据流会以.dat结尾的文件存储,Object对象的流需要类实现序列化Serializable后才能运行
2. InvalidClassException:当你修改了对象,例如添加了一个属性,它的UID会改变,再去读取.dat会报错,因为UID改变。
所以实现序列化后需要自定义序列化id,
private static final long seriaVersionUID = 1L;//具体值随便写
3. transient
如果不想某个属性被序列化,加关键字transient(静态的东西本身就不会被序列化)
没有被序列化的属性,只会保持默认值,IO是修改不了的。
结论:序列化一个对象,其属性要么是基本数据类型,要么是实现序列化了的引用数据类型
4. Externalizable接口
第二种实现序列化的方法,实现该接口。需要重写两个方法:
writeExternal: out.writeUTF(xxx);//即便是无法序列化的属性,写在这儿也能被序列化
readExternal: brand = in.readUTF();
5. PrintStream打印流
PrintStream out = System.out (Web阶段为PrintWriter类)
注意PrintStream的有参构造,可以直接输出到文件中,也可以输出对象
Scanner sc = new Scanner(System.in);// 默认情况下是从键盘输入进行扫描
6. JDK1.7新增try with resource专门为资源关闭准备
try(需要关闭的资源){}
catch(){}
其实就是try多了个(),里面直接写需要关闭的资源,结束了以后就会自动将()里的资源关闭
7. 阻塞式IO
非阻塞为NIO
Path接口与工具类Paths(就像Collection与Collections)
很多新版的API都提供了报异常的方法,可以有更多的选择
网络
8. 网络通信三要素:地址、端口号、网络协议
地址:IP地址,定位到一台设备
端口号:定位到某个线程
网络协议:保证如何准确地到达那里,正确地解析数据
9. TCP三次握手,四次挥手
以下为A和B的对话:
握手:~天王盖地虎 ~小鸡炖蘑菇,你刚发的是天王盖地虎吗? ~收到小鸡。。我刚发的确实是天王。。
挥手:~我要走了 ~我知道了 ~bye ~bye(可能收不到,收不到就关了)
UDP以报文发送,不可靠
类加载
10. 类的加载分为三步
1. 加载:字节码读取到内存
2. 连接
(1)验证
(2)准备:例如给类变量在方法区分配内存
(3)解析:虚拟机常量池内的符号引用(常量名)替换为直接引用(地址)的过程
(1、2完成时,方法区中已经有Class对象了)
3. 类的初始化<clinit>():触发机制:new对象,反射
(类的加载大多数情况下是1、2、3一起完成,但有的时候3初始化不会一起完成)
没有进行初始化:
1. 引用静态常量
2. 子类调用父类的静态域(变量 方法),子类不会初始化
3. 创建类的数组对象,其实还没new
11. 类加载器:
1. Bootstrap ClassLoader(根类加载器)
加载Java核心库,rt.jar等(像java.lang就在该jar中)
不是用Java写的,所以String.class.getClassLoader()为null
2. Extension ClassLoader(扩展类加载器)
jre/lib/ext/*.jar
3. Application ClassLoader(应用程序类加载器)
bin目录下,通俗的讲应该是我们自己写的类
4. 自定义类加载器
字节码加密,解密或者字节码在其他路径下,如Tomcat里的类
12. 双亲委派模式:
设想当你自己创建了一个package java.lang.String 调用String时会使用哪一个呢?
每个类加载器都有getParent()方法来获取上一层的加载器
Application的父亲是Extension,再往上是Bootstrap
层级:Application-->Extension-->Bootstrap
查找到某一层的时候会先搜索内存中是否存在,若存在则直接返回
调用String后,先从Application开始,调用getParent,在Extension中也调用getParent。也就是一定要从父类中进行查找,
查到了就返回,没查到就自己查。
所以一定会先用rt.jar中的String而不是自己写的String
13. 类加载器作用,加载类或者加载类路径下的文件
Properties pro = new Properties();
pro.load(xxx.class.getClassLoader().getResourceAsStream("xxx.properties");
1.8新特性
14. Lambda表达式,简化匿名内部类
15. 方法引用或构造器引用,简化Lambda
16. Stream流,对集合、数组的数据进行处理、加工
1. 创建Stream
2. 加工
3. 终结
特点:不会改变源对象,延迟操作,所有操作延迟到终结,一起处理
17. Optional类
知识离开了脑子,就只是一堆文字

浙公网安备 33010602011771号