《java编程思想》一切都是对象

1. 用引用操纵对象

  在Java中一切皆对象,我们平常在对java中的类进行操作时,其实操作的不是对象本身而是对象的引用。我们可以将这想象成用遥控器(引用)操作电视机(对象),只要握住这个遥控器,就能保持与电视机的连接,当想换频道时,实际操作的是遥控器(引用),然后再由遥控器操作电视机(对象)。如果想在房间里面走走,并且想操作电视机,这时候只需要带上遥控器(引用)就可以了,并不需要电视机(对象)。

  此外,即使没有电视机,遥控器也可以单独存在,也就是说,你拥有一个引用,并不一定需要有一个对象与它关联。

  如果想操作一个词或者句子,可以创建一个String引用,String s;   tip: 这里创建的只是一个引用,并不是对象,如果现在向 S 发送一个消息,就会返回一个运行时错   误。

  在使用任何引用前,必须为其指定一个对象,如果想使用还是一个 null 的引用,在运行时将会报错

2. 对象存储在什么地方

  寄存器:这是最快的存储区,因为它位于不同于其他其他存储区的地方---处理器内部。但是寄存器的数量有限,所以寄存器根据需求进行分配。寄存器不能直接控制,      也不能在程序中感觉到任何存在的迹象

  堆栈: 位于通用RAM(随机访问存储器)中,但通过堆栈指针可以从处理器那里获得支持。堆栈指针若向下移动,则分配新的内存,若向上移动,则释放那些内存,这是      一种快速有效的分配存储方式,仅次于寄存器。创建程序时,java系统必须知道存储在堆栈内所有项的确切声明周期,以便上下移动堆栈指针。这个约束限制了     程序的灵活性,所以虽然某些java数据存储在堆栈中,特别是对象引用,但java对象并不存储在堆栈中。

  堆: 一种通用的内存池,用于存放所有的Java对象,堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间,因此,在堆里分配存储有很大的灵活    性。当需要 一个对象时,只需要用 new 写一行简单的代码,当执行这行代码时,会自动在堆里进行存储分配 。但是,用堆进行存储分配和清理可能比堆栈进行存    储分配需要更多的时间

  常量存储: 常量池

3. 特例:基本类型

基本类型 大小 最小值 最大值 包装器类型 字节
byte 8 bits -128 127 Byte 1 字节
short 16 bits -2的15次方 2的15次方减1 Short 2字节
int 32 bits -2的31次方 2的31次方减1 Integer 4字节
long 64 bits -2的63次方  2的63次方减1 Long 8字节
float 32 bits 2的-149次方 2的128次方减1 Float 4字节
double 64 bits 2的-1074次方 2的1024次方减1 Double 8字节
boolean --  --  -- Boolean 1字节
char 16 bits  --  -- Character 2字节

4. 永远不需要销毁对象

    在java中由new创建的对象,只要需要就会一直存在,但是如果让对象继续存在,就会造成对象填满内存空间,进而影响程序的运行。所以在Java中有一个垃圾回收器,用来监视所有用new创建的对象,并识别出不再使用的对象,随后,释放这些对象的内存空间,供其他对象使用。

5. 创建新的数据类型:类

基本类型 默认值
boolean false
char '\uooo'(null)
byte (bye)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d

    当变量作为类的成员使用时,java会赋给基本类型一个默认值,确保他们会执行初始化。但是这个方法不适用于局部变量。如果在某个方法中定义了一个局部变量X;  那么X得到的可能是任意一个值,并且不会被自动初始化。所以在使用局部变量前,应该先赋予一个适当的值。

6. 方法、参数和返回值

  方法的参数列表指定要传递给方法什么样的信息,这些信息像java中其他信息一样,采用的都是对象形式,因此在参数列表中必须指定每个所传递对象的类型和名字。  并且像java中任何传递对象的场合一样,这里传递的也是引用。

  值传递:就是在方法调用的时候,实参是将自己的一份拷贝赋给形参,在方法内对参数的值进行修改不影响原来实参的值

  引用传递:就是在方法调用的时候,实参将自己的地址传递给形参,在方法内对参数的修改实际上是对该实参的实际操作。

猜你喜欢

转载自www.cnblogs.com/zhangchu/p/12534793.html