资源预览内容
第1页 / 共21页
第2页 / 共21页
第3页 / 共21页
第4页 / 共21页
第5页 / 共21页
第6页 / 共21页
第7页 / 共21页
第8页 / 共21页
第9页 / 共21页
第10页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第4章 类 与 对 象 类与对象是进行面向对象编程的基础。类是具有相 同属性特征和行为规则的多个对象的一种统一描述 ,对象是对类的实例化。在Java语言中,类是一种最 基本的复合数据类型,是组成Java程序的基本要素。 下面详细介绍Java语言中有关类与对象的定义方法。4.1 从创建开始 面向对象的编程从创建类开始。创建了类,才谈得 上封装、继承、多态,才能实例化生成对象。类的 整体结构主要包括声明和类成员两大部分。本节详 细介绍如何声明类及类成员的访问控制。4.1.1 声明类 要使用一个类,必须先对其进行声明。声明类就是创建 一种新的数据类型,利用声明的类可以定义类实例,也 就得到了一个对象。声明类的语法如图4.1所示。 下面对声明类中的一些细节作一下详细说明。从本质上 讲,类是一种复合数据类型,类似面向过程语言中的结 构体。类的定义主要包括声明和类主体两部分。类名必 须符合Java标识符的规定,并且应该符合一定的编码规范 ,使程序具有很好的编程风格。在声明类的前面可以加 上许多修饰符,不同的修饰符具有不同的含义。4.1.1 声明类 public修饰符:Java 语言中类的可访问控制符只有一个, 即public。每个Java程序的主类都必须是public类,主类具 有同文件名称相同的名字。作为公共工具供其他类和程 序使用的应定义为public类。 abstract修饰符:被修饰为abstract的类不能被实例化。类 中的方法不能有方法体,继承它的子类必须实现其方法 ,除非子类也是抽象类。 final修饰符:带有final修饰符的类是不可派生的。另外, 如果指定一个类为final,则该类所有的方法都是final。 类声明好了以后,接下来就是定义类的主体。一个类所 具有的属性、行为都是通过类主体来进行定义的。类主 体就是对类的成员进行定义,类成员包括成员变量和成 员方法。通过定义类的成员,一个类具有了自己的属性 和方法,从而对外提供相应的服务。下面几节主要讲述 类成员相关方面的内容。4.1.2 设定类成员的访问权限 对于类的成员,不管是成员变量还是成员方法,都有一定的访 问控制权限。访问控制权限限定了指定对象可以被访问的范 围。类成员的访问控制符有public、private、protected和default 。 public:用public修饰的成分表示是公有的,也就是它可以被其 他任何对象访问(前提是对类成员所在的类有访问权限)。 private:类中限定为private的成员只能被这个类本身访问,在 类外不可见。 protected:用该关键字修饰的成分是受保护的,只可以被同一 类及其子类的实例对象访问。 default:public、private、protected这三个限定符不是必须写 的。如果不写则表明是default,相应的成分可以被所在的包中 各类访问。4.2 创建类成员变量 类的成员变量定义了类的属性。所定义的成员变量,可 以被类内的所有方法访问。比如,如果把电视机看作一 个类,则电视机的颜色就是这个类的一个成员变量。该 变量用来描述电视机的颜色。声明成员变量的语法如图 4.2所示。 类的成员变量作用域是整个类,类中的所有方法均可访 问成员变量。成员变量一般定义在类体的最前面。变量 名称必须符合标识符规定,应具有一定的含义,也应该 遵循一定的编码规范。4.2 创建类成员变量 类的成员变量声明时如果没有初始化,系统会自动为其 进行初始化。对于数字类型,会自动初始化成0,字符会 初始化成0(ASCII码),对象引用会初始化成null。 注意:被声明为static的成员变量在没有创建任何类实 例的情况下,也可以通过类名被访问。而没有被声明为 static属性的成员变量被称为实例变量和实例方法。实例 变量和实例方法必须通过类的实例被访问,需要先创建 对象。类变量属于一个类而被所有类的实例所共享。( static对于下面介绍的成员方法与成员变量用法相同)4.3 创建类成员方法 除了成员变量,方法也是类的重要成员。成员方法 描述了对象所具有的功能或操作,反映对象的行为 ,是具有某种相对独立功能的程序模块。本节详细 介绍如何创建类的方法以及类的特殊方法,即构造 方法和main()方法。4.3.1 定义成员方法 成员方法描述对象所具有的功能或操作,反映对象的行 为,是具有某种相对独立功能的程序模块。它与过去所 说的子程序、函数等概念相当。一个类或对象可以有多 个成员方法,对象通过执行它的成员方法对传来的消息 作出响应,完成特定的功能。声明成员方法的语法如图 4.3所示。 一个方法的定义,从整体上来说也是包含声明和方法体 两部分。对于方法定义中的一些细节下面进行详细说 明。1成员方法的返回值 若方法有返回值,则在方法体中用return语句指明要 返回的值。其格式如下所示。 表达式可以是常量、变量、对象等。return 语句后面 表达式的数据类型必须与成员方法头中给出的返回 值的类型returnType一致。2形式参数与实际参数 在调用成员方法时应注意: 对于无参成员方法来说,是没有实际参数列表的,但方法名后 的括弧不能省略。 对于带参数的成员方法来说,实参的个数、顺序以及它们的数 据类型必须与形式参数的个数、顺序以及它们的数据类型保持 一致,各个实参间用逗号分隔。实参名与形参名可以相同也可 以不同。 实参也可以是表达式,此时一定要注意使表达式的数据类型与 形参的数据类型相同,或者使表达式的类型按Java类型转换规 则达到形参指明的数据类型。 实参变量对形参变量的数据传递是“值传递”,即只能由实参传 递给形参,而不能由形参传递给实参。程序中执行到调用成员 方法时,Java把实参值复制到一个临时的存储区(栈)中,形 参的任何修改都在栈中进行,当退出该成员方法时,Java自动 清除栈中的内容。3方法体中的局部变量 在方法体内可以定义本方法所使用的变量,这种变 量是局部变量,它的生存期与作用域是在本方法 内。也就是说,局部变量只能在本方法内有效或可 见,离开本方法则这些变量被自动释放。方法体内 定义变量时,变量前不能加修饰符。局部变量在使 用前必须明确赋值,否则编译时会出错。另外在一 个方法内部,可以在复合语句中定义变量。这些变 量只在复合语句中有效,这种复合语句也被称为程 序块。4.3.2 设定构造方法 Java中的每个类都有构造方法,它是类的一种特殊的方法。构造方 法用来初始化类的一个新的对象。它必须具有和类名相同的名称 ,而且不指出返回类型,它的默认返回类型就是对象类型本身。 每个类可以具有多个构造方法,它们各自包含不同的方法参数。 构造方法的语法如图4.4所示。 类的构造方法不是要求必须定义的。如果在类中没有明确地给出 一个构造方法,Java就会自动构造一个默认的构造方法。默认的构 造方法不包含任何参数。 只要类中定义了任何构造方法,Java就不再提供默认构造方法。4.3.3 “特殊”方法main() main()方法是Java程序执行的入口。作为application执行 的Java程序,有且只能有一个类具有main()方法。main() 方法定义的语法如图4.5所示。 main()方法具有一个字符串数组参数,用来接收执行Java 程序时的命令行参数。命令行参数作为字符串,按照顺 序依次对应字符串数组中的元素。4.3.4 可变参数的方法 以上几节介绍了类中方法的创建。在具体实际开发 过程中,有时方法中参数的个数是不确定的。为了 解决这个问题,在J2SE 5.0 版本中引入了可变参数 的概念。声明可变参数的语法格式如图4.6所示。 注意:可变参数必须定义在参数列表的最后。4.4 指代当前对象this 。this是Java语言中一个特殊的关键字,用来代表当 前类的一个对象。 关键字this是与对象密切相关的,在容易混淆的地方 使用this会使程序设计变得规范、简单、灵活。4.5 对 象 对象是对类的实例化。对象具有状态和行为,变量 用来表明对象的状态,方法表明对象所具有的行 为。Java对象的生命周期包括创建、使用和清除。本 节详细介绍对象的整个声明周期过程。4.5.1 创建对象 要使用一个对象,首先要创建它。通常创建对象的语法 如图4.7所示。 对象的创建主要由new关键字来完成。new关键字其实是 一个运算符,创建对象的动作是由new运算符触发的。在 程序底层,使用new运算符时会为对象分配内存空间。 说明:只有使用new关键字的地方才为对象分配内存空 间。new调用对象的构造方法,返回该对象的一个引用( 即该对象所在的内存地址)。4.5.2 使用对象 对象定义好了之后,才可以使用。对象的使用即是调用 对象的变量或方法。使用对象的语法如图4.8所示。 其中,参数objectNmae表示对象的名称。参数 memberVariableName表示对象的成员变量名称。参数 memberMethodName表示对象的成员方法名称。 技巧:如果创建的对象只使用一次,可以不定义对象 变量而是用点操作符直接操作。如:new Integer(1).toString(); 创建了对象,但没有定义引用变量。4.5.3 清除对象 对象使用完之后需要对其进行清除。对象的清除是指释 放对象占用的内存。在创建对象时,用户必须使用new操 作符为对象分配内存。不过,在清除对象时,由系统自 动进行内存回收,不需要用户额外处理。这也是Java语言 的一大特色,某种程度上方便了程序员对内存的管理。 Java语言允许用户使用finalize()方法在垃圾收集器中将对 象从内存中清除出去之前做必要的清理工作。这个方法 是由垃圾收集器在确定这个对象没有被引用时对它进行 调用的。其是在Object类中定义的,因此所有的类都继承 了它。子类覆盖finalize()方法以整理系统资源或者执行其 他清理工作。finalize() 方法是在垃圾收集器删除对象之 前对这个对象调用的。4.6 小 结 本章介绍了Java语言面向对象编程中有关类与对象的 相关知识。主要包括类及成员变量、成员方法的创 建,以及对象的创建、使用、清除等方面的知识。 本章最后给出了一个完整的实例。其中类的成员变 量、成员方法的定义和使用是本章的难点。在实际 编程过程中,应该多通过具体实例加深理解。下一 章将进一步深入介绍Java语言面向对象编程方面的知 识,包括类的继承、封装、多态以及接口和包等。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号