admin 管理员组

文章数量: 887021


2024年1月11日发(作者:虚拟机linux可以用来干什么)

一、 选择题

A C D C A

二、 填空题

1、

Java虚拟机

Java字节码 垃圾回收机制

2、

javac java

3、

.java .class

三、 简答题

1、 简述Java语言的发展历史。

答:

1996

1

月,Sun

发布了

JDK 1.0;

1997

2

月,Sun

发布 了

JDK1.1;

1998

12

月,Sun

发布了

JDK1.2(Java 2

平台);

1999年6月,Sun重新定义Java技术架构,并将Java 2平台分为三版本:标准版

(J2SE)、企业版(J2EE)和微缩版(J2ME);

. 2000年5月,Sun分别分布了

JDK1.3和1.4;

• 2004.9, JDK1.5发布,成为Java语言发展史上又一里程碑。为了表示该版本的重要 性,JDK 1.5更名为JDK5;此时,Java的各种版本已经更名,取消其中的数字“2”: J2EE

更名为

Java EE, J2SE

更名为

Java SE, J2ME

更名为

Java ME;

2006年12月,Sun公司发布JDK 6.0:

2010年9月,JDK7.0已经发布,增加了简单闭包功能;

2014年3月,发布JDK8.0,增加了

Lambda表达式等新特性;

2017年9月,发布JDK9.0,增加了模块化源码等新特性。

2、 简述Java语言的特点。

答:Java语言有如下特点:(1)简单的特性;(2)面向对象的特性;(3)分布式处理的特性;

(4)健壮特性;(5)结构中立的特性;(6)安全特性;(7)可移植的特性;(8)解释的特性;

(9)高性能的特性;(10)多线程的特性;(11)动态的特性。

3、 简述Java虚拟机的工作原理。

答:Java虚拟机包含类加载器、字节码校验器和JIT实时编译器。类加载器用来取得从网络 获取的或存于本地机器上的类文件字节码。下一步由字节码校验器检查这些类文件是否有正 确的格式,以确认在运行时不会有破坏内存的行为。Java解释器将字节码解释翻译成机器码, 而JIT编译器也可将字节码转为本地机器码,但它可使原本是解释执行方式的虚拟机提高到 编译式的运行效率。

四、 编程题

1、试编写一个“I Love Java!

”的独立应用程序,并编译运行。

答:

public class

Hello {

public static void

main(String [] args) (

^.println("I Love Java!");

一、选择题

D A B B B

二、 填空题

1、 关键字又为保留字

2、 单行注释多行注释文档注释

3、 常量 变量

三、 简答题

1、 Java中标识符定义的规则有哪些?

答:标识符用来表示变量、常量、类、方法、数组、文件、接口、包等元素的名字。Java

语言中的标识符是由Java字母、下划线、美元符号($)和数字组成,并且需要遵守以下的 规则:

(1)

区分大小写。

(2)

应以Java字母、下划线或$符号开头,不能以数字开头。

(3)

没有长度限制,标识符中最多可以包含65535个字符。

(4)

不能使用Java中的关键字。

2、 下面哪些是Java中的标识符?

$_12hello My%Var INT &YOU #Me

答:$_12hello INT

3、 Java中包含哪些基本数据类型?

答:

字节型(byte) 短整型r字符型(char) 整数类型

数值类型-s

,基本数据类型

(short) 整型(int) 长整型(long)

单精度浮点型(float)

I实数类型

双精度浮点型(double)

Java数据类型-< 空类型(void)

' 布尔型(boolean)

l 类(class)

I引用数据类型y接口(interface)

I数组

4> Java中怎样进行注释?

答:单行注释的形式为:〃这里是单行注释的内容

多行注释的形式为:/*

多行注释的内容

*/

文档注释的形式为:/**

文档注释的内容

*/

5、(1) 2.5 (2)1.5 (3)81

6、

(1) (a+b)/(x+y)

(3) Math.s沮(x)/(2*m)

(2) 〃(p*(p-a)*(p-b)*(p-c))

(4) (a+b)*h/2

7、

(1) false (2) true (3) true (4) true

8、

(1) true (2) true (3) true

四、编程题

1、 设计一个程序,从键盘输入一个矩形的长和宽,求其周长和面积。

答:

import

r;

public class

Ex2_l {

public static void

main(String [] args) (

Scanner sc =

new

Scanner(System,

in);

int

length,width;

int

area,perimeter;

System.函.print(”请输入矩形的长:");

length = t();

System.函.print(”请输入矩形的宽:”);

width = t();

area = length*width;

perimeter = (length+width) * 2;

System.函.printing矩形的面积是:"+area);

System.函.printing矩形的周长是:"+perimeter);

)

}

2、 从键盘输入一个三位数〃,拆分这个数字,百位用a表示,十位用b表示,个位用c表

示,用这三个数字重组一个三位数秫,这个三位数由cba表示,例如输入123,输出321,

试设计这个程序。

(算法提示:a=n/100, b=n/10%10, c=n%10, m=c* 100+b* 10+a)

答:

import

r;

public class

Ex2_2 (

public static void

main(String [] args) (

Scanner sc =

new

Scanner(System,

iri);

int

m,n,a,b,c;

System.函.print(”请输入一个三位数:");

n = t();

a = n/100;

b=n/10%10;

c=n%10;

m=c*100+b*10+a;

n(n新的三位数是:”+m);

一、 选择题

B B A

二、 填空题

1、 顺序结构分支结构循环结构

2、

if分支语句

3、 初始化部分

switch分支语句

终止部分 循环体部分

4、 当型循环 直到型循环for循环for each循环

三、 简答题

1、 简述break语句的作用。

答:①终止switch语句与单循环语句的执行;

② 对多重循环循环语句,可从内循环体跳到外循环体。

2、 简述continue语句的作用。

答:①在while或do while语句中执行到continue语句时,程序不执行continue后的语句, 而转向条件表达式处,开始下一次循环。即所谓短路语句。

②在for语句中执行到continue语句时,程序不执行continue后的语句,而转向for语

句中的第3表达式处,开始下一次循环。

3、 简述continue语句和break语句的区别。

答:continue语句只结束本次循环,而不是结束整个循环的执行;而break语句则是结束循

环,不管循环条件是否成立。

四、 编程题

1、设计一个程序,判断从键盘输入的整数的正负性和奇偶性。

import

r;

public class

Ex3_l (

public static void

main(String[] args) (

int

num;

Scanner sc =

new

Scanner(System.m);

Sy stem.。",.printin("请输入一个整数:");

num = t();

if

(num>0)(

System.(?M?.println(num+"是正数。");

}else if

(num<0)(

System.^w^println(num+"是负数。");

}else(

System.o〃£.println(num+"是零。");

if

(num%2==0)(

?.println(num+"是偶数。");

}else(

System.o”,.println(num+"是奇数。");

2、 有一函数:

x

y = 3x-2

(x < 1)

(1 < x < 10)

4x (x > 10)

编写程序,从键盘输入X的值,计算并输出y值。

import

r;

public class

Ex3_2 (

public static void

main(String[] args) (

float

x,y;

Scanner sc =

new

Scanner();

System.。",.printing请输入x的值:");

x = oat();

if(xvl){

y=x;

}else

if(x<10)(

y=3*x-2;

)else(

y=4*x;

)

System. o"n("y="+y);

1

}

3、 设计简单计算器,计算表达式:datal op data2的值,其中datal、data2为两个实数,op

为运算符(+、・、*、/),并且都由键盘输入。

import

. Scanner;

public class

Ex3_3 (

public static void

main(String[] args) (

float

data 1 ,data2,result=0;

char

op;

Scanner sc

new

Scanner(System.m);

System.。",.printing请输入第一个数:");

datal = oat();

System.。",.printing请输入第二个数:");

data2 = oat();

System.。",.printing请选择操作(+、-、*、/):");

op = (). char At(0);

switch(op)(

case

'+':result=datal+data2;break;

case

:result=datal-data2;break;

case

'**:result=datal*data2;break;

case

7':result=data 1/data2;break;

)

System.(?wAprintln(datal + String. va/w^O/(op) +data2 +"="+result);

1

4、奖金税率如下("代表奖金,"弋表税率):

a < 500 r = 0

r = 3%

r = 5%

r = 8%

r = 12%

500

1000

2000

a > 5000

输入一个奖金数,求税率、应交税款及实得奖金数。

import

r;

public class

Ex3_4 (

public static void

main(String[] args) (

float

r,f;

int

a,c;

Scanner sc =

new

Scanner();

Sy stem.。",.printing

请输入奖金金额:");

a = t();

if(a>5000)(

c=10;

}else(

c=a/500;

)

switch(c)(

case 0:c=0;break;

case l:c=3;break;

case 2:

case 3:c=5;break;

case 4:

case 5:

case 6:

case 7:

case 8:

case 9:c=8;break;

case 10:c=12;break;

)

f=a*(l-c/100F);

Sy stem.。",.printing

税率为:"+c+"%");

System.。",.printing实得金额是:"+f);

5、编程程序,将百分制转换成等级制。 转换方法:

90〜100 A

80〜89 B

70〜79 C

60〜69 D

0

〜59 E

import

. Scanner;

public class

Ex3_5 (

public static void

main(String[] args) (

int

score,m;

char

grade = 0;

Scanner sc

new

Scanner(System.m);

System.。",.printin("请输入百分制:,if

(score=100)( m二

10;

)else(

m=score/10;

)

switch(m)(

case

0:

case

1:

case

2:

case

3:

case

4:

case

5:grade =

'E';break;

case

6:grade =

'D';break;

case

7:grade =

'C';break;

case

8:grade =

'B';break;

case

9:

case

10:grade =

'A';break;

)

ntln("百分制:"+score);

System.。",.printing等级制:"+grade);score = tQ;

100 1 11 1

6、 求习一的值,即求1 +土 + 土+ ・・• + —'的值。

2 3 100

public class

Ex3_6 (

public static void

main(String[] args) (

int

n;

float

sum=0;

for

(n= 1 ;n<= 100;n++) (

sum+=1.0/n;

)

System. o〃,.println("sum="+sum);

1

}

7、 编程计算v-l + - + ^ + ^…的值直到最后1项小于10-4为止。

X X X

import

r;

public class

Ex3_7 (

public static void

main(String[] args) (

double

x,y=0,t=l;

Scanner sc =

new

Scanner();

System.l):");

x=uble();

while(t>=0.0001)(

y=y+t;

t=t/x;

)

System. oEprintln("y="+y);

1

)

8、 求》近似值的公式为:

2 2 4 4

2n 2n

x — x — x — X---X ---------------- x -------- x…

2 1 3 3 5 2〃 —1

2n + l

其中,〃 =1,2,3…设计一程序,求出当n = 1000时〃的近似值。

public class

Ex3_8 (

public static void

main(String [] args) (

int i;

double

pi=l;

for

(i=l;i<=1000;i++)(

pi=pi*(2.0*i/(2*i-1 ))*(2.0*i/(2*i+1));

System. o〃,.println("PI="+2*pi);

9、斐波那契数列的前几个数为1、1、2、3、5、8,……,其规律为:

A =1 (" = 1)

(" = 2)

(” z 3)

/2=1

h = fz + h_2

编程求此数列前40个数。

public class

Ex3_9 (

public static void

main(String[] args) (

int

fl=l,f2=l;

int

i;

for

(i=l;i<=20;i++)(

System.。以.print(fl+”t”+f2+”t”);

fl=fl+f2;

f2=f2+fl;

if(i%2==0)

System.(?n();

)

1

10、求出1~599中三位整数,分解成个位、十位、百位,分别存放在变量a、b、c中,然后 判断a、b、c中是否有5。

public class

Ex3_10 (

public static void

main(String[] args) (

int

a,b,c,m=0;

for (int

i=l;i<=599;i++)(

a = i/100;

b=i/10%10;

c=i%10;

if(a==5||b==5||c==5)(

System.。必.print(i+"t");

m++;

if(m%5==0)

System.o〃n();

一、 选择题

C CD C

二、 填空题

1、

arraycopy()

2、

sort() binarySearch()

三、 简答题

1、 简述一维数组的声明与创建方法。

答:

一维数组的声明方法:

(1)

数据类型[]数组名;

(2)

数据类型数组名[];

一维数组的创建方法:

(1)

数组名=new数据类型[数组长度];

数组的声明与创建也可以用一条语句表示,格式为:

(1)

数据类型口数组名=new数据类型[数组长度];或

(2)

数据类型数组名[]=new数据类型[数组长度];

2、 简述二维数组的声明与创建方法。

答:

二维数组的声明方法:

(1)

数据类型[][]数组名;

(2)

数据类型数组名[][];

二维数组的创建方法:

(1)

直接创建数组,为每一维分配存储空间,数组可使用new关键字创建二维数组, 并分配存储空间,格式如下:

数组名=new数据类型[第1维长度][第2维长度];

(2)

从高维开始,分别为每一维分配存储空间

数组名=new数据类型[第1维的长度][];

数组名[0] = new数据类型[第2维中第1行的长度];

数组名[1] = new数据类型[第2维中第2行的长度];

3、简述二维数组在内存中是如何存储的?

答:(1)当声明一个二维数组时,在栈中生成一个引用变量(指针),例如int[][] a;如图(a)所示。 ⑵从高维开始创建数组,new关键字生成了一个数组,例如,a = new int[3][];这个数组是在堆 中的,共有3个元素,而这3个元素是数组,如图(b)所示。

(3)

分别为它们分配空间:

a[0] = new int[l];

a[l] = new int[2];

a[2] = new int[3];

如图(c)所示。

(4)

可以访问这些数组元素,如图(d)所示。

四、编程题

1、 某班有30名学生进行了数学考试,编写程序将考试成绩输入一维数组,并求数学的平均 成绩及不及格学生的人数。

import

r;

public class

Ex4_l (

public static void

main(String [] args) (

int[]

score =

new int[30];

int i;

int

num=0,sum=0,ave;

Scanner sc =

new

Scanner();

System.6>wAprintln("输入30个成绩:*');

for

(i=0;i<;i++) (

score[i]=t();

)

for

(i=0;i<;i++) (

sum+=score[i];

if

(score[i]<60)

num++;

)

ave=sum/;

System.。"printing平均分:”+ave+”,不及格人数:"+num);

1

)

2、 设有一数列,它的前四项为0、0、2、5,以后每项分别是其前四项之和,编程求此数列 的前20项。

public class

Ex4_2 (

public static void

main(String [] args) (

int[] a = new int[20];

int

i;

a[0]=0; a[l]=0; a[2]=2; a[3]=5;

for

(i=4;i<;i++) (

a[i]=a[i- l]+a[i-2]+a[i-3]+a[i-4];

)

for

(i=0;i<;i++) (

?.print(a[i]+',t");

if(i%4=3){

System.6?«n();

3、设计一程序打印杨辉三角形。

1

1 1

1

1

1

1

1

1

1

1

2

3

4

5

6

7

8

9

1

3

6

1

4

1

5

15

35

70

10 10

15 20

21 35

28 56

36 84

1

6

21

56

1

7 1

28 8 1

126 126 84 36 9 1

public class

Ex4_3 (

public static void

main(String[] args) (

int[][] t = new int[10][];

int

i,j;

for

(i=O;i<;i++)

t[i] =

new int[i+l];

〃第一列和对角线赋值1

for

(i=O;i<;i++)(

t[i][i]=l;

t[i][0]=l;

)

//求其他位置的值,每一项是它上一项和上一项左面一项的和

for

(i=2;i<;i++)

for

(j=1 ;j

t[i]U]=t[i-l][j]+t[i-l]|j-l];

〃输出

for

(i=O;i<;i++) (

for

(j=O;j

System. o“(t[i][j]+"t");

Sy stem.。如.println。;

)

1

}

4、某小组有5个学生,考了三门课程,他们的学号及成绩如表4-2所示,试编程求每个学 生的总成绩及每门课的最高分,并按下表4-2形式输出。

学号

1001

1002

1003

数学

90

70

65

表4-2学生成绩情况表

语文

80

75

70

外语

85

80

75

总成绩

1004

1005

85

80

60

90

70

70

最高分

import

r;

public class

Ex4_4 {

public static void

main(String[] args) (

int[][] a = new int[6][5];

int

i,j,max,sum;

Scanner sc =

new

Scanner(System, in);

System.o"println(”输入5名学生的学号数学语文外语,

for

(i=O;i<-1 ;i++)

for

(j=O;j

a[i] [j]=t();

for(j = l;j<=3;j++) (

max = a[O][j];

for

(i = 0; i < -1; i++) (

if

(max v a[i][j])

max = a[i]|j];

}

a[5][j] = max;

for

(i = 0; i < - 1; i++) (

sum = 0;

for(j =

l;j<=3;j++)( sum = sum + a[i][j];

}

a[i] [4] = sum;

}

Sy stem.o“ng学号t数学t语文t外语t总分”);

for

(i=0;i<;i++)(

for

(j=O;j

if

(i==5 && j==0)

System.6>w?.print("最高分

t”);

else

if(i==5 &&j==4)

System.o〃£.print("t");

else

System.(?MAprint(a[i][j]+"t");

System.(?M?.println();

5、输入一个5行5列的二维数组,编程实现:

(1)

求出其中的最大值和最小值及其对应的行列位置;

(2)

求出主副对角线上各元素之和。

import

r;

public class

Ex4_5 (

public static void

main(String [] args) (

int[][] a= new int[5][5];

int

i,j ,max_i,maxj ,min_i,min_j ,max,min,sum=O;

Scanner sc =

new

Scanner();

tln("请输入5行5

列数组:");

for(i=0;i<;i++)

for

(j=O;j

max=a[0] [0] ;max_i=0;maxJ=0;

min=a[0][0]; min_i=0 ;minJ=0;

for(i=0;i<;i++)

for

(j=0;j

if

(a[i][j]>max)(

max=a[i]。];

max_i=i;

max

宇j;

)

if

(a[i]|j]

min

a[i][j];

min_i=i;

)

if

(i==j II i+j==4) sum+=a[i][j];

1

System.6>wAprintln("最大值:"+max+"位置:("+max_i+","+max_j+")");

System.6>wAprintln("最小值:"+min+"位置:("+min_i+","+min_j+")”);

ntln("主副对角线和:"+sum);

1

【习题5】

一、 选择题

D C A B

二、 填空题

1、继承性多态性

2、 类的成员变量

3、 类的成员方法

4、 构造方法

三、简答题

1、 什么是类?什么是对象?

答:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。类是相同 属性和行为的一组对象的集合。类是对象的模板,即类是对一组有相同数据和相同操作的对 象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。

2、 简述声明类的语法格式。

答:声明类的语法格式如下:

[类修饰符]class类名[extends基类][implements接口列表]{

[成员变量声明]

[构造方法定义]

[成员方法定义]

}

说明:

类修饰符[可选]:用于规定类的一些特殊性,比如访问控制、抽象类等。

类名:类的名字,类名一般首字母用大写,其余用小写,如果类名由多个单词组成,则 从每个单词的首字母大写。

extends基类:表示新类由父类派生,Java中只支持单继承。

implements接口列表:表示实现接口。因Java中支持单继承,但可以实现多个接口, 为多重继承软件开发提供方便。

类体:用花括号括起,类体中可有成员变量声明、构造方法定义和成员方法定义。

3、 简述Java类成员的访问控制。

答:

访问控制符

private

同一个类中

可以访问

可以访问

可以访问

同一个包中

X

不同包的子类

X

X

不同包的非子类

X

X

X

default(缺省) 可以访问

protected

public

可以访问

可以访问

可以访问

可以访问

可以访问 可以访问

4、包的作用是什么,如果创建包,导入包?

答:包是类、接口和其他包的集合,建包的目的是有效区分名字相同的类,不同Java源文 件中的两个类名字相同时,它们可以通过隶属不同的包来区分。

包的声明格式:

package

包名;

若类的访问权限是public,则其他包的类可以引用该类,但引用前需导入包,导包的语 句是:

import包名.类名;

四、编程题

1、定义一个复数类Complex,复数的实部real与虚部image定义为私有数据成员。定义getters

和setters方法访问私有数据成员,再定义构造方法对实部与虚部进行初始化,定义公有成 员方法show。显示复数值。

public class

Complex (

private int

real;

private int

image;

public int

getReal() (

return

real;

1

public

void setReal(int real) (

= real;

1

public int

getlmage() (

return

image;

1

public void setlmage(int image) (

= image;

1

public

Complex()(

1

public

Complex(int real,

int

image) (

= real;

= image;

1

public void

show() (

System.<?wAprintln(real+"+"+image+"i");

1

}

public class

ComplexTest (

public static void

main(String [] args) (

Complex cl = new Complex(5,6);

();

}

}

2、编写一个Book类,用于描述个人藏书,包含作者Author>书名Title、价格Price>出版 社Publisher>出版年份Published Year五个属性。然后编写一个测试类BookTest,对Book

类进行测试,输出正确的属性值。

public class

Book (

〃作者、书名、价格、出版社、出版年份

private

String author;

private

String title;

private float

price;

private

String publisher;

private int

publishedYear;

public

String getAuthor() (

return

author;

1

public void

setAuthor(String author) (

= author;

public

String getTitle() (

return

title;

1

public void

setTitle(String title) ( = title;

1

public float

getPrice() (

return

price;

1

public void

setPrice(float price) ( = price;

1

public

String getPublisher() (

return

publisher;

1

public void

setPublisher(String publisher) ( her = publisher;

1

public int

getPublishedYear() (

return

publishedYear;

}

public void

setPublishedYear(int

publishedYear) ( hedY ear = publishedYear;

}

)

public class

BookTest (

public static void

main(String [] args) (

Book book =

new

Book();

//孙浏毅、Java宝典、98.00、电子工业出版社、2009 book, set Author("孙浏毅”);

le("Java

宝典");

ce(98.00F);

lisher("电子工业出版社,

book. setPublishedY ear(2009);

System.。",.printing

图书的信息是

Sy printin("作 者:"+book. getAuthor());

Sy . println("书名:"+book. getT itle());

Sy stem.。",.printing

价格:"+ce());

System.。",.printing

出版社:"+lisher());

System.。",.printing

出版年份:"+lishedY ear());

3、编写一个UnitConversion类,封装一些常用的单位转换算法,其中两个单位转换是英寸 和厘米的转换,另一个是摄氏温度和华氏温度的转换(转换公式请自行查找资料)。要求该 类象Math类一样不可被继承,也不可被实例化。然后编写一个测试类UnitConversionTest,

测试UnitConversion类是否能够正常工作。

final public class

UnitConversion (

private

UnitConversion() (

1

final public static float f2C(float

f) (

return

(f-32)/1.8F;

1

final public static float c2F(float c) (

return

c * 1.8F + 32.0F;

1

final public static

float inch2Cm(float inch) (

return

inch * 2.54F;

1

final public static float cm2Inch(float cm) (

return

cm / 2.54F;

1

}

public class

UnitConversionTest (

public static void

main(String [] args) (

System.6>wAprintln("37

摄氏度="+

UnitConversion.c2F(37) +

”华氏度”);

ntln(" 100

华氏度="+

UnitConversion.^ C( 100) +

"摄氏度");

Sy stem.。",.printing 10

厘米="+

UnitConversion. 10) +

”英寸,

Sy stem.。",.printing 10

英寸="+

UnitConversion. znc/z2Cm( 10) +

"厘米”);

1

【习题6】

一、 选择题

B C C A AEF

二、 填空题

1、 编译时多态性(静态多态)运行时多态(动态多态)

2、 可扩充性接口性

3、 最终类

三、 简答题

1、简述继承的声明格式。

答:类的继承语法格式如下:

[类修饰符]class类名[extends基类][implements接口列表]{

[成员变量声明]

[构造方法定义]

[成员方法定义]

说明:

(1)

(2)

(3)

(4)

(5)

类修饰符同类的声明,如public, default(缺省)。

类名必须符合标识符命名规则。

extends是关键字。

基类,可以是自定义的类,也可以是系统类库中的类。如果省略基类,其默认的基

子类可以添加新的成员变量和成员方法,可以隐藏基类的成员变量或者覆盖基类的

类是

类。

成员方法。

(7)类之间的继承具有传递性。

2、 简述类的继承规则。

答:根据继承规则,子类可以继承父类的成员变量和成员方法,还可以增加自己的成员变量。 如果子类声明了与父类同名的成员变量,则在子类中父类的成员变量被隐藏。

子类可以继承父类的方法,还可以增加自己的成员方法。子类对象可以使用从父类继 承过来的方法。方法重写(或覆盖)是指子类重新定义从父类继承过来的方法,从而使子类 具有自己的行为,满足自己的需要。如果子类定义了与父类同名的成员方法,则在子类中父 类的成员方法被覆盖。子类不再继承父类的方法,即子类中不再存在父类的同名方法。

3、 分别解释关键字super与this的用法。

答:this代表了当前对象的一个引用,可将其理解为对象的另一个名字,通过这个名字可以 顺利地访问对象、修改对象的数据成员、调用对象的方法。this有以下三种使用场合:

(1)

访问当前对象的数据成员,使用形式如下:

this.数据成员

(2)

访问当前对象的成员方法,使用形式如下:

this.成员方法

(3)

当有重载的构造方法时,来引用同类的其他构造方法,使用形式如下:

this(参数);

super表示当前对象直接父类的对象,是当前对象直接父类对象的引用。super有以下三种使 用场合:

(1)

用来访问直接父类中被隐藏的数据成员,使用形式如下:

s叩er.数据成员

(2)

用来调用直接父类中被重写的成员方法,使用形式如下:

super.成员方法

(3)

用来调用直接父类的构造方法,使用形式如下:

super

(参数);

4、 简述抽象类的声明格式。

答:声明抽象类的格式与声明类的格式相同,要用abstract修饰符指明它是一个抽象类:

[public] abstract class

类名[extends

基类[[implements

接口列表]{

[成员变量声明]

[构造方法定义]

[成员方法定义]

说明:

public[可选]:抽象类默认不是public的,通常声明为public的。

抽象类必须要有abstract修饰符。

抽象类不能被实例化。

5、 简述类对象之间的类型转换规则。

答:类对象之间的类型转换是指父类对象与子类对象之间在一定条件下的相互转换。转换规 则如下:

(1)

子类对象可以隐式,也可以显式的转换为父类对象。

>

>

>

父类对象获得子类对象,不能操作子类新增的成员变量,不能使用子类新增的成 员方法。

父类对象获得子类对象,可以操作子类继承或重写的成员变量和成员方法。

如果子类重写了父类的某个方法,若父类对象获得子类对象会调用这个重写的方 法。

(3)

父类对象在一定的条件下可以转换成子类对象,但必须使用强制类型转换。

(2)

处于相同类层次的类的对象不能进行转换。

>

>

子类对象可以操作父类及子类的成员变量和成员方法。

子类对象访问父类重写方法时,访问的是子类中的方法。

子类对象接收父类对象,必须进行类型强制转换且必须保证父类对象引用的是该子类的对 象,如果引用父类或其他子类的对象,会抛出类型不匹配异常。

6、 简述抽象类和接口的区别。

答:

表抽象类与接口的区别

抽象类

不能省略abstract修饰符

抽象类的子类继承(extends)抽象类,单继承

单继承

除抽象方法外,有成员变量,也可以有普通方法

实现代码的复用

省略abstract修饰符

接口

abstract修饰符

子类和实现类

继承

变量和方法

复用

接口的实现类实现(implements)接口,多实现

多继承

只能有抽象方法,以及静态常量

不能实现代码的复用

四、编程题

1、假设银行Bank已经有按整年计算利息的一般方法,其中year只能取整数,比如按整年 计算方法为:year*0.035*savedMoney。

建设银行ConstructionBank和大连银行BankOfDalian是Bank的子类,隐藏继承的成员变量

year,并重写计算利息的方法,即声明一个double型的变量year。比如,当year取值为5.216

时,表示计算5年216天的利息。建设银行或大连银行把5.216的整数部分赋给隐藏的year,

并用super调用Bank的计算利息的方法,求出5年的利息,再按自己的方法计算216天的 利息。建设银行计算日利息的方法:day*0.0001 *savedMoney,大连银行计算日利息的方法:

day*0.00012*savedMoneyo

测试类,求8000元存5年236天两银行的利息差额。

Bank

类属性:savedMoney、year、interest> interestRate=0.035

Bank

类方法:computerinterest

public class

Bank (

int

savedMoney;

int

year;

double

interest;

double

interestRate = 0.035;

public double

computelnterest() (

interest = year * interestRate* savedMoney;

return

interest;

public void setInterestRate(double interestRate) ( stRate = interestRate;

}

}

public class

ConstructionBank

extends

Bank (

double

year;

public double

computelnterest() (

= (int)year;

double

r = year - (int)year;

int day = (int)(r*1000);

double

yearinterest =

elnterest();

double

daylnterest = day*0.0001 *savedMoney;

interest = yearlnterest+daylnterest;

System.o〃,.println(savedMoney+"元存在建设银行"++"年零"+day+"天的利息:

"+interest+n

元”);

return

interest;

}

}

public class

BankOfDalian

extends

Bank (

double

year;

public double

computelnterest() (

= (int)year;

double

r = year - (int)year;

int day = (int)(r*1000);

double

yearinterest =

elnterest();

double

daylnterest = day*0.00012*savedMoney;

interest = yearlnterest+daylnterest;

System.o〃,.println(savedMoney+"元存在大连银行"++n

年零"+day+"天的利息:

"+interest+n

元”);

return

interest;

}

}

public class

SaveMoney (

public static void

main(String [] args) (

int

amount=8000;

ConstructionB ank bank_c =

new

ConstructionB ank();

bank_c. savedMoney = amount;

bank_ = 5.236;

bank_c. setInterestRate(0.035);

double

interest_c=bank_elnterest();

BankOfDalian bank_d =

new

BankOfDalian();

bank_d. savedMoney = amount;

bank_

5.236;

bank_d. setInterestRate(0.035);

double

interest_d=bank_elnterest();

System.。",.printing

两个银行利息相差"+(interest_c-interest_d)+"元,

}

2、(1)定义动物类Animal,在类中定义属性和方法:

私有属性sex,表示性别,数据类型为boolean;

私有属性age,表示年龄,数据类型为int;

属性的getters和setters方法;

在类的构造方法中设置性别初始值为false;

公有方法IntroduceQ,用于介绍动物:

I)

若字段sex属性的值为true,方法返回一个字符串"This is a male Animal!";

II)

若字段sex属性的值为false,则方法返回一个字符串"This is a female Animal!"

o

(2)

由基类Animal创建派生类Dog,在派生类中实现方法重写。

创建公有类Dog,它是从基类Animal中派生出的;

在类Dog的构造方法中,设置属性sex的初始值为true;

在类Dog中重写基类Animal的方法Introduce:

I)

若属性Sex的值为true,方法返回一个字符串"This is a male Dog!";

II)

若属性Sex的值为false,则方法返回一个字符串”This is a female Dog!%

(3)

定义测试类AnimalTest,在程序主方法中实例化类的对象,调用方法输出介绍动物的 字符串:

实例化Animal的一个对象ani,调用类的方法Introduce(),并输出方法返回的字符串;

实例化Dog的一个对象dog,调用类的方法Introduce(),并输出方法返回的字符串。

public class

Animal (

private boolean

sex;

private int

age;

public boolean

getSex() (

return

sex;

}

public void setSex(boolean sex) (

this,

sex = sex;

1

public int

getAge() (

return

age;

}

public void

setAge(int age) (

= age;

1

public

Animal()(

sex

= false;

1

public void

Introduce()(

if

(sex ==

true)

System.(?M?.println("This is a male Animal!");

?.println("This is a female Animal!");

}

}

public class

Dog

extends

Animal (

public

Dog()(

setSex(true);

1

public void

Introduce() (

if

(getSex() ==

true)

?.println("This is a male Dog!");

else

System.^n("This is a female Dog!");

public class

Test Animal (

public static void

main(String [] args) (

Animal ani =

new

Animal();

uce();

Dog dog=new Dog();

uce();

1

}

3、要求设计abstract类,类名为Employee,类内有抽象方法earning(),功能是计算工资。

Employee

的子类有

YearWorker> Month Worker > WeekWorkero Year Worker

对象按年领取薪 水,每年年薪6万,Month Worker按月领取薪水,每月3000元,Week Worker按周领取薪 水,每周500元。有一个Company类,该类有两个属性,一个是用Employee数组作为属性, 存放所有的员工,一个是salaries属性,存放该公司每年该支付的总薪水,paySalaries方法 能计算一年需支付的薪水总额。测试类定义29名员工,员工编号0-28,能被3整除的员工 为Week Worker,除3余数为1的是Month Worker,除3余数为2的是YearWorker,测试类 输出该公司支付总金额。

public abstract class

Employee (

public abstract double

eaming();

)

public class

Year Worker

extends

Employee (

public double

eaming() (

return

60000;

}

)

public class

Month Worker

extends

Employee (

public double

eaming() (

return

12*3000;

}

)

public class

WeekWorker

extends

Employee (

public double

eaming() (

return

52*500;

}

)

public class

Company (

Employee[] e;

double

salaries = 0;

public

Company (Employ ee[] e) (

this.e = e;

}

public double

paySalaries()(

for (int

i=O;i<;i++)

salaries = salaries + e[i].eaming();

return

salaries;

1

}

public class

TestSalary (

public static void

main(String[] args) (

Employee[] e =

new

Employee[29];

int

i;

for

(i=O;i<;i++) (

if(i%3==0)

e[i] =

new

WeekWorker();

else if(i%3==l)

e[i] =

new

MonthW orker();

else

e[i] =

new

YearWorker();

)

Company company =

new

Company(e);

Sy stem, owA println(company .pay S alaries());

1

}

4、(1)编写

DogState

接口,接口中有

showState

方法。

(2)

(3)

编写若干个实现DogState接口的类,负责刻画小狗的各种状态。meetEnemyState(狂叫)、

编写Dog类,有DogState定义的属性state,有show方法,在该方法中回调showState

方meetFriendState(晃动尾巴)、meetAnotherDog(嬉戏)、SoftlyState(听主人命令)。

法。

(4)

编写测试类,测试小狗的各种状态。

public interface

DogState (

void

showState();

}

public class

meetEnemyState

implements

DogState(

public void

showState() (

Sy stem.。",.printing

狂叫”);

1

}

public class

meetFriendState

implements

DogState (

public void

showState() (

System.。",.printing

晃动尾 巴”);

1

}

public class

meetAnotherDog

implements

DogState (

public void

showState() (

System.。",.printing

嬉戏”);

public class

SoftlyState

implements

DogState(

public void

showState() (

Sy stem.。",.printin("听主人命令”);

1

}

public class

Dogl (

DogState state;

public void

show()( ate();

1

public void

setState(DogState state) (

this,

state = state;

1

}

public class

TestDog (

public static void

main(String [] args) (

Dogl yellowDog =

new

Dogl();

Sy stem.。",.printing

狗遇到敌人:");

yellowDog. setState(new meetEnemyState()); yellowDog.

show();

Sy stem.。",.printing

狗遇到同伴:");

yellowDog. setState(new meetAnotherDogO); yellowDog.

show();

Sy stem.。",.printing

狗遇到朋友:");

yellowDog. setState(new meetFriendState()); yellowDog.

show();

ntln("狗在主人面前:");

te(new SoftlyState()); yellowDog. show();

1

【习题7】

一、 选择题

C B B A C

二、 填空题

1、 集(Set)列表(List)

2、 映射(Map)

3、

Iterator

4、

LinkedList ArrayList

5、

HastSet TreeSet

三、 简答题

1、 简述集合容器的分类。

答:集合容器类共分为两类,分别是:

集合(Collection):

一个集合就是存储一组对象的容器,Java集合框架支持集(Set)

和列表

(List)两种类型的集合。

Set(集):集合中的对象(也称为元素element)没有次序之分,且没有重复对象。

List(列表):集合中的对象按照索引位置排序,可以有重复对象,可以按索引 位置检索对象。

映射(Map):集合中的每个对象都由一个特殊的“键-值”对组成。键对象不能重 复,值对象可以重复。

2、 简述Iterator接口中主要方法。

答:Iterator接口中主要方法有:

boolean hasNextQ:判断是否存在另一个可以访问的元素

Object next():返回下一个可以访问的元素。通常与hasNext()方法结合使用,以免 产生异常。

void removeQ:删除上次访问返回的对象。

3、 简述Set接口和List接口的差异。

答:Set接口继承Collection接口,与List接口比较相似,但又有两个典型差异,分别是:

Set中不保存重复的元素(List中可以有重复元素)

Set中不能保证元素顺序信息(List中的元素顺序是确定的)

四、 编程题

1、创建一个book包,里面包含第5章编写的Book类,设计一个管理个人藏书的IMyBook

接口,包含添加藏书、根据书名查找藏书、根据作者查找藏书、计算藏书总数和计算藏书总 金额的抽象方法。分别用List、Set、Map3种接口编写MyBookList>MyBookSet和MyBookMap

类管理Book类,实现IMyBook中的抽象方法。编写BookTest类进行测试。

package

;

import

;

import

;

public interface

IMyBook (

public void

add(Book book);

public

Book findByTitle(String title);

public

List findByAuthor(String author);

public float

totalAmount();

public int

bookCount();

)

package

;

import

List;

import

;

import

;

public class

MyBookList

implements

IMyBook (

private

List bookList =

new

LinkedList();

public void

add(Book book) ( (book);

1

public

Book findByTitle(String title) (

for(Book b: bookList) (

if(le().equals(title)) (

return

b;

1

)

return null;

1

public

List findByAuthor(String author) ( List list =

new

LinkedList();

for(Book b: bookList) (

if(hor().equals(author))(

(b);

1

)

return

list;

1

public float

totalAmount() (

float

sum=0;

for(Book b: bookList) (

sum += ce();

}

return

sum;

}

public int

bookCount() (

return

bookList size();

1

)

package

;

import

p;

import

List;

import

;

import

;

import

;

public class

MyBookMap

implements

IMyBook (

private

Map bookMap =

new

HashMap();

public void

add(Book book) (

(le(),book);

public

Book findByTitle(String title) ( return((title));

1

public

List findByAuthor(String author) ( List list =

new

LinkedList();

for(Book b : ()) (

if(hor().equals(author))( (b);

1

)

return

list;

1

public float

totalAmount() (

float

sum=0;

for(Book b : ()) ( sum += ce();

)

return

sum;

1

public int

bookCount() (

return

();

}

}

package

;

import

t;

import

List;

import

;

import

;

import

;

public class MyBookSet

implements

IMyBook (

private

Set bookSet =

new

HashSet();

public void

add(Book book) (

bookSet. add(book);

1

public

Book findByTitle(String title) (

for(Book b:bookSet)(

if(le().equals(title)) (

return

b;

1

return null;

public

List findByAuthor(String author) ( List list =

new

LinkedList();

for(Book b:bookSet)(

if(hor().equals(author))( (b);

1

)

return

list;

1

public float

totalAmount() (

float

sum=0;

for(Book b:bookSet)(

sum += ce();

)

return

sum;

1

public int

bookCount() (

return

bookSet. size();

1

)

package

;

import

;

import

;

public class

BookTest (

public static void

main(String [] args) (

//孙浏毅、Java宝典、98.00、电子工业出版社、2009

IMyBook my Book =

new

MyBookMapO;

Book book =

new

Book();

book, set Author("孙浏毅,

le("Java

宝典");

ce(98.00F);

lisher("电子工业出版社,

book. setPublished Y ear(2009);

(book);

book =

new

Book();

book, set Author("孙浏毅,

le("Java

宝典(第二版),

ce(198.00F);

lisher("电子工业出版社”);

lishedY ear(2009);

my Book, add(book);

book = new Book();

hor("黄能耿”);

le(”Java语言程序设计及实训,

book. setPrice(28. OOF);

lisher("机械工业出版社”);

lishedY ear(2009);

myBook. add(book);

//以下进行测试

Sy stem.。",.printing

图书总数:");

System.(?n(unt());

ntln("n

图书总金额;

n(mount());

System.。以.println("n查找《Java语言程序设计》

p

汕必。oA(Title(" Java

语言程序设计"));

System.。必println("n查找《Java语言程序设计及实训》

p

〃加R?oA(Title("Java

语言程序设计及实训"));

System.6)n("n

查找“孙浏毅”的书;

List list = Author("孙浏毅");

for(Book b: list)(

printBookQS)

static void

printBook(Book book) (

/.println("n

图书的信息是:");

if(book==null)(

System. owprintln("无结果.”);

return;

}

System.。”/,

printing

作者:"+hor());

Sy stem.。必.printing

书名:"+le());

Sy stem.。",.printing'价格:"+ce());

System.。”/,

printing

出版社:"+lisher());

System. o“£.println("出版年份:"+lishedY ear());

【习题8】

一、 选择题

D C A A C B C C

二、 填空题

1、 异常(Exception)

2、

Throwable

3、

Error Exception

4、

Java虚拟机

5、

Java编译器

6、 出现异常对象的类

7、

finally

8、 抛出异常

9、 自定义的异常

10、 运行

异常处理

三、 简答题

1、 异常处理的方式有哪两种?

答:(1)捕获异常:程序运行过程中,当一个异常被抛出时,识别这个被抛出的异常对象并 查找处理它的方法的过程。

(2)使用throws声明抛出异常:若在声明一个方法时,该方法可能会发生异常,但又 不想在当前方法中来处理这个异常,那么可以将该异常抛出,然后在调用该方法的代码中捕 获该异常并进行处理。

2、 简述创建用户自定义异常的步骤。

答:自定义异常类的使用分为三个步骤,分别是:

(1)

创建自定义异常类;

(2)

在出现异常处抛出异常,所在的方法需要声明抛出异常;

(3)

在处理异常处捕获并处理异常。

四、 编程题

1、对下述代码进行异常处理。

public class

ExceptionDemo (

public static void

main(String [] args) (

int

a=2,b=0;

ntln("This is an exception. " + a/b);

ntln("Finished");

答:

public class

ExceptionDemo (

public static void

main(String[] args) (

try{

int

a=2,b=0;

?.println("This is an exception. " + a/b);

} catch(Exception e)(

?.println(sage());

)

System. o〃,.println("Finished");

1

}

2、(1)创建

AgeException

异常类。

(2)

创建Example类,在Example类中创建一个readAge()方法,该方法用于从键盘处获取

年龄并检查年龄是否在18〜22岁之间,若超出该范围,则抛出AgeException异常。

(3)

在主程序中捕获自定义异常,并作相应处理。

public class

AgeException

extends

Exception}

public

AgeException(String msg) (

super(msg);

1

}

import

r;

public class

Example (

public static int

readAge()

throws

AgeException (

Scanner sc =

new

Scanner(System.m);

System.6>wAprint("请输入年龄:”);

〃声明抛出自定义异常

int

i = t();

if(i< 18) (

throw new

AgeException("年龄不能小于18岁。,〃抛出自定义异常

)

if

(i>22) (

throw new

AgeException("年龄不能大于22岁。,〃抛出自定义异常

)

return

i;

1

)

public class

Test Age (

public static void

main(String [] args) (

int

i = -1;

try {

i = Example.*泌4ge();

Sy stem.。如.println(i);

} catch

(AgeException e) (

?.println(sage());

【习题9】

一、 选择题

C C A B C

二、 填空题

1、 流

2、 输入流 输出流

3、 字节流 字符流

4、

in out err

三、 简答题

1、什么是输入/输出流?字节流和字符流有什么区别?

答:根据数据流的方向,可以将流分为输入流和输出流。我们可以将数据流想象成水流,一 条管道连接了内存和外设(磁盘文件或打印机),数据就象管道中的水流。从其他设备读取 数据,此时流入内存的数据序列就是输入流;从内存写入数据到外部设备的数据序列出就是 输出流。

根据数据流中处理的数据,可以将流分为字节流和字符流,其中字节流用来处理没有进 行加工的原始数据(即二进制字节数据),字符流是经过编码的符合某种格式规定的数据(即 文本文件数据)。

2>过滤流BufferedlnputStream类与字节流FilelnputStream类的关系是什么?

答:FilelnputStream类和FileOutputStream类读写数据是以字节为单位进行的,文件流的利 用率不高,而BufferedlnputStream类和BufferedOutputStream类在字节输入/输出流的基础上 实现了带缓冲的过滤流,采用一个内部缓冲区数组缓存数据,从而提高磁盘的读写速度。

3、对象串行化的作用是什么?对象串行化是如何实现的?

答:使用对象输入输出流实现对象序列化,可以直接存取对象,将对象存入一个数据流称为 对象的串行化(Serialization,也称序列化),而从一个数据流将对象读出来的过程被称为反串 行化。

串行化和反串行化的过程包括:

(1)

声明可串行化的类

通过实现包的Serializable接口,声明一个类的实例是可串行化的。Serializable

接口中没有定义任何方法,它的作用仅仅是一个标识,用于标识实现了该接口的类的实例是 可以被串行化的。

(2)

串行化对象

串行化一个对象,必须要与一定的输入/输出流相连,通过输出流对象,将对象的当前 在状态保存下来,然后可以通过输入流对象将对象的数据进行恢复。在包中,提供 了专门的保存和读取串行化对象的类,分别为ObjectlnputStream类和ObjectOutputStream类。 使用ObjectOutputStream类的writeObject。方法实现对象的串行化,即直接将对象信息保存 到输出流中,使用ObjectlnputStream类的ReadObject()方法可以实现对象的反串行化。

四、 编程题

1、d:这个文件是一篇英文短文,编写一个程序,统计该文件中英文字母的个数, 并将其写入另一个文本文件中。

import

tFoundException;

import

ader;

import

ption;

public class

Ex9_l {

public static void

main(String [] args) (

FileReader fr =

null;

char

c;

int

ch = 0;

try {

fr = new

FileReader("d:/");

int

b;

while

((b=())!=-1) (

c=(char)b;

if

(c>=*a' && c<='z' || c>=*A' && c<='Z')(

ch++;

)

1

} catch

(FileNotFoundException e) (

System.。以

printing

文件不存在! ”);

} catch

(lOException e) (

tln(”输入输出异常!");

)finally (

try (

();

} catch

(lOException e) (

System.o“n(”输入输出异常!");

}

}

System.。",.printing英文字母个数:"+ch);

}

}

2、定义学生类,包含学生的基本信息(包括学号、姓名和考试成绩),键盘接收学生信息, 并将学生信息保存到文件中。

import

izable;

public class

Student

implements

Serializable (

private

String id;

private

String name;

private int

score;

public

String getld() (

return

id;

1

public void

setId(String id) (

= id;

public

String getName() (

return

name;

1

public void

setName(String name) ( = name;

1

public int

getScore() (

return

score;

1

public void

setScore(int score) ( = score;

1

public

Student(String id, String name,

int

score) ( = id;

= name;

= score;

1

)

import

edWriter;

import

putStream;

import

tputStream;

import

iter;

import

ption;

import

lnputStream;

import

OutputStream;

import

r;

public class

StudentScore (

public static void

main(String [] args) (

String id, name;

int

score;

Scanner sc =

new

Scanner(System.m);

System.。",.printing请输入学号:");

id = ();

System.。",.printing请输入姓名:");

name = ();

Sy stem.。",.printin("请输入成绩:'*);

score = t();

Student s =

new

Student(id, name, score);

try {

FileOutputStream fw =

new

FileOutputStream("D:/");

ObjectOutputStream oos =

new

ObjectOutputStream(fw);

oos. writeObj ect(s);

();

FilelnputStream fr =

new

FilelnputStream("D:/");

ObjectlnputStream ois =

new

ObjectlnputStream(fr);

Student si = (Student) ject();

?.println(sl .getld() +

+ re());

();

+ e() +

} catch

(lOException e) (

n("输入输出异常!");

} catch

(ClassNotFoundException e) (

?.println("类不存在!");

【习题10】

一、选择题

C D AC ABC D

、填空题

1、

2AWT

顶层容器

中间容器

BorderLayout GridLayout

FlowLayout

3单行文本框

列表框JList

三、简答题

口令框 文本框

1、 简述GUI界面设计的步骤。

答:1、创建顶层容器窗体,作为放置其他组件的容器;

2、 创建要放置在窗体上的各个组件;

3、 将各个组件添加到容器上(可使用布局管理器来管理位置);

4、 处理事件响应,本例处理的是窗体关闭事件;

5、 设置顶层容器组件大小;

6、 使顶层容器组件可见。

2、 什么是容器组件? Java中容器有哪些?

答:容器的主要作用是包容其他组件,并按一定的方式组织排列它们。Java中的容器主要分 为顶层容器和中间容器。顶层容器是进行图形编程的基础,可以在其中放置若干中间容器或 组件。在Swing中,有以下4中顶层容器:JWindow、JFrame JDialog和J Applet □中间容 器专门专门放置其他组件,介于顶层容器和普通Swing组件中间的容器。常用的中间容器 有:JPanel、JOptionPane、JMenuBar、JToolBar、JTabbedPane

等。

3、 什么是布局管理? Java提供了哪几种布局?各有什么作用?

答:布局管理器负责控制组件在容器中的布局。Java语言提供了多种布局管理器,主要有:

FlowLayout、BorderLayout> GridLayout

等。

FlowLayout称为流式布局管理器。在这种布局管理器中,组件一个接一个从左往右、 从上到下一排一排地依次放在容器中。FlowLayout默认为居中对齐。当容器尺寸发生变化 时,组件大小不会变,但组件在容器中的位置会发生相应的变化。

BorderLayout称为边界布局管理器。这种布局管理器将容器版面分为5个区域:北区、 南区、东区、西区和中区,遵循“上北下南、左西右东”的规律。5个区域可以用5个常量

NORTH, SOUTH, EAST、WEST和CENTER来表示。当容器的尺寸变化时,组件的相对 位置不会改变,NORTH和SOUTH组件高度不变,宽度改变,EAST和WEST组件宽度不 变、高度改变,中间组件尺寸变化。

GridLayout称为网格布局管理器。这种布局管理器通过设置行列将容器划分成大小相同 的规则网格。添加组件是按照“先行后列”的顺序依次添加。当容器尺寸发生变化时,组件 的相对位置不变,大小变化。

4

、 简述Java的事件处理机制。

图1事件处理模型

编写事件处理的过程是(见图1):

① 创建一个组件,并设置其有关属性,如显示的大小和位置等。

② 为该组件编写某种事件的监听器类(实现监听器接口或继承适配器),可以用外部类、 内部类或匿名类的形式。

③ 通过组件的addXXXListener()注册监听器类的实例。如果采用匿名类的形式,监听器

的声明、创建和注册同时完成。

程序运行时,AWT处理事件的流程是(见图1):

⑴用户与界面交互,执行一个操作。

⑵组件响应操作,产生一个事件对象。

⑶组件将事件对象传递给监听器。

⑷监听器根据事件的具体内容执行相应的操作。

四、编程题

1、编写加法程序:在两个文本框中输入两个数,点击“计算”按钮,计算之和显示在第三 个文本框中。

请输入两个教:|333 | + [T |=|339 一

|手和]

import

yout;

import

j ava. . ActionEvent;

import

j ava. . ActionListener;

import

n;

import

;

import

;

import

;

import

ield;

public class

AddDemo(

private

JFrame frame;

private

JLabel label 1;

private

JLabel addsign;

private

JLabel equalsign;

private

JTextField numl;

private

JTextField num2;

private

JTextField result;

private

JButton button;

private

JPanel panel 1;

private

JPanel panel2;

public

AddDemo() (

frame = new JFrame("求和");

label 1 =

new

JLabel(n请输入两个数:");

addsign =

new

JLabel("+n);

equalsign =

new

JLabel("=");

button =

new

JButton("求和");

numl =

new

JTextField(5);

num2 =

new

JTextField(5);

result=

new

JTextField(8);

panel 1 =

new

JPanel();

panel2 =

new

JPanel();

panel 1. add(labell);

panel 1 .add(numl);

panel 1 .add(addsign);

panel 1 .add(num2);

panel 1 .add(equalsign);

panel 1 .add(result);

panel2. add(button);

frame. setLayout(new FlowLayout());

frame, add(panell);

frame. add(panel2);

frame. /TLOALCLOSE);

frame. setSize(400,150);

frame. setVisible(true);

ionListener(new ActionListener() (

public void

actionPerformed(ActionEvent argO) (

int

number 1 ,number2,res;

number 1 = Integer .par5e7nZ(num 1 .getText());

number2

/〃,(t());

res = number 1 +number2;

t(res+"");

1

});

1

public static void

main(String[] args) (

new

AddDemo();

1

2、用标签显示一道简单的测试题,答案使用单选按钮列出,用户选择答案后,会在另一个 标签中显示结果或说明。

图单选题

将GU圈口削分为东、西、南、北、中五个部分的布局管理器是:

I O FlowLayout O GridLayout Q CardLayout ® {BorderLayout

答案:D

import

yout;

import

ent;

import

j ava. awt. event. ItemListener;

import

j avax. swing. B uttonGroup;

import

n;

import

j avax. s wing. JFrame;

import

;

import

;

import

j avax. swing. JRadioB utton;

public class

Exl0_2 (

private

JFrame frame;

private

JLabel label 1;

private

JLabel label2;

JRadioB utton jbA;

JRadioB utton jbB;

JRadioB utton jbC;

JRadioButton jbD;

B uttonGroup bg;

private

JB utton button;

private

JPanel panel 1;

private

JPanel panel2;

private

JPanel panel3;

public

Exl0_2()(

frame

new

JFrame(n单选题”);

labell = newJLabel(”将GUI窗口划分为东、西、南、北、中五个部分的布局管理器是:,

jbA = new

JRadioButton("FlowLayout");

jbB =

new

JRadioButton("GridLayout");

jbC =

new

JRadioButton("CardLayout");

jbD =

new

JRadioButton("BorderLayout");

bg =

new

ButtonGroupO;

(jbA);

(jbB);

(jbC);

(jbD);

Iabel2 =

new

JLabel();

panel 1 =

new

JPanel();

panel2 =

new

JPanel();

panel3 =

new

JPanel();

panel (labell);

(jbA);

(jbB);

(jbC);

(jbD);

panel3. add(label2);

frame. setLayout(new FlowLayout());

frame. add(panell);

frame. add(panel2);

(panel3);

frame. setDefaultCloseOperation(JFrame.£'X/7^OA/_C£OSE);

frame. setS ize(400,200);

frame, set V isible(true);

mListener(new ItemStateChanged());

jbB .addItemListener(new ItemStateChanged());

jbC. addltemListener(new

ItemStateChanged());

mListener(new ItemStateChanged());

}

class

ItemStateChanged

implements

ItemListener(

public void

itemStateChanged(ItemEvent argO) ( t(H答案:D”);

}

}

public static void

main(String [] args) (

new

Exl0_2();

}

【习题11】

一、选择题

A D D A D

二、 填空题

1、

JDBC


本文标签: 对象 方法 成员 父类 子类