java重点知识免费版Word格式文档下载.docx
- 文档编号:1464863
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:35
- 大小:31.42KB
java重点知识免费版Word格式文档下载.docx
《java重点知识免费版Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《java重点知识免费版Word格式文档下载.docx(35页珍藏版)》请在冰点文库上搜索。
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]voidset变量名(类型参数名){
合法性检查并赋值;
}
5.静态域
类中的变量用来描述该类对象的属性,它们与每个具体对象相关联,因此也把它们称为类的实例变量。
用static修饰的变量称为静态变量或静态域。
当一个变量用static修饰时,表明它不属于任何一个类的具体对象,而是所有对象共享,static变量只有一个拷贝,这个存储单元被所有对象共享。
该类的任何一个对象访问和修改它时,都是对这个共享的存储单元进行操作。
由于静态变量属于整个类,即使没有创建任何对象时,类中的static变量也会存在,也可以使用静态变量,这时可以通过类名作前缀访问静态变量:
类名.静态变量
若创建了某个类的具体对象后,可以通过类名或对象名作前缀访问静态变量:
对象名.静态变量
6.最终域(final)
若类中的变量用关键字final修饰,则表明该变量一旦被显示的值(不能默认初始化)初始化后就不可能重新再赋值。
因此,final修饰的变量通常是程序中不能改变的常量。
publicstaticfinal类型常量名=初始值;
常量名大写,名字中包含多个单字时用下划线分隔。
圆周率常量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()调用,且必须作为构造方法内的第一条语句。
本节后面将讲述构造方法的this调用。
⑦子类构造方法中可以调用其直接父类的构造方法,但必须通过super()调用,且必须作为子类构造方法内的第一条语句。
2.构造方法的重载
当一个类因构造方法的重载而存在多个构造方法时,创建该类的对象的语句会根据给出的实际参数的个数、参数的类型、参数的顺序自动调用相应的构造方法来完成对象的初始化工作。
当一个类有多个重载的构造方法时,构造方法里面可以调用类的其他构造方法,但必须通过this()调用,且必须作为构造方法内的第一条语句。
3.1.6 关键字this
①类定义中使用this,当创建该类的对象后,this代表类对象自身。
②类中通过this、后跟圆点运算符,之后是类的实例变量名或实例方法名可以使用本类中的变量和方法。
③静态变量和静态方法不能通过this作前缀来使用。
④类中有多个重载的构造方法时,构造方法中可以通过this()调用其他构造方法,但必须是构造方法中的第一条语句。
3.1.7 抽象和封装
Java编程首要的任务之一就是创造新的数据类型——类,并描述这些数据类型对象之间的交互。
通过对同一类对象的共同属性抽象出来并用数据(变量)来描述,把对象的动态特征抽象为行为,用方法来描述。
通过组织包、设定类的访问权限和类成员的访问权限,使类这种数据类型对类的客户隐蔽其实现细节,从而实现数据封装。
通过对象的封装,实现了模块化和信息隐藏,有利于程序的可移植性和安全性,同时也利于对复杂对象的管理。
3.3.2 类成员的继承和重新定义
1.定义子类的格式
[类的修饰符]classBextendsA{
类的变量定义;
方法定义;
}
关键字extends表示继承关系,即类B是类A的子类、类A是类B的父类。
Java中一个类只能有一个直接父类,称为单继承,但一个父类可以派生多个子类。
Java的根类是Object类,如果一个类没有使用关键字extends显示的指明其父类,Java中默认其父类是Object类。
2.类成员的继承
子类继承某个父类后,子类便具有父类的特性,从程序代码的角度来说,子类便拥有了父类的所有非私有(private)变量和方法,这些变量和方法通过继承都变成了子类的成员。
3.子类添加成员
在子类中加入自己的变量和方法。
在单继承中,子类和它的父类的出发点基本上是相同的,继承的真正目的是定义子类时添加功能,或者对从其父类继承来的某些功能进行修改。
4.重新定义从父类继承来的成员——变量隐藏和方法覆盖
①变量隐藏
当一个父类变量不适合子类时,子类可以把从父类继承来的同名变量重新定义。
子类若要引用父类的同名变量,要用关键字super作前缀加圆点操作符引用父类的同名变量:
super.变量名
②方法覆盖
把从父类继承来的方法重写,称为方法覆盖。
子类覆盖父类的方法时,方法头要与父类一样,只是对方法体重写,从而完成满足子类的要求。
如果子类中调用被覆盖的父类中的同名方法,通过super关键字作前缀加圆点操作符实现调用:
super.方法名()
5.方法覆盖的规则
参数列表完全相同;
返回类型相同;
访问限制相同或更弱,但不能更强;
抛出异常相同或更少、更有限的异常。
方法覆盖与方法重载是两个不同的概念。
方法的重载是指同一个类中定义多个同名方法,它们的参数列表不同,但可以有不同的返回值类型。
重载方法调用时根据其参数类型、个数和顺序来区分。
子类可以对继承来的方法重载。
方法覆盖是指子类把继承来的方法重新定义,方法头一样,但方法体不同,即方法实现的功能不同,从而满足子类自己的特殊要求。
3.3.3 子类对父类构造方法的调用——关键字super
关键字super的使用规则如下。
①super.变量名:
引用被子类隐藏的父类中的变量;
②super.方法名:
调用被子类覆盖的父类中的方法;
③super(参数):
子类构造方法中调用父类构造方法,但必须是子类构造方法中的第一条语句。
this()和super()调用只能有其一,不能同时都有。
3.3.4 父类和子类对象的转换
Java语言允许父类对象和子类的对象之间进行类型转换。
子类对象可以自动向父类对象转换,但父类对象转换为子类对象时,必须要强制类型转换,转换的格式为:
(子类名)父类对象
下面的语句使用前面讲过的MyCircle类和MySphere类创建对象,都是合法的:
MyCircleobj1=newMyCircle(8,8,5);
MyCircleobj2=newMySphere(8,8,8,10);
MySphereobj3=(MySphere)obj2;
在运行时,Java总是能够根据引用的实际实例动态地选择将要运行的方法的实际版本。
Java能够根据其引用的实例类型正确地调用方法,这是Java中的运行多态性的体现。
当子类实例赋值给父类对象引用后,父类对象引用的实际上是子类实例,但通过这个父类引用只能引用子类中与父类同名的那些成员。
若成员变量出现隐藏,引用的是父类变量;
若成员方法出现覆盖,引用的是子类方法。
3.3.5 抽象类和最终类
1.抽象类
一种表示抽象概念、不能被实例化的类,其作用是为派生类提供一个恰当的父类。
Java中的抽象方法是只有方法头、没有方法体的方法。
如果一个类中包含抽象方法,则该类必须声明为abstract。
抽象方法只能存在于抽象类(或接口)中。
如果一个类继承自某个抽象类,而没有具体实现其父类中的所有抽象方法,则该类也必须声明为抽象类(用abstract修饰)。
2.最终类
如果一个类没有必要(或使其不能)再派生子类时,通常将该类用final关键字修饰,表明它是一个最终类。
最终类是处在类的层次结构中最底层的类。
用final修饰的类通常是有固定作用、完成一定标准功能的类,例如Java类库中的数学类(Math)等,该类中封装了数学中的一些常用的数学常量,以及常用数学方法,它们都是完成确定和标准功能的一些方法,Math类已没有必要再派生任何子类,因此Java中将该类定义为final类。
final类不能再派生子类。
3.4.1 接口概述
Java语言不支持多继承,但它通过另外一种机制实现了与类的多继承相似的功能。
这种机制就是Java中的接口(interface)。
Java语言的接口中,只能定义静态常量和抽象方法。
由于接口中包含的方法都是抽象方法,所以定义接口相当于声明程序开发的一组协议或约定。
实际上,Java中的接口可以看成是一个没有具体实现的“类”。
凡是需要实现这种特定功能的类,都可以在类声明中使用关键字implements声明该类“继承”这些属性和方法的集合。
接口的定义中包含的是抽象方法,而编写抽象方法的方法体,实现方法的特定功能都是在实现接口的类中具体完成的。
接口也可以继承,但Java中接口可以多继承,即一个接口可以继承多个接口。
一个类可以同时实现多个接口。
3.4.2 自定义接口和实现接口
1.如何自定义接口
用关键字interface定义接口,接口中的成员只有静态常量和抽象方法,文件名保存为:
接口名.java。
接口的定义格式如下:
[public]interface接口名称[extends父接口名列表]
{
//静态常量
[public][static][final]数据类型变量名=常量值;
//抽象方法
[public][abstract]返回值类型方法名(参数列表);
接口中的成员变量必须是public(公有的)、static(静态的)和final(最终的)。
接口中的成员方法必须是public(公共的)和abstract(抽象的)。
接口也具有继承性,通过关键字extends表明继承关系,Java中的接口支持多继承,被继承的多个父接口之间用逗号分隔,形成父接口名列表。
2.如何实现接口
一个类可以实现一个或多个接口,声明实现接口的关键字是implements,后跟要实现的接口名。
如果接口中有多个抽象方法,而实现接口的类只需使用其中的一个,也必须为其他抽象方法加上花括号,只是花括号中没有语句。
一个类实现接口时定义格式如下:
[修饰符]class类名[extends父类名]implements接口A,接口B,…
类的成员变量和成员方法;
为接口A中的所有方法编写方法体,实现接口A;
为接口B中的所有方法编写方法体,实现接口B;
一个类实现接口后,将继承接口中的所有静态常量,为该类所用。
一个类实现接口后,如果该类不是一个抽象类,则该类的类体中必须为接口中的所有抽象方法编写方法体。
一个类实现接口后,接口中的成员就被该类所拥有,因此,在单继承的情况下通过实现多个接口达到了多继承的目的,增加了类的功能。
3.4.3 Java类库中的接口实现举例
实现多线程(Thread)的Runnable接口,它在java.lang包中,该接口中有一个抽象方法run():
publicinterfaceRunnable{
publicvoidrun();
Java中处理动作的事件(ActionEvent),如按钮点击事件、文本框的回车事件响应等是通过ActionListener接口实现的,它在java.awt.event包中。
ActionListener接口中有一个抽象方法actionPerformed(ActionEvente):
publicinterfaceActionListener{
publicvoidactionPerformed(ActionEvente);
//有动作时执行
对键盘上键的敲击做出响应,Java中专门定义了名字为KeyListener的接口,它在java.awt.event包中,该接口中包含以下3个响应不同键盘事件(KeyEvent)的抽象方法。
publicinterfaceKeyListener{
publicvoidkeyTyped(KeyEvente);
//键敲击(压下并释放)时执行。
publicvoidkeyPressed(KeyEvente);
//键压下时执行。
publicvoidkeyReleased(KeyEvente);
//键释放时执行。
上面3个方法中的参数类型KeyEvent是Java中定义的键盘事件类。
KeyEvent类在java.awt.event包中,该类有一个名字为getKeyChar()的方法,该方法的功能是得到所敲击的键代表的字符。
例如,敲击键盘字符键r,方法调用e.getKeyChar()将返回字符’r’。
第五章
(1)
5.1.1异常的基本概念
异常(Exception)也称例外,是在程序运行过程中发生的、打断程序正常执行的事件。
异常可分为两大类型:
Error类代表编译和系统的错误,不许捕获;
Exception类代表标准Java库方法所激发的异常,有人称做公共异常,这是为方便程序员处理异常。
Java语言异常处理类层次如下所示。
Object
Throwable
Error
Exception
5.1.2异常示例
利用Exception类的方法获取更多的信息。
(1)publicStringtoString():
返回描述当前异常对象信息的字符串。
(2)publicStringgetMessage():
返回描述当前异常对象信息的详细信息。
(3)publicvoidprintStackTrace():
没有返回值,屏显当前异常对象使用堆栈的轨迹,即程序先后调用了哪些方法,使得运行过程产生了这个异常对象。
5.1.3异常机制
Java程序在执行过程中如出现异常,会自动生成一个异常对象,该异常对象被交给Java运行的系统,这个过程称为抛出(throw)异常。
当然,程序也可强制抛出异常;
Java运行时系统接收到异常对象后,会寻找处理这一异常的代码,并把此异常对象交给其处理,这一过程称为捕获(catch)异常。
系统定义的运行异常都可由系统自动抛出,用户自定义的异常必须借助throw(抛出)语句来定义何种情况才算是产生了对应此种异常的错误,并抛出这个异常类的对象。
throw 异常对象
含有throw语句的方法必须在方法头中增加throws异常类名列表,格式如下:
修饰符 返回类型 方法名(参数列表)throws 异常类名列表{}
try/catch构造允许用户捕获某段代码的异常。
如果一个异常是由try子句中的某语句所导致,Java就试图将此异常递送至适当的catch子句。
catch子句可以看成有一个实参且无返回类型的方法声明。
一条try子句可以有多个catch子句,分别有不同的实参类型;
Java以类似选择重载方法的做法挑出适当的catch子句。
try{语句组
}catch(异常类名 异常形式参数名){异常处理语句组;
}finally{异常处理语句组;
如果代码周围没有try/catch子句,或者未找到匹配的catch子句,则异常就会向上抛至调用方法。
如果异常仍未得到捕获,则进一步抛至更上一层,直至异常得到处理。
用户可以创建自己的异常,这需要完成如下工作:
(1)声明一个新的异常类,它以Exception类或其他某个已经存在的系统异常类或用户异常类为父类;
(2)为新的异常类定义属性和方法,或隐藏和覆盖父类的属性和方法,使这些属性和方法能体现该类所对应的错误信息。
第五章
(2)
⏹Java中的异常用于处理非预期的情况,如文件没找到,网络错误,非法的参数
⏹Java中的异常类定义了程序中遇到的轻微的错误条件。
⏹Java程序运行过程中所发生的异常事件可分为两类:
⏹Error:
JVM系统内部错误、资源耗尽等严重情况。
Java中的错误类定义了程序中不能恢复的严重错误条件。
如内存溢出、类文件格式错误等。
这一类错误由Java运行系统处理,不需要我们去处理。
⏹Exception:
其它因编程错误或偶然的外在因素导致的一般性问题,例如:
⏹对负数开平方根
⏹空指针访问
⏹试图读取不存在的文件
⏹网络连接中断
publicclassTest4_1{
publicstaticvoidmain(String[]args){
Stringfriends[]={"
lisa"
"
bily"
kessy"
};
for(inti=0;
i<
5;
i++){
System.out.println(friends[i]);
//friends[4]?
}
System.out.println("
\nthisistheend"
);
程序Test4_1编译正确,运行结果:
javaTest4_1
lisa
bily
kessy
java.lang.ArrayIndexOutOfBoundsException
atTest8_1.main(Test8_1.java:
5)
Exceptioninthread"
mai
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 重点 知识 免费版