JAVA(免费版)
第三章
① Java中类的最简单的定义格式如下:
[类的修饰符] class 类名 [extends 父类名] {
变量声明;
构造方法定义;
其他方法定义;
}
② 创建一个类的对象的格式如下:
类名 对象名=new构造方法(实际参数);
③ 在类的外部,访问类中的变量和调用类中的方法格式如下:
对象名.变量名
对象名.方法名(实际参数)
3.1.1 类的修饰符
1.类访问权限修饰符:
public(公共的)
用关键字public修饰一个类,表明该类可以被任何其他类使用。如果一个类没有public修饰符,则这个类只能在它所在包中访问。
2.abstract(抽象的)
用abstract修饰的类是一个不完整的类,称为抽象类,因为该类中含有没有方法体的抽象方法。抽象类没有具体实例。
3.final(最终的)
用final修饰的类称为最终类。最终类不能有子类。
3.1.2 类的成员
一个类定义中可以有以下3种类型的成员。
1.域(field)
通常类中声明的变量称为域,用来描述类的属性或状态。一个类中的域既可以是基本数据类型,也可以是其他类的对象等。
2.方法(method)
是对类中变量进行操作的可执行代码序列,定义了该类对象所具有的行为。
3.内部类
定义在一个类里面的类。
3.1.3 域、域的访问控制修饰符和其他修饰符
1.域的初始化
一个类中如果没有定义构造方法,则编译器会自动生成一个没有参数的构造方法,用来初始化类对象,并将类中变量自动初始化为该类型的默认值。
① 整型初始化为0;
② 实型初始化为0.0f、0.0d;
③ 逻辑型初始化为false;
④ 字符型初始化为’ \u0000’;
⑤ 类对象初始化为null,表明引用不指向任何内存地址。
2.声明其他类对象作为一个类的域
类的域(变量)可以是基本数据类型,也可以是其他类的对象。如果一个类定义中包含另一个类的实例,通常称为“HAS-A”,表示包含关系,即一个类实例“具有”对另一个类实例的引用。
3.域的访问控制
类的域在类的里面都是可见的,类中的所有方法都可以使用它们。
在类的外部,类中域的可见性由关键字public、private、protected来控制,称为类的域的访问权限修饰符。
4种访问权限所使用的修饰符和含义如下。
① public:用public修饰的成员可以被所有其他的类来访问。
② private:类中限定为private的成员只能被这个类本身访问,在类的外部,类的private成员是不可见的 。
③ protected:类中限定为protected成员。只有其子类(不论是否在同一个包中)以及同一个包内的其他类,才能访问该类的protected成员。
④ 缺省的:如果类成员的访问权限没有设定,这时类的成员具有包访问权限。
请注意,方法定义中的参数和方法体中的变量都是局部变量,不能使用上面的访问权限修饰符。
4.封装和公开
如果把类中的变量用public修饰,则这些变量完全公开,可以直接访问和修改。
面向对象程序设计中,通过类和类成员的访问控制级别的限定,较好地解决了封装和公开的问题。如果将成员变量标识为private,则它在类的外部不可见,使数据得到了封装。为了能够访问这些私有数据,就必须提供public或者protected的成员方法来获取(get)和设置(set)这些private变量的值。
通常获取和设置private变量的方法命名采用以下形式:
[public|protected] 变量类型 get变量名(){
return 变量名;
}
[public|protected] void set变量名(类型 参数名){
合法性检查并赋值;
}
5.静态域
类中的变量用来描述该类对象的属性,它们与每个具体对象相关联,因此也把它们称为类的实例变量。用static修饰的变量称为静态变量或静态域。
当一个变量用static修饰时,表明它不属于任何一个类的具体对象,而是所有对象共享,static变量只有一个拷贝,这个存储单元被所有对象共享。该类的任何一个对象访问和修改它时,都是对这个共享的存储单元进行操作。
由于静态变量属于整个类,即使没有创建任何对象时,类中的static变量也会存在,也可以使用静态变量,这时可以通过类名作前缀访问静态变量:
类名.静态变量
若创建了某个类的具体对象后,可以通过类名或对象名作前缀访问静态变量:
对象名.静态变量
6.最终域(final)
若类中的变量用关键字final修饰,则表明该变量一旦被显示的值(不能默认初始化)初始化后就不可能重新再赋值。因此,final修饰的变量通常是程序中不能改变的常量 。
public static final 类型 常量名=初始值;
常量名大写,名字中包含多个单字时用下划线分隔。
圆周率常量Math.PI、自然常数Math.E等。基本数据类型包装类中的int类型的最大值Integer.MAX_VALUE、最小值Integer.MIN_VALUE等。
用final修饰的引用变量,也不能重新赋值来引用另一个对象,但可以修改final修饰的引用对象内的数据。
7.域的声明格式
[public | protected | private] [static] [final] [transient] [volatile] 类型名 成员变量名;
3.1.4静态方法、抽象方法和最终方法
1.方法的访问控制修饰符
方法作为类的成员也有4种访问权限:public、private、protected和缺省的(没有访问控制修饰符)。
2.静态(static)方法
用static修饰的方法称为静态方法,它不属于类的具体对象,而是整个类的类方法。
如果一个方法总是以相同的方式运行,即它的运行与类的任何实例没有关系,其行为与对象的状态(实例变量的值)无关,这时该方法就应该用static修饰,使其成为静态方法。
两种方式调用静态方法:
类名.静态方法
对象名.静态方法
一个类里面的静态方法中只能处理静态变量;静态方法中只能调用静态方法。下面的程序编译时出现错误提示。
3.最终(final)方法
关键字final可用来修饰类中的方法,称为最终方法。将一个方法标识为final的主要目的是防止子类重新定义继承自父类的方法。
4.抽象(abstract)方法
用关键字abstract修饰的方法,称为抽象方法。抽象方法只有方法头,没有方法体,而是以一个分号结束。抽象方法的声明通常出现在抽象类和接口中,这些内容将在本章3.3节和3.4节讲述。
方法修饰符abstract和final不可能同时使用。
5.方法的定义格式
方法的定义格式如下:
[public | protected | private] //指明方法的访问控制级别
[static] //指明是整个类拥有的类方法
[final | abstract] //不能同时使用
[native] //指明是本地方法
[synchronized] //指明是同步方法
返回值类型 方法名(参数列表) [throws 异常] {
….;
}
3.1.5 构造方法
1.构造方法的规则
① 构造方法名称必须与类名相同。
② 构造方法一定不能有返回值类型。
③ 构造方法可以使用3种访问控制修饰符public、protected、private或缺省的,对应的访问级别与类成员一样。
④ 构造方法不能用static修饰,因为构造方法只用于创建类的实例。
⑤ 如果类中不定义任何构造方法,编译器会自动生成默认的无参数的构造方法;如果类中定义了构造方法,编译器不会自动生成默认构造方法。
⑥ 类中的构造方法可以根据需要重载多个参数列表不同的版本。这些重载的构造方法可以相互调用,但必须通过this()java在哪里可以免费自学调用,且必须作为构造方法内的第一条语句。本节后面将讲述构造方法的this调用。
⑦ 子类构造方法中可以调用其直接父类的构造方法,但必须通过super()调用,且必须作为子类构造方法内的第一条语句。
2.构造方法的重载
当一个类因构造方法的重载而存在多个构造方法时,创建该类的对象的语句会根据给出的实际参数的个数、参数的类型、参数的顺序自动调用相应的构造方法来完成对象的初始化工作。
当一个类有多个重载的构造方法时,构造方法里面可以调用类的其他构造方法,但必须通过this()调用,且必须作为构造方法内的第一条语句。
3.1.6 关键字this
① 类定义中使用this,当创建该类的对象后,this代表类对象自身。
② 类中通过this、后跟圆点运算符,之后是类的实例变量名或实例方法名可以使用本类中的变量和方法。
③ 静态变量和静态方法不能通过this作前缀来使用。
④ 类中有多个重载的构造方法时,构造方法中可以通过this()调用其他构造方法,但必须
是构造方法中的第一条语句。
3.1.7 抽象和封装
Java编程首要的任务之一就是创造新的数据类型——类,并描述这些数据类型对象之间的交互。通过对同一类对象的共同属性抽象出来并用数据(变量)来描述,把对象的动态特征抽象为行为,用方法来描述。
通过组织包、设定类的访问权限和类成员的访问权限,使类这种数据类型对类的客户隐蔽其实现细节,从而实现数据封装。通过对象的封装,实现了模块化和信息隐藏,有利于程序的可移植性和安全性,同时也利于对复杂对象的管理。
3.3.2 类成员的继承和重新定义
1.定义子类的格式
[类的修饰符] class B extends A {
类的变量定义;
构造方法定义;
方法定义;
}
关键字extends表示继承关系,即类B是类A的子类、类A是类B的父类。
Java中一个类只能有一个直接父类,称为单继承,但一个父类可以派生多个子类。Java的根类是Object类,如果一个类没有使用关键字extends显示的指明其父类,Java中默认其父类是Object类。
2.类成员的继承
子类继承某个父类后,子类便具有父类的特性,从程序代码的角度来说,子类便拥有了父类的所有非私有(private)变量和方法,这些变量和方法通过继承都变成了子类的成员。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论