第二章 万事万皆对象(Java语言基础)

一、对象引用(Reference)

二、新建对象

  1. 既存型别
  2. 自定义型别

三、存储

  1. 寄存器:速度最快,位于处理器内部。但寄存器个数有限,由编译器根据本身的需求适当的分配使用,(对一个程序员来说)基本是一个感觉不到的存在。
  2. Stack(栈):位于一般的RAM(random-access memory,随机访问内存)中。处理器经由其指针提供直接的支持,分配新内存时指针后后移,释放内存时,指针前移。效率仅次于寄存器。Java编译器负责产生"控制指针移动"的程序代码,所以它必须能够完全掌握它所编译的程序中"存在stack里所有数据的实际大小和存活时间"。如此便限制了程序的弹性,也因此,我们只能将对象的reference存储于stack内,但却不能将一般的Java对象也置于其上。
  3. Heap(堆):Heap是一种通用性质的内存存储空间(存在RAM中),用来放置所有的Java对象,使用关键词new,便会自Heap分配空间。Heap分配的空间具有高度的弹性。但是从Heap分配空间比从stack分配所花费的时间多了不少。
  4. 静态存储空间(Static storage):存在于RAM里,该空间存放着"程序执行期间"一直存在的数据。使用关键词static,可以将某个对象内的特定成员设为静态,但Java对象本身绝无肯能置于静态存储空间中。
  5. 常量存储空间(Constant storage):常量值常会被直接置于程序代码里,也可以放到唯读内存(read-only memory,ROM)中。
  6. Non-RAM存储空间:若数据完全存活于程序之外,那么即使程序不执行,数据也能够继续存在,脱离程序的控制。streamed objects(串流化对象)和persistent objects(持久化对象)便是主要的两个例子。它们能够将对象转换为可存储与其他媒介的形式,并在必要时将所存储的数据还原成可存储与RAM中的一般对象。

四、基本型别(基本数据类型)

  1. 不使用new分配空间,产生一种变量(automatic),不是reference形式,此类变量直接存放数据值,并置于stack
  2. 每种基本型别都有其对应的外覆型别(包装类),用来操作由基本型别产生的对象,或用在Heap内产生代表该基本型别的非原始对象

五、高精度数值

  1. java.math.BigInteger:支持任意精度的整数
  2. java.math.BigDecimal:提供任意精度的定点数

六、Java中的数组

  1. Java语言的数组其实就是一块内存而已。Java保证数组一定会被初始化,而且程序员对数组的访问无法逾越范围(代价:每个数组得额外多出一点空间,并且得在执行时期对数组索引值进行检查)
  2. 当你产生某个存储对象的数组时,真实产生的其实是个存储references的数组。此数组建立后,其中每一个references皆会被自动设为某个特殊值。该值以关键字null表示。当Java看到null值时,便将这个referebnces视为"不指向任何对象"。使用任何reference之前,必须将某个对象指派给它,若某个reference的值为null,便会在执行期发生错误。数组也可以存储基本型别,编译器一样保证初始化动作的必然进行:这次它会将数组所占的内存全部清为零。

七、作用域(scope)

八、对象的生存周期

  1. 使用new来产生一个Java对象,即便离开了作用域(生存空间),该对象依然存在。
{
  String s=new String(" a string");
}/*end of scope*/

  2. s这个reference将在作用域之外消失,但是,s先前所指的那个String对象,仍然会继续占用内存。

  3. 不过Java有所谓的"垃圾回收器(garbage collector)"机制,它会逐一检视所有通过new所产生的对象,并在这些对象不再被引用时,"垃圾回收器"便释放这些对象的内存。因此你

    不必关心内存回收问题,只要关心对象的产生就好。所有对象,在你不需要的时候就会自动消失。

九、建立新的数据型别(class)

  1. 使用class关键字定义类
  2. 使用new关键字产生此类对象

十、数据成员(fields)和函数(methods)

  1. 数据成员可以是任何类型的对象,只要你通过reference来和它沟通就行。数据成员也可以是基本型别(不具备reference者)
  2. 每一个对象都持有用来存储数据成的空间;不同的对象彼此之间并不共享数据成员
  3. 基本成员(boolean,int...等基本型别)的缺省值

十一、方法,参数,返回值

十二、static关键字

  1. 无论产生了多少个对象,或不存在任何对象的情形下,那些特定数据的存储空间都只有一份(例:Java中的mian方法)
  2. 某个函数不要和class object绑在一起
  3. 可以通过对象来调用静态变量/方法
  4. 可以通过类名来调用静态变量/方法
class StaticTest{
  static int i=0;  
 public static void main(Stringp[] args){
    StaticTest st_1=new StaticTest();
    StaticTest st_2=new StaticTest(); System.out.println(st_1.i==st_2.i);  //true
    System.out.println(st_1.i==StaticTest.i);    //true
  } }

十三、编译与执行

十四、注解及内嵌式文档

十五、javadoc

  1. Netbeans可以自动构建和官方文档相似的javadoc

十六、编码风格

 

posted @ 2016-07-04 14:11  DeadGhost  阅读(197)  评论(0编辑  收藏  举报