Java语言开发技术博大精深,能够应用于多个领域。正是因为如此,一直深受广大程序员的喜爱。作为一名初学者,肯定会在学习过程中遇到很多疑问和困惑。在本节的内容中,笔者将自己的心得体会告诉大家,帮助读者解答困惑问题。
面向对象之父Alan Kay曾经总结了第一个成功的面向对象语言的5个基本特性,这同时也是Java语言所具备的5个基本特性,这些特性表现了一种纯粹的面向对象程序设计方式。
(1)万物皆为对象。将对象视为奇特的变量,它可以存储数据,除此之外,你还可以要求它在自身上执行操作。
(2)程序是对象的集合,它们通过发送消息来告知彼此所要做的。要想请求一个对象,就必须对该对象发送一条消息。也就是说,可以把消息想像为对某个特定对象的方法的调用请求。
(3)每个对象都有自己的由其他对象所构成的存储。换句话说,可以通过创建包含现有对象的包的方式来创建新类型的对象。因此,可以在程序中构建复杂的体系,同时将其复杂性隐藏在对象的简单性背后。
(4)每个对象都拥有其类型,在Java程序中,需要将每个对象都表示成某个类(class)的一个实例(instance),这里“类”就是“类型”的同义词。每个类区别于其他类的特性就是“可以发送什么样的消息给它”。
(5)某一特定类型的所有对象都可以接收同样的消息。例如“圆形”类型的对象同时也是“几何形”类型的对象,所以,一个“圆形”对象必定能够接收发送给“几何形”对象的消息。这意味着可以编写与“几何形”交互并自动处理所有与几何形性质相关的事物的代码。这种可替代性(substitutability)是OOP中最强有力的概念之一。
另一位名叫Booch的大师针对对象提出了一个更加简洁的描述:对象具有状态、行为和标识。这意味着每一个对象都可以拥有内部数据(它们给出了该对象的状态)和方法(它们产生行为),并且每一个对象都可以唯一地与其他对象区分开来,具体说来,就是每一个对象在内存中都有一个唯一的地址。
(1)学得要深入,基础要扎实。
基础的作用不必多说,在大学课堂上曾经讲过了很多次,在此重点说明“深入”。职场不是学校,企业要求你能高效地完成项目功能,但是现实中的项目种类繁多,我们需要从基础上掌握Java技术的精髓。走马观花式的学习已经被社会所淘汰,入门水平不会被开发公司所接受,他们需要的是高手。
(2)恒心,演练,举一反三。
学习编程的过程是枯燥的,我们需要将学习Java当成是自己的乐趣,只有做到持之以恒才能有机会学好。另外,编程最注重实践,最害怕闭门造车。每一个语法,每一个知识点,都要反复用实例来演练,这样才能加深对知识的理解。要做到举一反三,只有这样才能对知识有深入的理解。
在Java的众多突出特性之中,垃圾回收机制是它最具代表性的一个。在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其他对象;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾,JVM的一个系统级线程会自动释放该内存块,垃圾收集意味着程序不再需要的对象是“无用信息”,这些信息将被丢弃。当一个对象不再被引用时,内存回收它占领的空间,以便空间被后来的新对象使用。事实上,除了释放没用的对象,垃圾收集也可以清除内存记录碎片。由于创建对象和垃圾收集器释放丢弃对象所占的内存空间,因此,内存会出现碎片。碎片是分配给对象的内存块之间的空闲内存洞。碎片整理将所占用的堆内存移到堆的一端,JVM将整理出的内存分配给新的对象。
垃圾收集能自动释放内存空间,减轻编程的负担,这使Java虚拟机具有一些优点。首先,它能使编程效率提高。在没有垃圾收集机制的时候,可能要花许多时间来解决一个难懂的存储器问题。在用Java语言编程时,靠垃圾收集机制可大大缩短时间。另外,它保护程序的完整性,垃圾收集是Java语言安全性策略的一个重要部分。
垃圾收集的一个潜在的缺点是它的开销影响程序性能。Java虚拟机必须追踪运行程序中有用的对象,而且最终释放没用的对象。这一个过程需要花费处理器的时间。另外,垃圾收集算法的不完备性,使得早先采用的某些垃圾收集算法不能保证100%收集到所有的废弃内存。当然,随着垃圾收集算法的不断改进以及软、硬件运行效率的不断提升,这些问题都可以得到解决。