JAVA系列讲座2(基础篇之面向对象编程)JAVA系列讲座 基础篇之面向对象编程 书写本篇的前提是读者已经有的一定的其它语言编程经验和面向对象编程的基本概念。相信这个要求对我们LINUXAID网的所有读者都不过分。 类的声名和实例化 一个最简单的JAVA类是这样的一个空类:
更复杂的类包括一些类的数据成员和方法,JAVA还支持类内内嵌类的定义,这种技术我们将在以后的章节中予以讨论。 声明一个对象变量的方法如下:
上面的声明仅仅是为对象声明的一个名称,并没有为该对象分配内存和其它资源。也就是说,这种变量的声明仅仅是创建了一个名字为myObject的类MyClass的一个引用,要使变量myObject真正的表达一个对象,必须对它进行实例化,实例化的方法如下:
注意,上面的声明和实例化过程可以合在一起,即:
您可能马上就发现,实例化过程实际上是调用了一个方法MyClass()。是的,这就是类的构造方法,执行了构造方法,虚拟机就已经为该类实例化了一个对象,这样以后的代码中就可以用“.”方法调用已经声明的对象中的可见成员变量和方法了。同C++不同,JAVA类不需要显式的释放。因为JAVA虚拟机会自动的收集无用的单元。在后面的高级主题中,我们将对虚拟机的这种功能的优缺点进行细致的探讨。 数据成员 前面已经提到,JAVA的类中可以包含数据成员和方法。下面是一个只包含数据成员的类:
类的成员可以是任意数据类型(基本类型,组合类型和对象)要访问数据成员,必须首先创建类的实例,再用“.”运算符访问。 类的方法 JAVA中没有独立的函数和过程,所有的子程序都作为类的方法来定义。下面是增加了speak()方法的DogClass类:
注意:JAVA中,方法的实现部分直接接到定义之后;必须为方法指定返回的类型和参数;方法的调用方式与成员变量的调用方式相同。 构造方法与finalizer 构造方法名和类名是相同的,而且这个方法没有任何返回值。构造方法为类分配其所需的全部资源,并返回对象的一个实例。使用new运算符的时候就是在调用构造方法。 JAVA中没有同构造方法相对应的析构方法,垃圾对象的清理工作由虚拟机来完成。但是,我们无法预测虚拟机将在什么时候清理一个垃圾对象,例如,当我们需要确认一个在生命周期内打开了一个文件的对象是否在对象释放前将该文件正确关闭,这时finalizer方法就发挥作用了,我们可以通过在finalizer方法中加入文件关闭代码来保证文件的彻底释放。但是,虚拟机上的垃圾收集是优先级很低的线程,所以无法预测其何时清除对象,所以建议不要将时间敏感的代码加入finalizer方法中。 类的继承 JAVA中类的继承通过关键字extends实现。下面是一个类继承的实例:
JAVA中,类的公共祖先是Object类。JAVA是单继承的,这样就避免了因为复杂的继承关系造成的结构混乱问题。但是,很多时候,多重继承由是必需的,JAVA语言通过接口(interface)模拟了多继承的特性。后面将对接口进行介绍。 如果您不显式地调用父类的构造方法,JAVA将自动在子类构造方法的第一行调用缺省的构造方法。唯一避免的办法是在子类构造方法的第一行调用父类的一个构造方法。开发人员可能经常要显式地调用超类的构造方法,为了实现这个目的,JAVA提供了一个关键字super。super()能够调用具有相应参数的父类构造方法。如果创建了不只一个构造方法(这是“方法重载”要涉及的问题),肯定不想重复相同的代码,这样,您可以设计一个公共的构造方法,然后通过其它构造方法中通过this()调用公共构造方法。 访问修饰符 JAVA类成员有四个不同的访问修饰符:private,protected,public和default(可以不写)。下面是对这些访问修饰符的说明: 从同一个包中访问 访问修饰符 继承 访问
|