Thinking in Java 第二章学习笔记

  Java虽基于C++,但相比之下,Java是一种更加纯粹的面向对象程序设计语言。

  在Java的世界里,几乎一切都是对象,而Java中的全部工作则是定义类,产生那些类的对象,以及发送消息给这些对象。

  尽管一切皆称对象,但我们真正操纵的确是对象的引用,好比电视机为对象,遥控器则为引用,你若想在房间里边走边操控电视,只需带着遥控器这个引用,不必带着电视这个对象。另外,引用可以单独存在,并不需要有对象与之相关联。如创建String s,则创建了一个String引用,但此时如果向这个引用发送消息,就会返回错误,这是因为s并没有和任何对象相关联。因此,比较安全的做法是创建一个引用的同时便进行初始化。当在创建引用时,其实我们是迫切希望它能与一个新的对象相关联的,即对象的实例化。

  本章重点:

  1、程序运行时,具体内存分配情况分以下五种

  1)寄存器:最快的存储区,位于处理器内部,数量有限,只能根据需求自动分配,不能加以控制,程序中看不到其任何迹象。(C、C++可以向编译器提供寄存器的分配方式)

  2)栈:位于通用RAM(随机访问存储器),通过栈指针的上下移动实现内存的释放与分配。Java系统必须知道所有存储在栈中数据的生命周期,以便指针的上下移动。十分限制程序的灵活性。对象引用存在堆栈,而对象存在于堆中。

  3)堆:也位于RAM,一种通用的内存池。用于存放所有的Java对象,堆不同于堆栈的好处在于堆不需要知道存储的数据的生命周期,大大提高了灵活性。代价:清除与存储分配需消耗更多的时间。

  4)常量存储:常量值通常保存在程序的内部,但是再嵌入式系统中,常量本身回合其他部分分隔开,故选择保存在只读存储器中。

  5)非RAM存储:如果数据完全存在于程序之外,那将不会受程序的任何控制,在程序没有运行时也可以存在。两个例子:流对象中将对象转化为字节流,发送到另一台机器;持久化对象中将对象存放于磁盘上。

  2、基本类型所占存储空间的大小

  各基本类型固定大小。不像大多数语言那样随着机器硬件架构的变化而变化,这种固定性是Java移植性好的重要原因。

  3、永远不要销毁对象

  Java中的垃圾回收器,时刻监视用new创建的所有对象,并辨别那些不会再被引用的对象,随后释放这些对象的空间,供新对象使用。

  4、变量初始化

  当变量作为类的数据成员时,Java会给定其默认值,确保其初始化,以防程序错误。而对于非类中成员的其他变量来说,并不会自动初始化,必须对其赋值。

  5、static

  通常来说,当创建类时,局势在描述那个类的对象的外观和行为。除非用new创建那个类的对象,否则实际上并未获得任何对象。只有在执行new来创建对象时,数据存储空间才被分配,其方法才供外界调用。还有两种情形是以上方法解决不了的,一种是只想为特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不用去创建任何对象。另一种情形是,希望某个方法不与包含它的类的任何对象产生关联。通过static关键字可解决这两种需要。当声明一个事物是static时,就意味着这个域或者方法不会被包含它的类的所有对象关联在一起。也就是说,即便没有创建这个类的任何对象,也可以调用这个static方法或者static域。

  6、Java中堆和栈的区别

  堆:主要用于存放对象,存取速度慢,可以运行时动态分配内存,生存周期不需要提前确定。

  栈:主要用于存放基本数据类型的变量以及对象的引用变量,变量出了作用域就会自动释放。栈的内存管理是通过栈的"后进先出"模式来实现的。存取速度快,大小和生存周期必须确定,缺乏灵活性。

  

上一篇:C++ 二维数组作为形参传递使用实例


下一篇:利用php调用so库文件中的代码