java复习资料内容版.docx
《java复习资料内容版.docx》由会员分享,可在线阅读,更多相关《java复习资料内容版.docx(36页珍藏版)》请在冰豆网上搜索。
java复习资料内容版
Java编程技术复习纲要
(Java语言程序设计郑莉王行言马素霞)
第1章Java语言基础知识
1.1Java语言与面向对象的程序设计
1简述面向对象的编程语言与以往编程语言的根本不同点
面向对象的编程语言与以往编程语言的根本不同在于抽象机制的不同。
机器语言和汇编语言几乎没有抽象,对于机器而言是最合适的描述,它可以直接操作机器的硬件,并且任何操作都是面向机器的,这就要求人们在使用机器语言或汇编语言编写程序时,必须按照机器的方式去思考问题。
因为没有抽象机制,所以程序员不得不陷入复杂的事物之中。
面向过程的语言使程序员可以离开机器层次,在更抽象的层次上表达意图。
但它所关注的只是处理过程,即执行预期计算所需要的算法。
面向对象的编程语言将客观事物看作具有状态和行为的对象,通过抽象找出同一类对象的共同状态(静态特征)和行为(动态特征),构成模型——类。
而程序需要解决的问题便反映为各种不同属性的对象以及对象之间的关系和消息传递。
面向对象的方法在程序设计领域是一种相对较新的方法,它更接近于人类处理现实世界问题的自然思维方法。
2封装的好处
封装带来的好处是:
隐藏类的数据、控制用户对类的修改和控制数据访问权限
3面向对象技术给软件发展带来的益处
●可重用性:
一个设计好的类可以在今后的程序开发中被部分或全部地重复利用。
●可靠性:
每一个类作为一个独立单元可以单独进行测试、维护,大量代码来源于可靠的类库,因而开发新程序时新增代码明显减少,这是程序可靠性提高的一个重要原因。
4面向对象语言的基本特征
●抽象和封装:
抽象的结果形成类,类中的数据和方法是受保护的,可以根据需要设置不同的访问控制属性。
这便保证了数据的安全性,隐藏了方法的实现细节,也方便了使用。
●继承性:
可以对已有类增加属性和功能,或进行部分修改来建立新的类,实现代码的重用。
●多态性:
在面向对象的程序中,同一个消息被不同对象接收后可以导致不同的行为。
5Java语言的特点
●面向对象:
Java是完全面向对象的语言。
Java语言提供类的机制,在对象中封装了成员变量和方法,实现了数据的封装和信息隐藏;类提供了一类对象的模型,通过继承和多态,实现了代码的复用。
●安全性:
Java不支持指针,一切对内存的访问都必须经过对象的实例变量实现,防止了以不法手段访问对象的私有成员,同时避免了指针操作中容易产生的错误。
Java的内部安全措施保证了Java程序在Java虚拟机规则下操作,防止未授权的程序访问含有专用信息的系统资源或危及客户机的完整性。
●操作平台无关性:
Java编译器生成与平台无关的字节码指令,只要安装了Java运行系统,其程序就可以在任意的处理器上运行。
这些字节码对应于Java虚拟机中的表示,Java解释器得到字节码后,对其进行解释,使之能够在不同的平台下运行。
不同的操作系统有不同的虚拟机,与平台无关的特性使得Java程序可以方便地移植到不同的机器上。
●多线程:
Java是第一个在语言级提供内置多线程支持的高级语言,这大大简化了多线程程序的编写。
而一些其他语言要通过调用操作系统的原语来支持多线程。
●动态内存分配:
Java中所有的对象都是通过动态内存分配建立的,Java对内存自动进行管理并进行垃圾回收,防止了因程序员失误而导致的内存分配错误,进而更好地利用了系统资源。
1.2Java程序概述
6Java程序编译执行的过程
首先把源文件(.java文件)编译成字节码文件,即类文件(.class);然后由解释器负责解释执行类文件。
7Java平台
Java平台包括Java应用程序接口(API)和Java虚拟机(Javavirtualmachine,JVM)。
Java应用程序接口是指经过编译的,可在程序中直接使用的Java代码标准库。
Java虚拟机负责解释和执行Java程序。
Java程序运行于Java平台之上,Java虚拟机将程序和硬件隔离开来。
1.3基本数据类型与表达式
8变量的作用域
变量的作用域指可以访问该变量的程序代码范围。
按照作用域的不同,变量可以分为类成员变量和局部变量。
类成员变量在类的声明体中声明,其作用域为整个类;局部变量在方法体或方法的代码块中声明,其作用域为它所在的代码块(即花括号{}的范围)。
9基本数据类型(基本数据类型有几种?
分别是什么?
)
基本数据类型是指Java固有的数据类型,可以分为数字型、布尔型和字符型
数字型基本数据类型有六种,其说明如下表:
类型
说明
长度
最小值
最大值
byte
带符号位整数
8位
-128
127
short
带符号短整数
16位
-215
215-1
int
带符号整数
32位
-231
231-1
long
带符号长整数
64位
-263
263-1
float
单精度浮点数
32位
2-149
(2-2-23).2127
double
双精度浮点数
64位
2-1074
(2-2-52).21023
布尔型数据表示一个逻辑量,只有两个值true和false,它们不对应于任何整数值。
字符类型数据用于存储单个字符,字符以代码形式存储。
Java字符数据类型是16位,最小值0,最大值65535,放置Unicode符号。
10类型转换的分类
类型转换可以分成扩展转换和窄化转换两类。
byte,short,int,long,float,double
char
扩展
double,float,long,int,short,byte,char
窄化
按照扩展方向转化,从一种整型转换到另一种整型,或者从float转换到double时,不损失任何信息。
从整型转换到float或者double将损失精度。
窄化转换可能会丢失信息。
11发生类型转换的四种可能情况
●赋值转换
●方法调用转换
●强制类型转换
●字符串转换
1.4数组的概念
12数组的概念
数组是由同类型的数据元素构成的一种数据结构。
数据元素可以是基本数据类型也可以是引用类型。
通过数组名和数组元素下标(或称为索引)可以引用数组中的元素。
每个数组都有一个名为length的成员变量,用来表示数组所包含的元素的个数,length只能是正整数或零。
数组创建之后length就不能被改变。
1.5数组的创建和引用
13图示下面创建并初始化一个三行的二维数组的过程
int[][]myArray;
myArray=newint[3][];
myArray[0]=newint[3];
int[]x={0,2};
int[]y={0,1,2,3,4};
myArray[1]=x;
myArray[2]=y;
第2章类与对象的基本概念
2.1面向对象的程序设计方法概述
1抽象
抽象就是忽略问题中与当前目标无关的那些内容,以便更充分地注意与当前目标有关的方面。
计算机软件开发中所使用的抽象有过程抽象及数据抽象两类。
过程抽象将整个系统的功能划分为若干部分,强调功能完成的过程和步骤,而隐藏其具体的实现。
基于过程抽象的两个标准程序设计技术是过程分解及递归技术。
数据抽象是将系统中需要处理的数据和这些数据上的操作结合在一起,抽象成不同的抽象数据类型,每个抽象数据类型既包含了数据,也包含了针对这些数据的操作。
相对于过程抽象,数据抽象是更为合理的抽象方法。
面向对象的软件开发方法的主要特点之一就是采用了数据抽象的方法来构建程序的类及对象。
2封装
封装是一种信息隐蔽技术,就是利用抽象数据类型将数据和基于数据的操作封装在一起。
用户只能看到对象的封装界面信息,对象的内部细节对用户是隐蔽的。
封装的目的在于将对象的使用者和设计者分开,使用者不必知道行为实现的细节,只需使用设计者提供的消息来访问对象。
3继承
继承是指新的类可以获得已有类(称为超类、基类或父类)的属性和行为,称新类为已有类的派生类(也称为子类)。
在继承过程中派生类继承了基类的特性,包括方法和实例变量。
派生类也可修改继承的方法或增加新的方法,使之更适合特殊的需要。
继承有助于解决软件的可重用性问题,使程序结构清晰,降低了编码和维护的工作量。
4单继承
任何一个派生类都只有单一的直接父类,类层次结构为树状结构。
5多继承
一个类可以有一个以上的直接父类,类层次结构为网状结构,设计及实现比较复杂。
6多态
多态是指一个程序中同名的不同方法共存,主要通过子类对父类方法的覆盖来实现。
不同类的对象可以响应同名的消息(方法),具体的实现方法却不同。
多态性使语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序方法同名问题。
2.2类与对象
7类和对象
一个类是对一类对象的描述。
类是构造对象的模板,对象是类的具体实例
8类的声明语法格式
[public][abstract|final]class类名称
[extends父类名称]
[implements接口名称列表]
{
变量成员声明及初始化;
方法声明及方法体;
}
说明:
●class:
表明其后声明的是一个类
●extends:
如果所声明的类是从某一父类派生而来,那么,父类的名字应写在extends之后
●implements:
如果所声明的类要实现某些接口,那么,接口的名字应写在implements之后
●修饰符可以有多个,用来限定类的使用方式
⏹public:
表明此类为公有类
⏹abstract:
指明此类为抽象类
⏹final:
指明此类为终结类
9对象的创建
生成实例的格式:
new<类名>()
其作用是:
在内存中为此对象分配内存空间,返回对象的引用(reference,相当于对象的存储地址)。
10数据成员
数据成员表示Java类的状态。
声明数据成员必须给出变量名及其所属的类型,同时还可以指定其他特性。
在一个类中成员变量名是唯一的。
数据成员的类型可以是Java中任意的数据类型(简单类型,类,接口,数组)。
分为实例变量和类变量。
数据成员的声明格式:
[public|protected|private][static][final][transient][volatile]变量数据类型
变量名1[=变量初值],变量名2[=变量初值],…;
格式说明
●public、protected、private为访问控制符
●static指明这是一个静态成员变量
●final指明变量的值不能被修改
●transient指明变量是临时状态
●volatile指明变量是一个共享变量
11实例变量
没有static修饰的变量称为实例变量(InstanceVariables)。
用来存储所有实例都需要的属性信息,不同实例的属性值可能会不同。
可通过下面的表达式访问实例属性的值
<实例名>.<实例变量名>
12类变量
类变量也称为静态变量,声明时需加static修饰符。
不管类的对象有多少,类变量只存在一份,在整个类中只有一个值。
类初始化的同时就被赋值。
适用情况:
●类中所有对象都相同的属性
●经常需要共享的数据
●系统中用到的一些常量值
引用格式:
<类名|实例名>.<类变量名>
13方法成员
方法成员定义类的行为:
●一个对象能够做的事情
●我们能够从一个对象取得的信息
可以没有,也可以有多个;一旦在类中声明了方法,它就成为了类声明的一部分。
分为实例方法和类方法
声明格式:
[public|protected|private]
[static][final][abstract][native][synchronized]
返回类型方法名([参数列表])[throwsexceptionList]
{
方法体
}
格式说明:
⏹方法修饰
◆public、protected、private为存取控制符
◆static指明方法是一个类方法
◆final指明方法是一个终结方法
◆abstract指明方法是一个抽象方法
◆native用来集成java代码和其它语言的代码
◆synchronized用来控制多个并发线程对共享数据的访问
⏹返回类型
◆方法返回值的类型,可以是任意的Java数据类型
◆当不需要返回值时,返回类型为void
⏹参数类型
◆简单数据类型,
◆引用类型(数组、类或接口)
◆可以有多个参数,也可以没有参数,方法声明时的参数称为形式参数
⏹throwsexceptionList
◆用来处理异常
14包的作用
●将相关的源代码文件组织在一起;
●不同包中的类名可以相同,从而可以避免名字冲突;
●提供包一级的封装及存取权限。
15编译单元的组成
●所属包的声明(省略,则属于默认包);
●Import(引入)包的声明,用于导入外部的类;
●类和接口的声明。
16类的访问控制
类的访问控制只有public(公共类)及无修饰符(缺省类)两种
访问权限符与访问能力之间的关系如表
类型
无修饰
public
同一包中的类
yes
yes
不同包中的类
no
yes
17类成员的访问控制
类型
private
无修饰
protected
public
同一类
yes
yes
yes
yes
同一包中的子类
no
yes
yes
yes
同一包中的非子类
no
yes
yes
yes
不同包中的子类
no
no
yes
yes
不同包中的非子类
no
no
no
yes
18关键字this的使用
如果形式参数名与实例变量名相同,则需要在实例变量名之前加this关键字,否则系统会将实例变量当成形式参数。
2.3对象的初始化和回收
19构造方法
构造方法(Constructor)是一种特殊的方法。
Java中的每个类都有构造方法,用来初始化该类的一个新的对象。
构造方法具有和类名相同的名称,而且不返回任何数据类型。
系统在产生对象时会自动执行。
20构造方法的特点(简述构造方法的特点)
1)构造方法的方法名与类名相同;
2)构造方法没有返回类型(修饰符void也不能有);
3)构造方法通常被声明为公有的(public);
4)构造方法可以有任意多个参数;
5)构造方法的主要作用是完成对象的初始化工作;
6)构造方法不能在程序中显式的调用;
7)在生成一个对象时,系统会自动调用该类的构造方法为新生成的对象初始化。
2.4应用举例
2.5UML简介
第3章类的方法
1
2
3
3.1方法的控制流程
1Java中的流程控制
Java中的流程控制主要有顺序结构、选择结构和循环结构三种。
顺序结构即是按照从上到下的顺序执行语句,没有转移和重复。
选择结构是根据给定的条件成立与否,执行不同的语句或语句组。
Java的选择结构主要有二路选择结构(if选择结构)及多路选择结构(switch选择结构)两种。
循环控制结构是在一定的条件下,反复执行某段程序的流程结构,被反复执行的程序称为循环体。
2循环包括几个部分
1)初始化部分:
用来设置循环的一些初始条件,如计数器清零等。
2)循环体部分:
这是反复执行的一段代码,可以是单一的一条语句,也可以是复合语句。
3)迭代部分:
这是当前循环结束,下次循环开始执行的语句,常常用来使计数器进行增减操作。
4)终止部分:
通常是布尔表达式,每一次循环要对该表达式求值,以验证是否满足循环终止条件。
3break语句的用法
break语句可用于三种情况:
1)在switch结构中,break语句用来终止switch语句的执行。
2)在for循环及while循环结构中,用于终止break语句所在的最内层循环。
3)break语句也可用在代码块中,用于跳出它所指定的块。
4break与label一同使用举例
publicclassExamp3_7{
publicstaticvoidmain(String[]args){
outer:
for(inti=1;i<=9;i++){
for(intj=1;j<=9;j++){
if(j>i)break;
if(i==6)breakouter;
System.out.print(""+i+"*"+j+"="+i*j);
}
System.out.println();
}
}
}
5continue语句的用法
continue语句必须用于循环结构中,continue语句有两种使用格式:
1)不带标号的continue语句。
它的作用是终止当前这一轮循环,跳出本轮循环剩余的语句,直接进入当前循环的下一轮。
在while或do-while循环中,不带标号的continue语句会使流程直接跳转至条件表达式;在for循环中,不带标号的continue语句会跳转至表达式update-expression,计算并修改循环变量后再判断循环条件。
2)带标号的continue语句。
带标号的continue语句使程序的流程直接转入标号标明的循环层次。
6带标号的continue语句举例
publicclassExamp3_10{
publicstaticvoidmain(Stringargs[]){
outer:
for(inti=1;i<10;i++){
inner:
for(intj=1;j<10;j++){
if(i System.out.println();
continueouter;
}
System.out.print(""+i+"*"+j+"="+i*j);
}
}
}
}
7求出100以内的素数,并将这些数在屏幕上5个一行地显示出来。
publicclassprimeIn100{
publicvoidprime(){
intcount=0;
Outer:
for(inti=2;i<100;i++){
for(intj=2;j<=Math.floor(Math.sqrt(i));j++){
if(i%j==0)continueOuter;
}
System.out.print(i+"");
count++;
if(count%5==0)System.out.println();
}
}
publicstaticvoidmain(Stringargs[]){
primeIn100p=newprimeIn100();
p.prime();
}
}
3.2异常处理简介
8异常的基本概念
又称为例外,是特殊的运行错误对象,是面向对象规范的一部分,是异常类的对象。
Java中声明了很多异常类,每个异常类都代表了一种运行错误,类中包含了该运行错误的信息和处理错误的方法。
每当Java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个相应的该异常类的对象,即产生一个异常。
9错误的分类
通常程序中的错误可以分成三类,即编译错误、运行错误和逻辑错误。
Java系统中根据错误的严重程度不同,将错误分为两类:
1)错误:
是致命性的,即程序遇到了非常严重的不正常状态,不能简单地恢复执行。
2)异常:
是非致命的,通过某种修正后程序还能继续执行。
10异常的抛出和捕获
当程序中发生异常时,称程序产生了一个异常事件,相应地生成异常对象。
生成的异常对象传递给Java运行时系统。
异常的产生和提交的这一过程称为抛出。
异常发生时,Java运行时系统从生成对象的代码开始,沿方法的调用栈逐层回溯,寻找相应的处理代码,并把异常对象交给该方法处理,这一过程称为捕获。
11异常的处理
对于检查型异常,Java强迫程序必须进行处理,处理方法有以下两种:
1)声明抛出异常:
不在当前方法内处理异常,而是把异常抛出到调用方法中。
2)捕获异常:
使用try{}catch(){}块,捕获到所发生的异常,并进行相应的处理。
12用户自定义异常
用户自定义的异常类都必须是Exception的子类。
一般的声明方法如下:
publicclassMyExceptionNameextendsSuperclassOfMyException{
publicMyExceptionName(){
super("Somestringexplainingtheexception");
}
}
3.3方法的重载
13方法的重载
方法的重载(overloading)是指在一个类中可以有名字相同的多个方法,但这些方法的参数必须不同,或者是参数个数不同,或者是参数类型不同。
返回值可以相同,也可以不同。
第4章类的重用
4.1类的继承
1继承
继承是一种由已有的类创建新类的机制,是面向对象程序设计的基石之一。
一个新类可以从现有的类中派生,这个过程称为类继承。
派生出的新类称为已有类的子类,已有类称为超类(父类)。
2属性的隐藏
子类对从父类继承来的属性变量重新加以定义,则从父类继承的属性将被隐藏。
访问被隐藏的父类域有两种方法:
1)调用从父类继承的方法,则操作的是从父类继承的域;
2)使用super.域名
3属性隐藏的例子
classA1
{
intx=2;
publicvoidsetx(inti){
x=i;
}
voidprinta()
{
System.out.println(x);
}
}
classB1extendsA1
{
intx=100;
voidprintb()
{
super.x=super.x+10;
System.out.println
("super.x="+super.x+
"x="+x);
}
}
publicclassExam4_4Test
{
publicstaticvoidmain(String[]args)
{
A1a1=newA1();
a1.setx(4);
a1.printa();
B1b1=newB1();
b1.printb();
b1.printa();
b1.setx(6);//将继承来的x值设置为6
b1.printb();
b1.printa();
a1.printa();
}
}
运行结果:
4
super.x=12x=100
12
super.x=16x=100
16
4
4方法的覆盖
如果子类不需要使用从父类继承来的方法的功能,则可以声明自己的方法。
在声明的时候,使用相同的方法名及参数表,但执行不同的功能。
这种情况称为方法覆盖。
5需要使用方法覆盖的情况
1)子类中实现与父