java期末复习参考Word文档格式.docx
《java期末复习参考Word文档格式.docx》由会员分享,可在线阅读,更多相关《java期末复习参考Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
![java期末复习参考Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/20/6f9f3ade-357a-40e2-8ab8-0a56508956ae/6f9f3ade-357a-40e2-8ab8-0a56508956ae1.gif)
}
的确是教材写错了,如按教材所示,下列测试代码:
classStudent_ex{
publicstaticvoidmain(Stringargs[]){
Students1=newStudent("
李小明"
newMyDate(),"
计算机"
);
Students2=newStudent(s1);
//调用拷贝构造方法
System.out.println(s1==s2.);
//false,不是一个对象
System.out.println(s1.name==s2.name);
//true,值相等
System.out.println(s1.birthday==s2.birthday);
//true,引用相等,//说明没有深拷贝
教材那两行代码应改为:
publicStudent(Students)//深拷贝构造方法
{super(s);
//调用父类Person已实现的深拷贝构造方法
this.count++;
//这行可有可无,有则能正确对子类对象计数
则下列测试代码:
//false,引用不相//等,说明有深拷贝
}
P92-93“3.4.2类型的多态”,理解“子类对象即是父类对象(或子类isakindof父类),这个知识点对以后的JAVA高级课程学习至关重要。
P94-95理解多态的toString()和equals()方法。
P95例3-6,阅读理解对象数组,对象作为方法的参数及返回值的设计,这几个知识点对以后的JAVA高级课程学习至关重要。
3.5类的抽象性(本小节不单独出简答题,而是结合代码阅读或编程题去理解概念)
P99例3-7,阅读理解:
怎样写抽象类?
抽象类有什么用(主要是设计与实现分离,抽象方法可以看作是标准)?
多态是怎样实现的?
关键代码是P101④
CloseFigureg=newEllipse(10,30)
这几个知识点对以后的JAVA高级课程学习至关重要。
P101了解最终类和最终方法。
专业英语词汇:
(说出以下词汇的英文名,不需要解释)
类,对象,封装,继承,多态,实例,重载,覆盖,引用(注:
这些单词在课本第三章都找得到)
P102习题3【用绿字标识的习题,不单独出简答题,而是结合代码阅读和编程题理解相关知识点】
3-1[题目及答案略]
3-2答:
基本类型传值,引用类型引传引用(类似与C语言指针或数组作为函数参数)
3-3答:
能。
因为参数是引用类型,修改形参同时也修改实参。
但本例的“交换”只是交换了对象的引用,对象本身还是原地不动。
请写一个程序测试这两个方法。
3-4面向对象的三个核心特性是什么?
答:
封装,继承,多态
3-5什么是封装?
为什么要将类封装起来?
封装的原则是什么?
见P72,理解答案即可,不要硬背。
3-6答:
见P73,P81。
3-7答:
见P73。
另外还和以从继承方面说明
//3-8类中的方法与C++函数的区别是什么?
主要区别是方法从属于类,C++函数可以独立存在。
3-10答:
只需掌握public和private即可。
3-11答:
private只能修饰属性和方法,不能修饰类
3-12答:
语法无错,但设计概念不对。
但属性最好不要public,这首先不符合封装性原则,其次用户直接操作这些属性易造成数值越界(比如day=32)。
应把它们声明为private的,然后声明一些public的get***()和set***()方法,间接操纵属性,好处是对用户隐藏了属性名,符合封装性原则,再者不易造成数值越界。
3-13答:
语法无错,但设计概念不对,应把set()内的
intyear=y;
的int去掉。
因为intyear声明了方法内的局部变量,与属性year无关,这样set()方法不能给属性year赋期望的初值。
比如:
set(1920,10,10),属性year没得到1920,而为默认值0
这个题考的是变量的作用域。
3-14答:
如与13题联系起来看则与13题犯同样错误。
如单独看month,day没有声明类型。
3-15答:
形参中的intday=1是语法错。
3-16答:
引用类型只能判等,不能比较大小。
见教材P72叙述。
//3-17答:
这个题想输出1980-12-10这种格式的日期,中间插入“-”字符串也可以把year,month,day自动转为String类型,教材P62说过,字符串与其它类型+时,可把其它类型自动转为字符串,但“-”字符串应该用双引号而不是单引号。
//3-18答:
参数类型和个数问题,可参见教材在该例题后面的说明。
3-19说明静态成员和实例成员的区别
实例成员(属性/方法)属于对象,只能通过对象名.属性名或对象名.方法名访问。
静态成员(static属性/方法)属于类,即可以按实例成员访问,也可通过类名.属性名或类名.方法名访问。
另外,一个static属性无论创建多少对象,始终只占有一个内存单元,可以作为多个对象的“共享变量”使用。
3-20什么是继承?
继承机制的作用?
子类继承了父类中的什么?
子类不需要父类中的成员怎么办,能够删除它吗?
JAVA允许一个类有多个父类吗?
在已有类的基础上定义新类为继承。
继承机制可以在不修改父类代码的前提下扩展其功能,这对软件的复用和升级维护特别重要。
子类继承了父类中除构造方法以外的所有成员。
子类不需要父类中的某个成员,不能删除它,但可以覆盖(override)它,使其具有新的含意。
JAVA不允许一个类有多个父类。
3-21
public和protected,还有缺省(以包为界)。
见P87“4子类对父类成员的访问权限”
3-22
答:
Object类。
它是所有类的根类。
3-23
见教材第4章有关Object类的讲解
3-24如果子类声明的成员与父类成员同名会怎么样?
参考P88“3.4.1子类重定义从父类继承来的成员”,要点是用super区分子类和父类成员。
3-25super引用有什么作用?
有几种使用方法?
一是调用父类的构造方法(P87),二是区分子类和父类成员
(P88)。
3-26什么是多态性?
什么是方法的重载?
方法的重载和覆盖有何区别?
多态原意为一名字有多种含义,在OO语言中,是指一个方法可以有多种实现,即“一个定义,多种实现”。
方法的重载(overload)是指在一个类里,用不同参数,写若干个同名方法。
这可以简化外界对类的理解,符合类的封装原则,同时重载也是多态的一种。
方法的重载和覆盖(override)主要区别是:
前者发生在一个类内,后者在父类和子类之间。
3-27什么是运行时多态?
方法的重载和覆盖分别是什么时多态?
编译时多态是指编译时即绑定多态对象,又叫静态联编,早绑定。
运行时多态是指运行时才能确定要绑定的对象,又叫动态联编,晚绑定。
方法的重载都是编译时多态,而覆盖分两种情况:
当对象引用本类对象时,是编译时多态,否则(比如父类对象引用子类实例)为运行时多态,运行时多态在JAVA高级编程中特别重要。
[参见P93]。
//3-28
如this是子类对象,则调用子类的howmany();
如this是父类对象,则调用父类的howmany()。
3-29
这个题很有意思,首先
Objectobj=”abc”;
对不对?
Objectobj=newString(”abc”);
全对,因为Object是所有类的父类,子类对象即父类对象,赋值兼容,参见P93“父类对象引用子类实例”。
其次,obj.toString()和obj.length()执行的是那个类的方法呢?
先参见P93“3运行时多态”。
由此可知obj.toString()执行的是String的toString()。
由于Object没有定义length(),String类的length()不是覆盖Object的同名方法,因此obj.length()调用失败。
3-30
此题第二行应改为Stringstr=(String)obj;
写成
Stringstr=obj也可以。
这样就无错了,obj.toString()执行的是String类的toString()。
原因见29题。
//3-31
此题与上面2题应是同一性质的。
//3-32
参见P92“(3)子类继承并重载父类成员方法”
//3-33
这样做不是覆盖(JAVA语法要求方法覆盖时,其方法名称、返回类型及参数类型完全与父类相同),也不是重载(JAVA语法要求方法重载必需是参数类型或个数不同)。
应该是不行,可以上机试一下。
3-34什么是抽象类?
在什么情况下需要设计抽象类?
抽象类是否必需有抽象方法?
abstract声明的类称为抽象类,抽象不能被实例化。
当要表示一个抽象概念,该抽象概念可以有多种实现,可以使用抽象类,这也是多态的一种。
抽象类中可以没有抽象方法。
需要注意的是:
实现抽象类的子类和抽象类之间,应该是isakindof关系,即“子类是父类的一类”,否则应该使用接口。
这是重要的设计概念,不是JAVA语法要求。
3-35什么是最终类?
什么情况下需要设计最终类?
最终类中是否必需有最终方法?
final声明的类称为最终类。
如果一个类不需要被继承,可声明为最终类。
最终方法是用final声明,不能被子类重写的方法,最终类中不必有最终方法。
3-36
除了3-35题的两种用法外,final还可以声明常量。
3-37
抽象类可以有构造方法,但抽象类不能被实例化。
抽象类的构造方法是供子类调用的。
构造方法不能声明为抽象方法,这样的话子类无法调用。
//3-38
不影响运行时多态性。
无论修改与否,父类的area()都没被执行,执行的总是子类的同名覆盖area()。
//3-393-40
这两题在第一章中讲过了。
补充习题:
1.指出下列哪个方法不是publicvoidadd(inta){}合理的重载方法。
____。
A、publicintadd(inta)B、publicvoidadd(inta,intb)
C、publicvoidadd(floata)D、都是合理的。
A
2.下列构造方法的调用方式中,正确的是____。
A、按照一般方法调用 B、由用户直接调用
C、只能通过new自动调用 D、被系统调用
C
3.在Java中,能实现多重继承效果的方式是____。
A、内部类B、适配器 C、接口 D、同步
4.判断以下观点的对错:
(1)重载是编译时多态,又叫对象的静态绑定、早绑定。
而覆盖有时为运行时多态,又叫对象的动态绑定和晚绑定。
(2)重载可以简化对象与外界的接口。
(3)程序的注释要写被注释的代码做什么,而不要写怎么做。
(4)在子类的构造方法中可以使用super调用父类的构造方法。
(5)publicclassMyClassextendsObject和publicclassMyClass两种写法等效。
全对。
5.判断以下观点的对错:
(1)抽象类和接口都不能被实例化;
(2)抽象类可以声明成员变量(属性)和非抽象方法,而接口不能;
(3)抽象类和其子类体现的是继承关系,它们是“一类”对象。
而接口与实现接口的类之间体现的是契约----实现关系,他们往往不是“一类”对象。
(4)Java语言中,类的多重继承只能通过实现多个接口完成。
(5)Java语言中,非抽象类可以继承抽象类,反之亦然。
6.简要回答:
(1)Java关键字final,
如用于修饰变量,则该变量的特点是________________;
如用于修饰方法,则该方法的特点是____________________;
如用于修饰类,则该类的特点是_____________________。
(2)Java关键字static,
如用于修饰类的属性(成员变量),则称为实例成员或静态成员,
其特点是_________________________________________________;
如用于修饰方法,则称为类成员方法或静态方法,其特点是___________________________________________________;
(1)常量,不能被子类覆盖,不能被继承。
(2)该类所有对象共享该成员变量,该方法无需实例化就可用类名.方法名引用。
7.下列代码
public
class
Person
{
int
arr[]=new
int[10];
static
void
main(String
args[])
System.out.println(arr[1]);
}
}
意图是输出arr[1]的值(为0),但程序在编译时报错,错误的原因是什么?
类成员arr[]不是静态的,需要实例化的对象才能被引用。
//8.递归算法的优缺点?
(此题应放在第2章)
递归算法简洁优雅,有的问题也只能用递归算法实现。
缺点是效率低下,占用过多的栈空间易造成栈溢出。
9.什么是JAVA垃圾自动回收机制
内存自动管理技术,可以按某种策略自动回收堆中的无用对象,防止内存溢出。
这是JAVA的重要特性。
//10JAVA垃圾自动回收机制不能回收哪几种对象?
文件,数据库连接,网络连接。
这三种对象必需由程序员显式调用close()方法关闭,close()方法本质上是析构方法(JAVA类析构方法的名字是finalize())。
11.==和equals()有何不同?
==用于基本类型,判断值是否相等,用于引用类型(对象),则判断其引用(地址)是否相当,一般情况下,我们不用==判定对象是否相等,而用equals()方法。
equals()方法原始定义在Object类中,,本意也是判断两个对象引用(地址)是否相当,但Object的子类大都覆盖了这个方法,变为两个对象只要属性值一一相等,就为true。
JAVA期末复习第四章接口、内部类和JAVAAPI基础
这一章不指定阅读范围,只需作下面的重点习题。
P126习题4【用绿字标识的习题,不单独出简答题,而是结合代码阅读和编程题理解相关知识点】
4-1答:
看教材,自已组织答案。
4-2答:
接口是一种引用数据类型,因此能够声明接口对象,接口对象引用实现它的子类的实例,这肯定是运行时多态。
//4-3什么是单重继承?
什么是多重继承?
类的层次体系为什么需要多重继承?
单重继承有什么缺点?
既然有缺点,为什么JAVA仍采用单重继承?
JAVA怎么实现多重继承?
单重继承是一个子类只能有一个父类,多重继承是一个子类可以有多个父类。
编程要解决的一些实际问题本身是多重继承的,单重继承解决这些问题较困难。
JAVA仍采用单重继承,原因主要是编译器实现方便、效率高、可回避多重继承带来的语义歧意等,JAVA允许多重继承接口弥补不能多重继承实类带来的不足。
4-4答:
按P106-107对接口的语法要求核对
4-5说明接口和抽象类(语义)的区别
无需回答语法的区别,只需回答语义的区别。
抽象类与其类应为isakindof的关系,而接口与实现它的子类之间只是“实现或契约”关系。
接口和接口都是概念与实现相分离的机制,这种机制允许“一个概念,多种实现”。
4-8答:
(只需回答第1问)为了使JAVA完全面向对象,方便进行类型转换等。
//4-14答:
泛型是一个需要了解的概念,请参见老师课件第四章PART4。
1类以类之间存在哪几种关系?
常见的有使用,依赖,继承/实现,组成/聚集。
在软件设计中,类之间的关系要尽可能松散(低藕合),所以在设计时,使用优先于依赖,组成/聚集优先于继承/实现。
上述知识属于软件工程,UML语言等课程的内容。
2阅读教师课件第四章PART1,掌握其中的主要概念和术语,期末考试本部分有2到3道简单题。
JAVA期末复习第五章异常处理
P140习题5
1
JAVA采用异常处理机制是为了弥补面向过程(比如C)语言对运行时错误处理能力的不足,其目的是为了给程序员提供便利。
JAVA的异常处理机制通过两方面实现:
一是将常见的运行时错误封装成错误类和异常类(它们是JDK的一部分),二是JAVA语法中的try,catch,finally,throw,throws等关键字。
异常处理机制不能解决程序运行中的所有错误,比如Error类及其子类的错误。
参见P129和P130图5-1。
2答:
上机一试
//3答:
参见P130图5-1
4答:
请自己组织答案。
//5答:
参见P130图5-1或P131
(1),(5)
6答:
try{},catch(){},finally{}语句块,参见P132
//7答:
因为字符串中含有非0-9的字符时不能转成数字,数字转成字串应不会抛出异常。
8答:
9此题如能正常通过编译,则运行时catch(Exceptione)捕获到异常。
此题如不能正常通过编译,则在编译时就会发现NumberFormatException异常。
上机一试。
10答:
如JDK或自定义的异常类确有DateException类,运行时不能捕获异常,因为inti….抛出的异常类型与DateException类型不符。
如没有DateException类,则编译时就会报错“找不到符号”。
11答:
throw在语句中抛出异常,throws在方法声明中抛出异常。
12答:
在方法声明中写throws子句,见P137。
//13答:
前面加上一句importjava.io.*;
再将throw改成throws
14答:
当JDK中的异常类不能满足需要时,可继承Exception类编写自定义异常类,参见p138。
1什么是抛出异常?
创建一个异常类对象叫抛出异常。
JAVA期末复习第六章图形用户界面
这一章不指定阅读范围,只需作下面的重点习题:
P150例6-2。
该例题期末考试必考。
通过阅读此例理解P142-150组件、容器、窗口与面板、框架与对话框、标签、按钮、文本行、布局、事件等概念(无需记忆相关类的方法)。
尤其是单击和窗口事件处理的过程。
//补充教材:
GUI程序编写的两个问题,该部分不在期末考试范围之内。
1怎样写事件处理方法(有关MVC的一些知识)
JAVAGUI程序不难写,把界面布局好了以后,注册事件、写事件处理方法就可以了,界面布局代码很繁杂,但小学期JAVA实训的时候会发现,使用eclipse等高级的开发工具,这部分代码几乎不需要写,用组件拖放操作eclipse可以自动替你写,事件的注册和事件处理方法声明eclipse可以自动替你写。
程序员似乎只需填写事件处理方法就可以了,这给新手造成一个错觉,以为所有的算法都可以写在事件处理方法内部,使代码“陀“成一堆,非常不清晰。
下面再阅读一下P150例6-2。
。
这个程序有什么毛病呢?
在事件处理方法中,实现转换的那几行代码是与界面显示无关的,它们是算法部分。
这个例子的算法只有几行代码,这样写说得过去,但如果算法有几十行几百行呢?
如果算法很多呢?
要单独给算法写一个类,在事件处理方法中调用这个类。
有些同学知道三