一个人至少拥有一个梦想,有一个理由去坚强

心若没有栖息的地方,到哪里都是在流浪

java编程思想——第二章一切都是对象

“如果我们说另一种不同的语言,那么我们就会发觉一个有些不同的世界。”

——Luduing Wittgerstein

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

2.1 用引用操纵对象

java中一切被视为对象。尽管一切都看作对此,但操纵的标识符实际上是对象的一个“引用”(reference)。例如:

String s;

这里创建的只是引用,并不是对象。如果向s发送一个消息,就会返回一个运行时错误。因此,安全的做法是,创建一个引用的同时便进行初始化。

String s = "hello world";

2.2 必须由你创建所有对象

通常用new操作符来创建对象。

2.2.1 存储到什么地方

1)寄存器。这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量及其有限,所以寄存器根据需求进行分配。

2)堆栈

位于通用RAM(随机访问存储)中,但通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若向下移动,则分配新的内存,若向上移动,则释放那些内存。这是一种快速有效的分配内存的方法,仅次于寄存器。

Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在堆栈中分配,也就是说在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)而已。

3)堆。一种通用的内存池(也位于RAM区),用于存放所有的java对象。堆不同于堆栈的好处是:编译器不需要知道存储的数据是在堆里存活多长时间。因此,在堆里存放内存有很大的灵活性。当需要对象,用new创建,当执行代码时,会自动在堆里进行存储分配。当然,为这种灵活性必须付出相应代价:用堆进行存储分配和清理可能比用堆栈进程存储分配需要更多的时间。

4)常量存储。常量值通常直接存储在程序代码内部,这样做是安全的,因为常量永远不会被改变。

5)非RAM存储。如果数据完全存活于程序之外,那么它可以安全不受程序的任何控制,在程序没有运行时也可以存在。其中两个基本的例子是流对象持久化对象。在流对象中,对象转化成字节流,通常被发送给另一台机器。在“持久化对象”中,对象被存放于磁盘上,因此,即使程序终止,它们仍然可以保持自己的状态。这种存储方式的技巧在于:把对象转化成可以存放在其他媒介上的事物,在需要时,可以恢复成常规的、基于RAM的对象。java提供了对轻量级持久化的支持,而诸如JDBC和Hibernate这样的机制提供了更加复杂的对在数据库中存储和读取对象信息的支持。

2.2.2 特例:基本类型

基本类型:不用new来创建变量,而是创建一个并非是引用的“自动”变量。这个变量直接存储“值”,并置于堆栈中,因此更加高效。

java的基本类型总结为:四类八种。

《java编程思想——第二章一切都是对象》

boolean类型所占存储空间的大小没有明确指定,仅定义为能够取其字面值true和false.

基本类型具有包装器类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。例如

char c = 'x';
Character ch = new Character(c);

也可以这样用:

Character ch = new Character('x');

javaSE5的自动包装功能将基本类型转换为包装类型。包装基本类型原因后续章节再讲解。

高级精度数字

java提供两个高精度计算的类:BigInteger 和 BigDecimal.二者没有对应的基本类型,两个类包含的方法,提供的操作与基本类型所执行的操作相似。

2.2.3 java中的数组

当创建一个数组对象时,实际上就是创建一个引用数组,并且每个引用都会自动被初始化为一个特定值,该值拥有自己的关键字null。

2.3 永远不要销毁对象

2.3.1 作用域

作用域决定在其定义的变量名的可见性和生命周期。作用域由华括号位置决定。注意在java中不能这样写:

{
   int c = 2;
  {
     int c = 5;
  }
}

上述编译器会报告变量已经定义过。

2.3.3 对象的作用域

java对象不具备和基本类型一样的生命周期。当用new创建一个java对象时,它可以存活于作用域之外。

 

{
  String s = new String("hello world");
  // end of scope
}

引用s在作用域终点就消失了。然而,s指向的String对象仍继续占据内存空间。在这段代码中,无法在作用域之后访问这个对象,因为它唯一的引用已经超出作用域范围。

事实证明,由new创建的对象,只要你需要就会一直保留下去。java中有一个垃圾回收器,用来监视用new创建的所有对象,并辨别那些不会再被引用的对象。随后,释放这些对象的内存空间,以提供其他新对象的使用。

后面大致介绍了,类、字段、方法、方法参数和返回值,因为讲解比较大概,这里就不一一抽取出来了。

2.3.6 static关键字

由类的创建而创建,可以在不创建任何对象的前提下直接调用它。

java注释:行内注释 //,块级注释/*  — */ ,文档注释 /** — **/。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注