JAVA编程思想(1) - 一切都是对象

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

1. 用引用操纵对象

每种编程语言都有自己的数据处理方式。有些时候,程序员必须时刻留意准备处理的是什么类型。您曾利用一些特殊语法直接操作过对象,或处理过一些间接表示的对象吗(C或C++里的指针)?

所有的这一切在JAVA里都得到了简化。在JAVA里一切都被视为对象,尽管是一切都被看成对象,但操纵的标识符实际上是一个“引用”而已,简单来说是:对象好比”电视“,我们拥有的引用是"遥控器",因此我们即使没有对象的真实存在,我们也可以拥有引用,也就说你可以拥有一个引用,而它并不需要和一个对象关联

如: String s;

我们这里创建的只是引用,并不是对象,如果此时向s发送一个消息,就会返回一个运行错误,因为没有真正的对象与它关联,因此一个安全的做法是:创建一个引用同时进行初始化。

如: String s = "haha";

这里用到了Java语言的一个特性:字符串可以用带引号的文本初始化,通常,必须对“对象”采用一种更通用的初始化方法。

2. 必须由你创建所有的对象

(1) 一旦创建一个引用,就希望它能与一个新的对象相关联。通常用new操作符来实现这一目的。

如: String s = new String("haha");

----------------------------------------------------------------------------------------------------------------------------------------------------

(2) 程序运行时,有五个不同的地方可以储存数据

-寄存器:这是最快的存储区,因为它位于不同于其他储存区的地方——处理器内部。但是数量有限,所以需要进行分配。无法直接控制(另一方面,C和C++允许你向编译器建议寄存器的分配方式)

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

-堆:一种通用的内存池(也位于RAM),用于存放所有的对象。堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间。因此有更多的灵活性,可以方便创建对象。但是因此付出的代价是:用堆进行存储分配和清理可以比用堆栈分配更需要时间(如果确实可以在Java中像在C++一样在栈中创建对象)

-常量存储:常量值通常直接存放在程序代码内部,这样做很安全,因为它永远不会被改变

-非RAM存储:如果数据完全存活在程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。其中两个基本的例子是流对象和持久对象。在流对象中,对象转化成字节流,通常被发送到另一台机器。在持久化对象中,对象被存放在磁盘上,因此即使程序终止了,它们仍然保持自己的状态。正如Java提供的对轻量级持久化的支持

----------------------------------------------------------------------------------------------------------------------------------------------------

(3) 特例:基本类型

-在程序设计中经常用到一系列类型,它们需要特殊对待,可以把他们想象成“基本”类型。之所以特殊对待,是因为new将对象存储在“堆”里,故用new创建一个对象——特别是小的,简单的变量。往往不是很有效。因此,对于这些类型,Java采用和C和C++相同的方法,也就是不用new来创建变量,而是创建一个并非是引用的“自动”变量。这个变量直接存储“值”并置于堆栈中,因此更加有效

-Java要确定每种基本类型所占存储空间的大小,它们的大小并不像其他大多数语言那样随机器硬件架构的变化而变化这种所占空间大小的不变性是Java程序比其它大多数语言编写的程序更具可移植性的原因之一。

----------------------------------------------------------------------------------------------------------------------------------------------------

(3) Java中的数组

-几乎所有的程序设计语言都支持数组,在C和C++中使用数组是危险的,因为C和C++中数组就是内存快。如果一个程序要访问其内存块之外的数组,或在数组初始化前使用内存,都会产生难以预料的后果。

-Java的主要目标之一是安全,所以Java确保数组会被初始化,而且不能在它的范围之外被访问。这种范围检查,是以每个数组上少量的内存开销及运行时的下标检查为代价换来安全性和效率的提高。

-当创建一个数组对象时,实际上就是创建一个引用数组,而且每个引用都会自动被初始化为一个特定值,该值拥有自己的关键字null。一旦Java看到null,就知道这个引用还没有指向某个对象,试图使用一个null引用是会造成运行错误的。对于基本类型的数组,Java会为这种数组所占的内存全部置0

3. 永远不需要销毁对象

-大多数的程序设计语言中,变量的生命周期的概念,占据了程序设计工作中非常重要的部分。

(1) 作用域

作用域决定了在其内定义的变量名的可见性和生命周期。在C和C++以及Java中,作用域由花括号决定的。

{
    int x = 12;
    // only x available
    {
         int q = 36;
         //both x & q available
    }
    //only x available
    // q is "out of scope"
}

还有在Java中不允许重命名

{
    int x = 12;
    {
         int x = 96;   //  Illegal
     }
}

(2) 对象的作用域

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

{
    String s = new String("a string");
} // End of scope

引用s在作用域终点就消失了。然后,s指向的String对象仍继续占用内存空间。我们无法在作用域之后访问消失的对象引用。

-事实证明,由new创建的对象,只要你需要,就会一直保留下去。这样,许多C++编程问题在Java就完全消失了。我们不必在像在C++一样:实时关注我们的对象。在Java中有一个“垃圾回收器”来监视用new创建的对象,一旦不再需要了,它们就会被回收。这样做就消除了这类编程问题(即:内存泄露)。

JAVA编程思想(1) - 一切都是对象

时间: 2024-08-09 21:49:32

JAVA编程思想(1) - 一切都是对象的相关文章

Java编程思想 2-1 一切都是对象

尽管 Java 是基于 C++ 的,但是相比之下,Java 是一种更纯粹的面向对象程序设计语言. 在本章,将看到 Java 程序的基本组成部分,并体会到在 Java 中几乎一切都是对象. 2.1 用引用操纵对象 Java 中通过引用(遥控器)操纵对象(电视机). 引用可以独立存在,并不一定需要有一个对象与之关联.比如:String s; 这里创建的只是引用,而不是对象.如果此时向 s 发送消息,就会返回一个运行时错误.因为此时 s 实际上没有和任何事物关联. 因此,一种安全的做法是:创建引用的同

Java编程思想总结(一)对象导论

Java编程思想总结(一)对象导论 1.1 抽象过程 万物皆对象. 程序是对象的集合(即:类),他们通过发送消息(调用方法)来告知彼此要做的. 每个对象都有自己的由其他对象所构成的存储(引用其他对象或基本类型,即组合). 每个对象都拥有其类型.每个类最重要的区别于其他类的特征就是“可以发送什么样的消息给它”(即调用方法). 某一特定类型的所有对象都可以接受同样的消息. 对象具有状态(成员属性).行为(成员方法)和标识(引用的名称).每个对象在内存中都有唯一的一个地址. 1.2 每个对象都有一个接

JAVA编程思想学习笔记——第一章 对象导论

搞了一年多java,野路子出身,发现java基础这块还是相当的薄弱!故决定学习<Java编程思想>这本书.在此把学习的知识点记录下! 面向对象的五大特性 1.万物皆为对象 2.程序是对象的集合,它们通过发送消息来告诉彼此所要做的 3.每个对象都由自己的由其它对象所构成的存储 4.每个对象都拥有其类型 5.某一特定类型的所有对象都可以接收同样的信息  单根继承结构 所有的类都继承自单一的基类,Object.在单根集成结构中的所有对象都具有一个公用接口,所以他们归根到底都是相同的基本类型.单根集成

java 编程思想 一 第二章(对象)

上班之余发现有很多空闲时间,享受生活 又觉得有点空虚,而且对自己的基础知识总觉得掌握的不是很牢固,有点似懂非懂的感觉,近来刚好有时间,所以就考虑继续学习,然后再经过考虑和各大博主推荐选择了<java编程思想>这本书,在此分享学习心得跟大家共勉,也算是对自己的监督吧.(本内容需要有一定的基础才能看,类似于基础回顾,强化理解,新手可能有些地方不太能听懂) 一.什么是对象? 这并不是我们男女朋友那种对象哈哈. 简言之:万事万物皆对象. 个人理解:我们所要处理的事务或者建立的某种模型的抽象总结.具体就

Java编程思想(第十一章持有对象)

1. 第11章 持有对象 java通过使用容器类来储存对象,与普通数组不同的是,普通数组的长度不可变. 1.1. 泛型与类型安全的容器 使用预定义的泛型,它指定了这个容器实例可以保存的类型,通过使用泛型,就可以在编译器防止将错误类型的对象放置到容器中. public class gerbil { private int gerbilNumber; public gerbil(int gerbilNumber){ this.gerbilNumber = gerbilNumber; } public

Java编程思想 - 第11章 持有对象

· 容器类: 1. Collection: List, Set, Queue 2. Map · List<Apple> apples = new ArrayList<Apple>(); 这种方式并非总能奏效,因为某些类具有额外的功能,例如,LinkList具有在List接口中未包含的额外方法,而TreeMap也具有在Map接口中未包含的方法.如果你需要使用这些方法,就不能将它们向上转型为更通用的接口. · Collection.addAll()成员方法只能接受另一个Collecti

Java编程思想(十六) —— 联系JVM再谈Class

编程思想这个专栏停了好久了,主要是把精力放在了其他知识上,现在继续补上. 前面两篇写到RTTI和简单的反射介绍,先回顾一下: RTTI,运行时类型信息,多态的应用,类型转换其实是发生在运行期间. Class对象: 编程思想讲到的定义,Java使用Class对象来执行其RTTI,类是程序的一部分,每个类都有一个Class对象,其实每编写和编译一个新类,就会产生一个Class对象,其实这个对象时被保存在同名的.class文件中的.生成这个类对象,其实是JVM(Java虚拟机)使用了"类加载器&quo

Java编程思想 4th 第2章 一切都是对象

Java是基于C++的,但Java是一种更纯粹的面向对象程序设计语言,和C++不同的是,Java只支持面向对象编程,因此Java的编程风格也是纯OOP风格的,即一切都是类,所有事情在类对象中完成. 在Java中,使用引用来操纵对象,在Java编程思想的第四版中,使用的术语是"引用(reference)",之前有读过Java编程思想第三版,在第三版中,使用的术语是"句柄(handle)",事实上,我觉得第三版的术语"句柄"更加形象传神,就像你用一个

Java编程思想(一)——一切都是对象

<Java编程思想> 作者:Bruce Eckel 虽然这本书是经典,但是对于一个入门java,又没有其他编程经验的人来讲,实在难以看懂,前前后后看了三遍. 第一次什么都不懂的时候硬着头皮看,没看完,看了前面忘了后面,中间很多看不懂.第二次的时候,看懂了很多,但是不知道经典在何处. 第三次,是自己用了这门语言一年后,知道所谓的经典是什么,java的特性都在这里,这书不是从基础的JDK怎么装开始讲起.,大部头的一本书,现代人的话很少去翻了,其实可以当参考书,看哪一部分忘了,直接温故即可.一次在学