基本类型介绍:
java提供了八种基本类型,六种数字类型(四个整数型,两个浮点型),一种字符类型,一种布尔类型。
八大类型:byte,short,int,long,float,double,boolean,char
float,double小数位精度是多少?为什么?
float是7位,double是16位。原因是float的尾数位是23位,float的尾数位是52位,用2的负23次方就得到它的精度,double也是同样的。
变量类型介绍
所有的变量在使用之前都必须声明,类变量独立于方法之外的,用static修饰;实例变量独立与方法之外,不用static修饰;局部变量,是不可被其他方法访问,当执行完成后就会被销毁;ThreadLocal是线程共享变量。
threadLocal为何要保持remove习惯?
因为是线程共享变量,当A修改了该变量,而没有修改时,那么B再访问进来实际拿到的是A修改后的对象。
引用介绍
强引用:强引用对象,垃圾回收器不会回收它,当内存不足也不会释放,则会抛出OOM。
软引用:软引用对象,垃圾回收器会在适当的时候回收它,例如内存空间不足时。
弱引用:弱引用对象,若是垃圾回机器扫描到就会回收它。
虚引用:当一个对象仅持有虚引用,那么它就和没有任何引用一样,随时可能被回收。
引用类型 | 被垃圾回收时间 | 用途 | 生命周期 |
强引用 | 不会 | 对象的一般状态 | JVM停止运行时 |
软引用 | 当内存不足 | 对象缓存 | 内存不足时 |
弱引用 | 在垃圾回收时 | 对象缓存 | GC运行后 |
虚引用 | Unknow | Unknow | Unknow |
数据类型传递
数据传递类型一般有两种,引用传递和值传递,java中只存在值传递。
访问修饰符
修饰符 | 当前类 | 同一包内 | 子孙类(同包) | 子孙类(不同包) | 其他包 |
public | Y | Y | Y | Y | Y |
protected | Y | Y | Y | Y/N | N |
default | Y | Y | Y | N | N |
private | Y | N | N | N | N |
非访问修饰符
static:用来修饰类方法和类变量
final:用来修饰类,方法,变量
abstract:用来创建抽象类和抽象方法
Synchronized:关键字声明的方法同一时间只能被一个线程访问
transient:序列化的对象包含被transient修饰的实例变量
volatile:修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值
序列化
序列化的主要用途主要有两个,一个是对象持久化,另一个是跨网络的数据交换、远程过程调用。
json(JavaScript Object Notation)序列化,一种更轻、更友好的用于接口(AJAX、REST等)数据交换的格式。 JSON是结构化数据串行化的文本格式,作为XML的一种替代品,用于表示客户端与服务器间数据交换有效负载的格式。它是从ECMAScript语言标准衍生而来的。JSON的设计目标是使它成为小的、轻便的、文本的,而且是JavaScript的一个子集。
与Serialization比较:
1.长度的比较:serialize在编码后大概是json的两倍
2.速度的比较:serialize的速度在大数据量的情况下比json差了快一个数量级
3.处理对象:json无法处理对象方法等数据
4.使用范围:序列化使用serialize,特别是对象的存储。与对象无关的数据存储可以使用json,如包含大量数字的数组,数据交换时使用JSON