java知识补充
java和c+区别

继承多态


接口中可以实现方法
java8以上添加了default和stastic,private等
深度拷贝和浅拷贝
1.对象指的是另一个类,stirng也算对象
person克隆了一个person,2个的地址不同,比较不相同,但类下的对象是相同的。克隆的是同一个地址
实际上String这种不考虑克隆的问题,因为其建立起就算不可变的。考虑的一般是对象中的对象克隆。





常量折叠的知识,编译器回自动优化,但引用类型的值在编译中是无法获得得



1.每次抛出一个new
2.分级要越详细越好
3。抛出的异常信息要有意义
4.避免重复记录日志

什么是泛型?有什么作用?

1.泛型类 2.泛型接口 3.泛型方法
反射

注解

SPI


spi--一个接口的实现方可以有多个,这些是实现方都回返回统一的结果给调用方,这样调用和接口不需要关系实现的多种规则,只需要进行配置的修改。

某个功能的具体实现可以通过外部的不同jar包进行变化,增加了便利性。

ServiceLoader 具体实现


序列化和反序列化



1.跨语言 2.安全性

io
流传入的是字节/字符流


字节编码可以无视文件编码

因为不同编码对字符的要求不同


比基本的流操作所需要的io操作更少,缓冲流的缓冲区更大,基本流也有缓冲区。并且可以指定大小。


BufferedInputStream(字节缓冲输入流)
BufferedReader (字符缓冲输入流)和 BufferedWriter(字符缓冲输出流)
内部维护了一个缓冲区数组。


Java IO 流了解吗?


使用字符流可以增强速度但是可能回导致乱码的问题,因为将字节翻译位字符需要耗费一定时间。
实现语法糖需要通过一个包下的解糖进行操作

java只有值传递
就算是对象传入函数,传入的也是值,只是那个值是一个地址。
案列:在main中的地址没变,所以照旧

好处:更加安全

序列化
名字和类型必须指定完全就会被jvm扫描到并序列化,指定的。

反射
通过class获取一个类的方法,名字等信息。平常不用,但对于spring的一些注解注入经常用。@Component

- 获得一个反射对象


invoke:去调用某一个函数

代理
1.静态代理:
在原有的基础上编写扩展的类具有额外的方法


2.动态代理
CGLIB :在编译时动态加入到jvm中
2.1 jdk动态代理


通过jdk代理调用proxy方法传入类,接口,参数等然后根据这些生成代理类,在去重写invoke方法添加一些逻辑,
常用有拦截器,aop编程。日志记录等操作

2.2 CGLIB 动态代理机制

静态因为是一个类,所以会生产class文件,而动态因为是在运行时候被检查到会加入到jvm中。

BigDecimal 详解

1.建立的值(需要一个string)

2.计算中具有第三个参数,可以指定是否要保留小数和除尽


网上具有现成打包好的工具包
Unsafe


浙公网安备 33010602011771号