1、Java语言程序设计B 复习提要 1、类、对象的概念,类与对象的关系(P8)。 答:类是同一种(具有相同属性和行为)对象的集合与抽象。对象是现实中的具体实体。 2、面向对象的三大特征(P9)。 答:抽象、封装、继承和多态。 3、封装、继承和多态的概念。Java语言实现多态有哪三种方法(P9)? n 封装是将对象的属性和行为组合成为一个独立的单位或部件,并尽可能隐蔽对象的内部细节,而只保留必要的对外接口,使之与外部发生联系。它是面向对象的重要原则。 n 继承是指一个对象是对另一个对象的扩展,它除了包含被继承对象的已有属性的操作之外,还可以加入新的特性。 n 多态性是指同一个消息
2、可以根据发送对象的不同而产生不同的效果的行为方式。利用多态性可以实现用相同的方法调用作用于不同类型的对象。 n 实现多态的方法:方法重写(方法覆盖)、方法重载、接口 4、JDK安装目录下,bin文件夹中的可执行文件javac.exe,java.exe,appletviewer.exe和javadoc.exe的作用(P19)。 答:javac.exe:Java语言编译器,它负责将Java源代码(以Java为扩展名)编译为字节码(以class为扩展名) java.exe:Java语言解释器,它负责执行Java字节码文件; appletviewer.exe:Java Applet小程序查看
3、器。 javadoc.exe:Java语言文档生成器,将源程序文档中的注释取成html格式文件。 5、Java程序的分类(P21)。 答:应用程序(Application),它类似与以往用其它高级语言开发的程序,可以在本机上开发,也可以在本机运行,它的执行入口点中main()方法。另一类是小型应用程序Applet,它需要通过浏览器下载运行,其中没有main()方法。 6、Java的基本类型包含了哪8种,字符使用什么编码形式(P47-48)? 答:整数型、浮点型、布尔型与字符型四类八种。其中数值型6种分别为整数类型int类型4个字节,short类型2个字节,long类型8个字节,byt
4、e类型1个字节。浮点类型中float类型4个字节,dpuble类型8个字节。 字符编码使用Unocode编码体系,双字节。 7、一个浮点常量没有使用表示类型的后缀字母f或d,则该浮点常量的类型是那种(P50)? 答:整形默认类型为int类型,浮点类型默认类型为double类型。加E表示指数方式,加F表示单精度float,加D表示双精度double。在E的前面至少要有一位数字。 8、字符串的连接运算符是哪个(P51)? 答:使用“+”符号实现两个字符串的连接。”How ”+”are you”表示”How are you” 9、Java语言中的布尔常量只有两个,写出它们的常量表示形式(
5、P51)。 答:true与false。只能是其中的一个。 10、对象运算符是:instanceof,它有何用途(P58)? 答:它用于测定一个对象是否属于某个指定类或指定类的子类的实例,它是一个双目运算符,左边的表达式是一个对象,右边的表达式是一个类,如果左边的对象是右边的类创建的对象,则运算结果为true,否则为flase。 11、Java中的常用数学函数定义在那个类中,这些函数都用public和static修饰,可以直接用类名来调用,写出调用的一般形式(P68)。 答:常用的数学函数在Math类中。其一般的形式如下:import java.lang.math.*,一般可以直接引用
6、类中的方法。 Math.sin(Math.PI/4),Math.sqrt(XXXX),Math.pow(aInt,bInt)等,参考API文档。 12、习题:3.1,3.3,3.7,3.9(P72-73) //第3章习题1 非法变量名称:A=b byte 3ABC ‘abc’ -0xab4 -3el k*j //第3章习题3,程序名:X03_03_Switch.java public class test{ public static void main(String args[]) { int x=1,a=0,b=0; switch(x) {
7、 case 0:b++; case 1:a++; case 2:a++; b++; } System.out.println("a="+a+"\tb="+b); } } 运行的结果是:a=2 b=1 注意题目中的控制位置有两处,最终输出的时候重新修改了. 第3章习题3.7,计算100(含100)以内的所有偶数的和、所有奇数的和。程序名:X03_07_OuJiSum.java public class X03_07_OuJiSum { public static void main(String[] args) {
8、 int k,sumOu=0,sumJi=0; for(k=1;k<=100;k++){ if(k%2!=0){ sumJi+=k; System.out.print("奇数:"+k); }else{ sumOu+=k; System.out.println("\t\t偶数:"+k); } } System.out.println("100以内所有奇数的和="+sumJi+"\t\t所有偶数的和="+sumOu); } } //第3章习题9,用while循环语句写程序求e的值,要求直到最后一项的值小于
9、10-4。程序名:X03_09_CalculateE.java public class X03_09_CalculateE { public static void main(String[] args) { int n=1; final double E1=0.0001; double sumE = 1.0,temp=1.0; temp=1/fct(n); while (temp>=E1){ sumE += temp; n++; temp=1.0/fct(n); } System.out.println("n="+(n
10、1)+",sumE=" + sumE); } static long fct(int n){//计算n! long JieCheng=1; for (int k=1;k<=n;k++){ JieCheng*=k; } return JieCheng; } } 13、Java中数组声明和数组创建的含义相同吗?指出下面语句的作用(P76): 声明数组可以使用int student[]或int[] student;声明数组只是给出了一个数组的名称的数据的类型,要使用数组还要为数组分配内存空间。如下格式: int student[];//声明
11、数组 student=new student[50];//为数组分配内存空间 14、数组被初始化后,如果想知道这个数组的元素个数,要使用数组的哪个属性(P77)? 答:使用length属性确定。 15、Java二维数组允许各行有不同的元素个数吗(P80)? 答:可以。Java的数组定义方式与其它语言不同。它是按一维建立相应的二维,并以此类推。 16、Java中使用那个类创建字符串常量,使用那个类创建字符串变量(P88)? 答:String类,声明常量格式stringName=字符串常量;如:str=new String(“Java程序设计”)或str=” Java程序设计” 1
12、7、习题:4.4,4.6(P104)。
//第4章习题2,程序名:X04_04_ArrayCoverse.java
public class X04_04_ArrayCoverse {
public static void main(String[] args) {
int iArray[]={9,5,7,4,8},temp,count;
count=iArray.length;
System.out.println("数组原有数据:");
for(int k=0;k 13、t");
}
System.out.println();
for(int k=0;k 14、4章习题6,程序名:X04_06_CharCount.java
import javax.swing.JOptionPane;
public class X04_06_CharCount {
public static void main(String[] args) {
int count = 0, k = 0,spaceV=0,charV=0,numberV=0;
String str;
char cArr[];
str = JOptionPane.showInputDialog("请输入一个字符串:");
cArr = str.toCharArray 15、);
count = cArr.length;
for(k=0;k 16、str+",\t字符串长度是:"+str.length());
System.out.println("字母的个数:"+charV+",\t空格的个数:"+spaceV+",\t数字的个数:"+numberV);
}
}
18、类声明时,类的访问权限修饰符有哪两种情况?如果在类说明中无extends,则隐含地假设其父类是哪个类(P107)?
答:(1)类定义修饰符说明类的性质和访问权限,包括public、默认修饰符、abstract、final。
(2)extends说明类的父类,一般形式为extends<父类名>,在Java中如果说明extends,则隐含假设其父类为Jav 17、a.lang.object。
19、类中所定义的变量和方法都是类的成员。为类的成员定义一定的访问权限,限定其它对象对它的访问。访问权限有哪4种?分别具有什么样的访问权限(P108)?
答:(1)public说明的变量是公有变量,其访问权限是允许任何程序包中的类访问,其作用域最广。
(2)private说明的变量是私有变量,其访问权限只能是被定义它的类中的方法访问。
(3)protected是保护变量,其访问权限只能中类本身,子类及在同一个包中的所有类的变量访问。
(4)默认修饰符:也称隐含修饰符,它不属于Java的关键字,其作用是控制变量的访问权限,如果一个变量没有显式说明访问权限, 18、则表示使用默认的修饰符,它允许类本身用在同一个包中的类的变量访问。
20、对类的成员来说,可分为实例成员和类成员,如何区分(P108)?
答:用static说明的变量是一个静态变量,也称类变量。无static说明的变量为实例变量。它们之间的区别是:实例变量必须通过类的对象访问,每个对象都有这些变量的备份;而静态变量则独立于该类中的任何对象,它在类中只有一个备份,可以不通过类的对象直接使用,它一直属于定义它的类。
21、说明修饰符:final、static、abstract和synchronized 的作用(P109)?
答:(1)final说明该方法为最终方法,指该方法不能被其所在类的 19、子类重载,只能继承,不能重写。
(2)static说明该方法为静态方法,也称为类方法,在使用该方法时不需要初始化该方法所在的类。此方法也不能被其它方法重载。
(3)abstract说明该方法是抽象方法,该方法只有说明,没有方法体,方法在所在类的子类中被具体实现。
(4)synchronized说明是同步方法,主要用于多线程程序设计,用于保证在同一时刻只有一个线程访问该方法。它是实现资源之间协商共享的保证方式。
22、构造方法有返回值吗?构造方法可以从父类中继承吗?一个类可以有多个构造方法吗?可以直接通过方法名调用构造方法吗(P110)?
答:构造方法主要用于为类的方法中的变量赋初值, 20、当使用new创建一个类的新对象的时候,构造方法就立刻执行。它必须与类名相同。
(1)它没有返回值类型,没有void,其修饰符只能是文章控制修饰符public、private或protected其中之一。
(2)它不能从父类中继承。
(3)可以重载,一个类可以有任意多个构造方法,不同的对象根据参数的不同状态选择合适的构造方法。
(4)它不能通过方法名直接引用,必须通过new运算符。
(5)可以调用当前类和其父类的另一个构造方法,但必须是方法体的第一个语句。
23、什么是方法重载?说明例5.5中方法重载情况,分析运行结果(P114)。
答:在Java类中可以创建名字相同,但参数和返回 21、值不同的多个方法,这就是方法重载(overloading)。Java系统通过参数和返回值来区分具体是哪个方法。通过方法重载,一个类中可以有多个名字相同的方法,通过对其传递的不同参数调用特定的方法,这就是多态。
24、什么是变量隐藏?什么是方法覆盖?说明例5.8中变量隐藏和方法覆盖情况,分析运行结果。
答:子类继承父类后,如果出现子类的成员变量与父类的成员变量相同,则子类将父类的成员变量隐藏起来,在此情况下,子类使用的变量是它自己的变量,而不是父类的成员变量。
//例5.8,成员变量隐藏和方法覆盖应用举例。程序名L05_08_SuperUse.java
class Superclas 22、s{
int x;
Superclass(){
x=3;
System.out.println("in Superclass:x="+x);
}
void dosomething(){
System.out.println("in Superclass.dosomething()");
}
}
class Subclass extends Superclass{
int x;
Subclass(){
super();
x=5;
System.out.println("in Subclass:x="+x);
}
v 23、oid dosomething(){
super.dosomething();
System.out.println("in Subclass.dosomething()");
System.out.println("super.x="+super.x+"\tsub.x="+x);
}
}
public class L05_08_SuperUse{
public static void main(String[] args){
Subclass Subc=new Subclass();
Subc.dosomething();
}
}
2 24、5、什么情况下使用super和this(P119)?
答:子类继承父类之后,如果成员变量与父类相同。则父类的变量被隐藏,如果子类要调用父类的变量则需要使用super。
(1)用来访问父类中被覆盖的方法;
(2)用来访问父类中的构造方法;
(3)用来访问父类中被隐藏的成员变量。
This是Java的关键字,它表示每个实例对象指向自己的引用,一般只能用于在实例方法或构造方法中,不能出现在类方法中。
26、Java中一个类的父类只能有一个吗?一个接口的父接口也只能有一个吗?
答:通过继承方式只能有一个父类,但通过接口方式可以有多个父类。
27、在一个Java源程序文件(.java)中 25、可以定义一个类,也可以定义多个类,若定义多个类,其访问权限为public的类能有几个?编译后的字节码文件(.class)有几个?
答:可以定义多个类,对于使用访问权限为public的类没有限制,生成的class文件数量与其相同。
28、习题:5.6、5.9、5.15、5.16(P141)
//第5章习题15,程序名:X05_15_Student.java
class X05_15_Student {
private String sname;
private int sbirthday;
private String sclass;
X05_15_Student() 26、 {
}
X05_15_Student(String name, int birthday, String class1) {
sname = name;
sbirthday = birthday;
sclass = class1;
}
void setname(String name) {
sname = name;
}
String getname() {
return sname;
}
void setbirthday(int birthday) {
sbirthday = birthday;
}
27、
int getbirthday() {
return sbirthday;
}
void setclass(String class1) {
sclass = class1;
}
String getclass() {
return sclass;
}
void print() {
System.out.println("sname=" + sname + "sbirthday=" + sbirthday
+ "sclass=" + sclass);
}
class CollegeStudent exten 28、ds X05_15_Student {
void setbirthday(int birthday) {
if (birthday >= 17 && birthday <= 30)
sbirthday = birthday;
else
System.out.println("Not a collegestudent!");
}
}
}
//第5章习题16,程序名:X05_16_ AbstractUse.java
abstract class Shape {
abstract double Area();
abstract d 29、ouble Perimeter();
}
class Rectangle extends Shape {
private double length;
private double width;
Rectangle(double l, double w) {
length = l;
width = w;
}
double Area() {
return length * width;
}
double Perimeter() {
return 2 * (length + width);
}
void Pri 30、nt() {
System.out.println("Rectangle:length=" + length + "," + "width="
+ width + ",Area=" + Area() + ";Perimeter=" + Perimeter());
}
}
class Circle extends Shape {
private double radius;
Circle(double r) {
radius = r;
}
double Area() {
return Math.PI * radius * radiu 31、s;
}
double Perimeter() {
return 2 * Math.PI * radius;
}
void Print() {
System.out.println("Circle:radius=" + radius + ",Area=" + Area()
+ ";Perimeter=" + Perimeter());
}
}
public class X05_16_AbstractUse {
public static void main(String args[]) {
Circle aCircle = n 32、ew Circle(4);
Rectangle aRect = new Rectangle(5, 12);
aCircle.Print();
aRect.Print();
}
}
29、什么是异常?什么是抛出异常?什么是捕获异常(P144)?
答:异常是指程序在某些运行情况下,会使当前正在执行的方法或代码块无法继续运行的问题,普通的问题在编码时可以得到足够的信息来处理普通问题。但当异常发生时,由于无法获得足够的信息,因此只能选择跳出当前的运行代码,或者将问题交给上层代码去处理,这就是异常抛出。当Java系统运行时得到一个异常对象时,它会沿着方法的调用栈依次回溯,寻找 33、处理这个异常的代码,找到能够处理这类异常的方法后,运行时系统将当前的对象交给这个方法处理,这个过程就是捕获异常。
30、(P145)根据程序对错误与异常的处理方式,可以将Java中的异常分为哪3类?
答:(1)Error类:指系统级的错误,无法解决。
(2)RuntimeException类:可以避免,一般不会影响系统的运行,可以不处理。
(3)Exception类:程序运行中必须捕获的异常,使用try……catch….方法。
31、使用什么语句捕获并处理异常?使用什么语句人为抛出异常?使用什么子句声明方法抛出异常(149-150)?
答:try-catch-finally语句用于 34、捕获并处理异常。
32、习题:6.10(P157)
答:
33、习题:7.3(P174)
答:Applet执行的方法主要为:init()、start()、stop()、destroy()和paint()。它们的执行过程取决于程序设计人员。
34、容器(Container)类包含了Panel、Window、Frame和Dialog等子类,其中,那些类容器不带边框?那些类容器带边框?Container类的那个方法可以向容器中添加组件(P177)?
答:Panel子类不带边框,其它类均有边框
35、Java.awt包中为容器定义了哪5种布局管理器?Panel的默认布局管理器是哪个? 35、Window、Frame和Dialog的默认布局管理器是哪个?使用容器类的那个方法设定布局管理器(P180-181)?
36、在Java的事件处理过程中,主要涉及哪三类对象(P186)?
答:(1)Event:事件,用户对界面操作在Java语言上的描述,以类的形式出现。
(2)Event Source:事件源、事件发生的场所,通常就是各个部件。
(3)Event handler:事件处理者,接收并能够处理事件。
37、使用委任事件模型进行事件处理,一般通过那些步骤来接受和管理事件(P186)?
答:(1)让类声明所需要的监听器。针对XXXEvent使用XXXListener
36、2)为组件(事件源)登记接口。针对组件进行授权,使用addXXXListener方法来注册监听器
(3)在类中实现接口中声明的事件处理方法。
38、分析例8.6程序。(P210)实验:2.(3)(P189)
//例8.6 事件处理模型的应用举例。程序名L08_06_ActionHandleDemo.java
import java.awt.*;//引用awt类包
import java.awt.event.*;//引用事件包
public class L08_06_ActionHandleDemo extends Frame implements ActionListener{ 37、
static L08_06_ActionHandleDemo frm=new L08_06_ActionHandleDemo();
static Button btn=new Button("请单击!");//新建对象同时设置title
public static void main(String args[]){//main方法开始
btn.addActionListener(frm);//为按钮增加监听器
frm.setLayout(new FlowLayout());//设置窗体的布局
frm.setTitle("事件测试窗口");//设 38、置窗体的title
frm.setSize(300,200);//设置窗体的大小
frm.add(btn);//将按钮加入窗体中
frm.setVisible(true);//设置窗体可见
}
public void actionPerformed(ActionEvent e){
frm.setBackground(Color.blue);
}
}
39、Jvav的一个线程由哪几部分组成(P213)?
答:(1)虚拟处理机(虚拟CPU),封装在java.lang.Thread类中。它控制着整个线程的运行。
(2)执行的程序代码( 39、Code),传递给Therad类,由Thread类控制顺序执行。
(3)程序所处理的数据(Data)传递给Thread类
40、Java中可以采用哪2种方式创建新的线程?分析例9.1和9.2中创建线程的方法(P215)?
答:(1)扩展thread类:首先扩展java.lang.Thread的类,然后用希望执行的代码来实现run()方法,再通过new关键字实例化该类的一个新对象(一个线程),最后通过start()方法启动线程。
(2)实现Runnable接口:Runnable接口实现类,然后创建一个Thread类的对象(创建一个新线程),最后用线程对象调用start()方法启动线程。
40、
//通过继承线程创建线程举例。程序名:L09_01_ExtendsThread.java
public class L09_01_ExtendsThread extends Thread { // 继承Thread类
int count = 1, number;
public L09_01_ExtendsThread(int num) { // 通过形参num接收参数传递
number = num;
System.out.println("创建线程 " + number);
}
public void run() { // 重新构造run()方法
41、while (true) {
System.out.println("线程 " + number + ":计数 " + count);
if (++count == 5)
return;
}
} // run()
public static void main(String args[]) {
for (int i = 0; i < 10; i++) {
L09_01_ExtendsThread tt = new L09_01_ExtendsThread(i + 1);// 构造线程tt并向其传递参数
tt.start(); / 42、/ 通过调用start()方法启动线程
}
} // main()
}
//通过Runnable接口创建线程举例。程序名:L09_02_ImplementsRunnableThread.java
public class L09_02_ImplementsRunnableThread implements Runnable { // 实现Runnable接口
int count = 1, number;
public L09_02_ImplementsRunnableThread(int num) {
number = num;
System.out.p 43、rintln("创建线程 " + number);
}
public void run() { // 重新构造run方法
while (true) {
System.out.println("线程 " + number + ":计数 " + count);
if (++count == 5)
return;
}
} // run()
public static void main(String args[]) {
for (int i = 0; i < 10; i++) {
L09_02_ImplementsRunna 44、bleThread yourt = new L09_02_ImplementsRunnableThread(i + 1);
Thread tt = new Thread(yourt); // 创建一个新线程
tt.start(); // 启动线程
}
} // main()
}
41、使用Thread类的哪个方法使当前等待?哪个方法唤醒一个等待中的线程(P215)?
答:(1)public static void sleep(long milis)是实现使当前线程睡眠指定的时间。
Public final void wait()是导致当前的线程等待
(2)p 45、ublic final void notify()是唤醒一个等待中的线程。
42、按照线程体在计算机系统内存中的状态,可以将线程从产生到灭亡分为哪五种状态(P218)?
答:依次为(1)新建状态(2)就绪状态(3)运行状态(4)挂起状态(5)死亡状态。
43、Java使用那个关键字来实现线程同步?实现线程同步的方法有哪2种(P221)?
答:实现线程同步的关键字是:synchronized
实现线程同步的方法:方法同步与对象同步。
44、习题:9.1~9.9(P234)
45、习题:10.1~10.6(P258)
46、什么是Socket套接字?什么是端口(P261-2 46、62)?
答:网络中两个程序通过一个以向的通信连接实现数据的交换,这个双向链路中的一端称为一个Socket套接字。
网络中的信息通过指定的系统位置接入,这个位置就称为端口。系统的TCP与UDP端口数量均为65535个。其中TCP的端口有些是固定用途,其它程序不能使用。如80端口用于http。21端口用于FTP,110端口用于收邮件,25端口用于SMTP等。相关内容查询API资料。
47、习题:11.1~11.6(P282)
48、JDBC主要完成哪四方面的工作(P285)?
答:(1)加载JDBC的驱动程序
(2)建立与数据库的连接
(3)使用SQL语句进行数据库操作并处理结 47、果
(4)关闭数据库的连接。
49、习题:12.1、12.4、12.5、12.6、12.7(P306)
50、获取文件或目录的相关信息,可以使用那个类(P308)?
答:使用文件类,它的直接父类是Object类。在java.io包中。
51、对文件按字节进行顺序读/写时要使用那个类(P311)?
答:使用FileInputStream/FileOutputStream。
52、字符流的基类是哪2个类?字节流的基类是哪2个类?两种流有何区别(P312,P315)?
答:字符流的基类是:InputputStream与OutputStream
字节流的基类是:Reader与Writer
字节流按字节读写数据,而字符流是按双字节读写数据。对于ASCII两者效果相同,但对于使用双字节的Unicode编码数据则不同,字节流无法正常显示。
题型:
选择题(10*10)、
填空题(10*20)、
简答题(4*12)、
程序阅读题(4*20)、
程序设计题(3*38)






