- 用引用操作对象
在Java中,一切都被视作对象,因此可采用单一固定的语法,但操纵的标识符实际上是对象的一个引用(reference)。
拥有一个引用,并不一定需要有一个对象和它关联,如 String s; 此处创建的只是引用,而不是对象。如果此时向s发送一个消息,就会返回一个运行时错误,因为s并未与任何事物关联。因此,创建一个引用的时候便进行初始化是更安全的做法。
- 数据存储位置
1)寄存器
最快,位于处理器内部,数量有限,不能直接控制。
2)堆栈
位于通用RAM中,快速有效,堆栈指针向下移动,则分配新的内存,向上移动,则释放那些内存,因此必须知道存储在堆栈内所有项的生命周期,限制了灵活性。Java的对象引用存储在堆栈中,java对象并不在。
3)堆
通用的内存池(位于RAM区),用于存放所有的java对象。编译器不需要知道存储数据的存活时间,需要对象时,new即可,会自动在堆里进行存储分配。
4)常量存储
直接存放在程序代码内部,或ROM中。
5)非RAM存储
若数据存活于程序之外,可以不受程序控制,如流对象和持久化对象。技巧在于:把对象转化成可以存储在其他媒介上的事物,在需要时,可恢复成常规的。
- 基本类型
基本类型不用new来创建变量。而是创建一个并非是引用的“自动”变量,这个变量直接存储值,并置于堆栈中,因此更加高效。
java中基本类型所占存储空间大小是固定的,boolean类型所占存储空间大小没有明确指定。因此Java没有sizeof()操作符。
所有数值类型都有正负号。
基本类型都有一个包装器类,可以在堆中创建一个非基本对象,用来表示对应的基本类型。自动包装功能可以将基本类型转换为包装器类型。
java对基本类型的成员变量默认进行初始化,防止产生程序错误。若作为局部变量时,则不默认初始化。
- 高精度数字
BigInteger支持任意精度的整数,BigDecimal支持任意经度的定点数。属于包装器类的范畴,但无对应的基本类型。能作用于int和float的操作,也同样能作用于这两个类型,但必须以方法的形式取代运算符的形式加以调用。
- 数组
java确保数组会被初始化,并且不能在范围之外被访问,是以每个数组上少量的内存开销和运行时的下标检查为代价。创建一个数组对象时,实际上是创建了一个引用数组,并且每个引用都被初始化为null,意味着这个引用未指向一个对象,当使用此引用时,会报错。
- 对象的作用域
当new一个java对象时,它可以存活于作用域之外。new创建的对象,只要需要,就会一直保留下去,为防止填满内存空间,java有垃圾回收器,监视用new创建的所有对象,辨别出不会再被引用的对象,随后,释放这些对象的内存空间,以便供其他新的对象使用。
- Static关键字
声明一个事物是static时,意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起,它们作为整个类而不是类的某个特定对象而存在。引用static变量有两种方法,通过一个对象或者使用类名。
1) 关于main方法是static方法,但是为什么非要是static?
原因就是,如果一个类她定义了main方法的话,那么她的main方法会在这个类的构造函数运行之前被调用。
由于main方法运行的时候尚未在JVM里生成相应对象(构造函数未被执行),所以要声明为static。