一切都是对象 《Thinking in java》
尽管java是基于c++的,但是相比之下,java是一种更 ‘纯粹’的面向对象程序设计语言。
- 用引用操纵对象
书中用一个遥控器形象的讲述了引用操作对象,我用一个示例标识如此。当我需要联系某个人时我可以用new 返回这个对象的引用 如何用user 遥控器给他发消息 ,对他进行操作。即即使他没在我身边,user也可以单独存在。
User user = new User();
//User 对象 , user 对象的引用 , new User(); 产生一个新对象,返回该对象的引用
因此,如果像操作一个词或者一个句子,则可以创建一个String 引用;
String s;
但是这里只是创建一个引用 , 并不是对象 。如果此时对s发送一个消息就会返回一个运行时错误,这是因为s没有和任何事务相关联。因此安全的方式是创建一个引用是便对他初始化。
String s = 'hello world' ;
-
必须由你创建所有对象
一旦创建了一个引用便希望他与一个新的对象相关联。通常用new操作符来实现。new的意思就是‘给我一个新对象’。 所以前面的例子可以写成String s = new String (“hello world”);
这不仅表示“给我一个新的字符串,而且给出了怎样产生这个字符串的信息。
当然除String 类型外 java还提供了大量过剩类型 。例如 int ,。。 -
存储到什么地方
程序运行时, 对象是如何放置安排,特别是内存如何分配。有五个地方可以存储数据1.寄存器:最快的存储区,因为它和其它存储器位于不同位置——处理器内部。缺点是其数量极其有限,需要按需分配。不能被你控制和察觉(就是不用管)。
2.堆栈:一般就叫栈。位于通用RAM(随机访问存储器)中。可以通过堆栈指针从处理器那里获得直接支持(堆栈指针向下移动,分配新内存;向上移动,释放那些内存)。是仅次于寄存器的快速有效的分配存储方法。创建程序时,java系统必须知道存储在栈内所有项的确切生命周期,以便上下移动堆栈指针。这约束了程序的灵活性,所以像对象引用存在这里,但对象本身并不存在这里。
3.堆:一种通用内存池(也位于RAM区),用于存放所有Java对象。堆不同于栈的好处:编译器不需要知道存储的数据在堆里存活多长时间,因此在堆里分配存储有很大的灵活性。当需要一个对象,new一下就会在堆里进行存储分配。这种灵活性所付出的代价:用堆进行存储分配和清理可能比用栈需要更多时间(要是java可以在栈中创建对象)。
4.常量存储:常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。
5.非RAM存储:如果数据存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。比如流对象和持久化对象。在流对象中,对象被转换成字节流,通常被发送给另一台机器。在持久化对象中,对象被存放在磁盘上,因此即使程序终止它们仍可以保持自己的状态。这种存储方式的技巧在于:把对象转换成可以存放在其他媒介上的事物,在需要时可以恢复成常规的,基于RAM的对象。java提供了对轻量级持久化的支持,而诸如JDBC和Hibernate这样的机制提供了更加复杂的对在数据库中存储和读取对象信息的支持。