第3章 使用类和对象编程 软 件 学 院 朱士明 副教授
1.创建类 2.成员变量与方法 3.对象 4.静态变量和静态方法 5.再谈方法 6.内部类 7.实例
3.1 创建类(class) 1.含义: 类是组成Java程序的基本元素,它封装了一系列的变量(即数据成员,也称为“域(field)”)和方法(即成员方法 method),是一类对象的原型。 类是对象的高度抽象,是同类对象公共属性的抽象 创建一个新的类,就是创建一个新的数据类型。实例化一个类,就得到一个对象。因此,对象就是一组变量和相关方法的集合,其中变量表明对象的状态、属性,方法表明对象所具有的行为。
2. 类定义 对一个用户自定义的类,要为类取一个名字,并指明类中包含哪些变量和方法以及相应的类型、实现等,这称为类的定义。类定义语句的一般形式为: [修饰符]class 类名 [extends 父类名] [implements 接口名表] { 成员变量声明 // 类体 方法成员声明 } 其中class、extends和implements都是Java的关键字。extends(表示继承)和implements(表示接口)等内容,以后逐渐介绍。 修饰符:public公有类、abstract抽象类、final终类
类定义: 类名:使用Java语言合法的标识符来对自定义的类命名。 类体:在大括号中定义该类中包含的数据成员和成员方法。 允许定义没有任何成员的空类。 【例3.1】定义一个计算三角形周长和面积的类。
3.2 成员变量与方法 1.成员变量的定义 成员变量位于类体内成员方法外的变量; 方法变量位于方法体内的变量。 定义形式:[访问权限符][static][final]类型 变量名1[,变量名2,…] 访问权限符:public(公有)、protected (保护)、 private (私有) 2.成员变量的初始化 (1)默认值 (2)定义指定[例3.2] 3.成员方法的创建 定义形式: [修饰符][static][final]返回值类型 方法名(){ 方法体 }
4.方法的调用 (1)格式: 对象名.方法名(); 或: 对象名.方法名(实参1[,实参2,…]); (2)例3.3 5.成员变量和方法的两种形式 (1)实例变量与实例方法: 对象名.成员变量, 对象名.方法名(); (2)类变量与类方法: 用static修饰,类名.方法名()或对象名.方法名();
3.3 类对象 一旦定义了所需的类,就可以创建该类的变量,创建类的变量称为类的实例化,类的变量也称为类对象、类的实例等。 类的对象是在程序运行中创建生成的,其所占的空间在程序运行中动态分配。当一个类的对象完成了它的使命,为节省资源,Java的垃圾收集程序就会自动收回这个对象所占的空间。即类对象有自己的生命周期。 1.创建对象 创建类的对象需用new运算符,一般形式为: 类名 对象名 = new 类名(参数1,参数2,…); 或者 类名 对象名; 对象名 = new 类名(参数1,参数2,…);
new运算符用指定的类在内存中分配空间,并将存储空间的引用存入语句中的对象变量。 2.引用对象 在创建了类的对象后,就可以对对象的各个成员进行访问,进行各种处理。运算符“.”在这里称为成员运算符,在对象名和成员名)之间起到连接的作用,指明是哪个对象的哪个成员。 访问对象成员的一般形式为: 对象名.数据成员名 对象名.成员方法名() // 方法名带圆括号 3.垃圾回收(Garbage collection) Java虚拟机提供了一个系统级垃圾回收线程,负责自动回收无用对象所占内存,这种机制称为垃圾回收。 终级器finalize().
3.4 静态变量和静态方法(static修饰符) 两点注意: (1)静态方法不能访问属于某个对象的成员变量,而只能处理属于整个类的成员变量。即静态方法只能处理静态变量。 (2)可以用两种方式调用静态成员,它们的作用相同。 变量:类名.变量、类对象.变量。 方法:类名.方法名()、类对象.方法名()。
【例3.4】P54 [示例]静态成员的使用。 class StaticDemo { static int a = 42; static int b = 99; static void callme() { System.out.println("a = " + a); } class StaticByName { public static void main(String args[]) { StaticDemo.callme(); System.out.println("b = " + StaticDemo.b);
3.5 再谈方法 1.重载方法 (1)含义:名字相同,但参数和返回值不同的多个方法叫方法的重载. (2)注意:必须是参数不同.
2.构造方法 在Java中,任何变量在被使用前都必须先设置初值。Java提供了为类的成员变量赋初值的专门功能:构造方法(constructor)。构造方法是一种特殊的成员方法,它的特殊性反映在如下几个方面: (1)构造方法名与类名相同。 (2)构造方法不返回任何值,也没有返回类型。 (3)每一个类可以有零个或多个构造方法。 (4)构造方法在创建对象时自动执行,一般不能显式地直接调用。 [例3.5][3.6]P57-58
3.6 内部类 多个类的两种定义形式:并列和嵌套。 1.并列定义:即一个类接着一个类进行定义,它们之间是并列的关系。 2.嵌套定义(内部类):即在一个类中定义另外的类,它们之间是包含和被包含的关系,可分别称为包含类和内部类(或嵌套类)。采用何种形式定义多个类,由类之间的访问关系确定。 3.内部类说明: (1)内部类(InClass)与顶层类(OutClass) (2)内部类为类成员,引用方法有OutClass对象. InClass或OutClass. InClass (3)匿名内部类,直接内部类的对象.
内部类的名称不能与所嵌套的类相同,而且只能在定义的范围中使用。内部类具有下面一些特性: (1)内部类可以被定义在方法中。它可以访问嵌套类的方法的final变量。 (2)内部类可以使用所嵌套类的类变量和实例变量以及所嵌套的块中的本地变量。 (3)内部类可以被定义为abstract抽象类。 (4)内部类可以被声明为private或protected,以便防护它们不受来自外部类的访问。访问保护不阻止内部类使用其他类的任何成员。 (5)一个内部类可以作为一个接口,由另一个内部类实现。 (6)声明为static的内部类成为顶层类。这些内部类失去了在本地范围和其他内部类中使用数据或变量的能力。 (7)内部类不能声明任何static成员,只有顶层类可以声明static成员。因此,一个需求static成员的内部类必须使用来自顶层类的成员。 [例3.7]P59-60