数据存储

有五个地方可以存数据

1.寄存器(Registers)

存储速度最快, 位于CPU内.但是我们无法控制它,也无法在程序中找到寄存器的踪迹

2.栈内存(stack)

速度仅次于寄存器, 位于常规内存RAM(随机访问存储器 random access memory)中,可以通过栈指针获取处理器的直接支持,指针上移释放,指针下移存储,在创建程序时,java必须知道栈内保存所有项的生命周期,这也就限制了其灵活性

3.堆内存(heap)

堆内存是一个通用内存池,也存在于RAM内, 它存储java的所有对象, 而且不用考虑存储对象的生命周期,这也就加大了它的灵活性, 在我们new一个对象的时候它会自动的分配空间进行存储, 分配跟清理会花费一定的时间,但随着技术的发展,现在也非常的块

4.常量存储(constant storage)

常量因为是固定不变的, 一般存放在程序之中,如果需要严格的保护, 则将其放在ROM(只读存储器 read only memory)中

5.非RAM存储

数据完全置身于程序之外, 程序不存在,数据也可存在,一般分两种,一种是字节流的形式,从一台电脑传到另一台, 第二种就是存入持久层中

基本类型的存储

针对基本类型, 即int ,long, char, byte, short, float, double, boolean, void 这些类型,他们的创建并不是通过new关键字的, 以为new出来的是存在于堆中,而new小数据是非常的不划算的,所以这几种基本类型, 不是通过new,而是直接存到栈中,因此更高效,而且他们并不会因为更换环境而改变对应的值, 所以这也是java可移植性的一大因素

java中有每种基本类型的包装类(能 new的), 基本类型->包装类, 叫做自动装箱, 包装类->基本类型, 叫做自动拆箱

基本类型的默认值

基本类型 初始值
boolean false
char \u0000 (null)
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d

但是这种默认赋值并不适用于局部变量 eg:int i;这里的i并不会初始化为0

高精度数值-bigInterger,bigDecimal

他俩是包装类,但是并没有对应的基本数据类型, 精度高,但是运行速度会稍有降低
bigInterger: 高精度任意大小的整数,不会丢失精度
bigDecima: 高精度定点数, 不会丢失精度, 一般用于精确的货币计算

数组的存储

数组在使用的时候需要被初始化, 我们对数组的使用实际上是创建引用数组,必须为每个引用指定一个数组

命名的可见性

反向url, 例如你的域名是baidu.com, 那么你的类就是com.baidu.xxx(包名全都要小写)

import

无论在什么时候,程序中要使用预选定义好的类,就必须要能找到它, 但是一个包可能有重名的类,那么怎么能让它知道该找哪个类呢, java就为此提供了import关键字,有了它 你就不用再写一大堆反转的域名

static

静态类,特点: 不用对象也能调用方法, 是类加载的时候创建的,存储位置不同,可以直接用类名.方法来调用