《Java基础入门》课后习题及答案资料

更新时间:2023-11-26 01:00:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《Java基础入门》课后习题

第1章 Java开发入门

一、填空题

1、Java的三大体系分别是_JavaSE_____、_JavaEE_____、_JavaME_____。 2、Java程序的运行环境简称之为JRE_____。 3、编译Java程序需要使用_javac_____命令。

4、javac.exe和java.exe两个可执行程序存放在JDK安装目录的bin______目录下。

5、path______环境变量用来存储Java的编译和运行工具所在的路径,而_classpath_____环境变量则用来保存保存Java虚拟机要运行的“.class”文件路径。

二、选择题

1、以下选项中,哪些属于JDK工具?(多选)ABCD

A、Java编译器 B、Java运行工具 C、Java文档生成工具 D、Java打包工具 2、Java属于以下哪种语言?C

A、机器语言 B、 汇编语言 C、高级语言 D、以上都不对 3、下面哪种类型的文件可以在Java虚拟机中运行?D

A、.java B、.jre C、.exe D、.class

4、安装好JDK后,在其bin目录下有许多exe可执行文件,其中java.exe命令的作用是以下哪一种? B

A、Java文档制作工具 B、Java解释器 C、Java编译器 D、Java启动器

5、如果jdk的安装路径为:d:\\jdk,若想在命令窗口中任何当前路径下,都可以直接使用javac和java命令,需要将环境变量path设置为以下哪个选项?B A.d:\\jdk; B.d :\\jdk\\bin; C.d:\\jre\\bin; D.d:\\jre;

三、问答题

1、简述Java的特点。

面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。 2、简述JRE与JDK的区别。

JRE(Java Runtime Environment,Java运行时环境),它相当于操作系统部分,提供了Java程序运行时所需要的基本条件和许多Java基础类,例如,IO类、GUI控件类、网络类等。JRE是提供给

普通用户使用的,如果你只想运行别人开发好的Java程序,那么,你的计算机上必须且只需安装JRE。 JDK(Java Development Kit,Java开发工具包),它包含编译工具、解释工具、文档制作工具、打包工具多种与开发相关的工具,是提供给Java开发人员使用的。初学者学习和使用Java语言时,首先必须下载和安装JDK。JDK中已经包含了JRE部分,初学者安装JDK后不必再去下载和安装JRE了。 JDK(Java Development Kit,Java开发工具包),它包含编译工具、解释工具、文档制作工具、打包工具多种与开发相关的工具,是提供给Java开发人员使用的。初学者学习和使用Java语言时,首先必须下载和安装JDK。JDK中已经包含了JRE部分,初学者安装JDK后不必再去下载和安装JRE了。 四、编程题

使用记事本编写一个HelloWorld程序,在dos命令行窗口编译运行。请按照题目的要求编写程序并给出运行结果。

public class HelloWorld {

public static void main(String[] args) { }

System.out.println(\这是第一个Java程序!\

}

第2章 Java编程基础

一、填空题

1、Java中的程序代码都必须在一个类中定义,类使用__class____关键字来定义。 2、布尔常量即布尔类型的两个值,分别是_true_____和_flase_____。

3、Java中的注释可分为三种类型,分别是_单行注释//__、__多行注释_/* */__、文档/注释** */______。 4、Java中的变量可分为两种数据类型,分别是_基本数据类型_____和_引用数据类型_____。 5、在Java中,byte类型数据占____1__个字节,short类型数据占__2____个字节,int类型数据占___4___个字节,long类型数据占____8__个字节。

6、在逻辑运算符中,运算符___&___和___&&___用于表示逻辑与,__|____和__||____表示逻辑或。 7、若x = 2,则表达式 ( x + + )/3 的值是__0___。 8、若int a =2; a+=3;执行后,变量a的值为__5____。 9、若int []a={12,45,34,46,23}; ,则a[2]= __34____。

10、若int a[3][2]={{123,345},{34,56},{34,56}},则a[2][1]= __56____。 二、判断题

1、Java语言不区分大小写。错

2、0xC5表示的是一个十六进制整数。对

3、continue 语句只用于循环语句中,它的作用是跳出循环。错 4、“/*…*/”中可以嵌套“//”注释,但不能嵌套“/*…*/”注释。对 5、-5%3的运算结果是2。错 三、选择题

1、以下选项中,哪些属于合法的标识符?(多选)AD

A、Hello_World B、class C、123username D、username123 2、关于方法重载的描述,以下选项中哪些是正确的?(多选)(AD)ABD

A、方法名必须一致

B、返回值类型必须不同

C、参数个数必须一致 D、参数的个数或类型不一致

3、以下关于变量的说法错误的是? C

A、变量名必须是一个有效的标识符 B、变量在定义时可以没有初始值

C、变量一旦被定义,在程序中的任何位置都可以被访问

D、在程序中,可以将一个byte类型的值赋给一个int类型的变量,不需要特殊声明 4、以下选项中,switch语句判断条件可以接收的数据类型有哪些? (多选) ABCD

A、int B、byte C、char D、short

5、假设int x = 2,三元表达式 x>0?x+1:5 的运行结果是以下哪一个? C

A、0 B、2 C、3 D、5

6、下面的运算符中,用于执行除法运算是哪个? A

A、/ B、\\ C、% D、* 7、下列语句哪些属于循环语句?(多选) AC

A、for语句 B、if语句 C、while语句 D、switch语句

8、下面哪种写法可以实现访问数组arr的第1个元素?A

A、arr[0] B、arr(0) C、arr[1] D、arr(1)

9、以下哪个选项可以正确创建一个长度为3的二维数组?(B)C

A、 new int [2][3]; B、 new int[3][];

C、 new int[][3]; D、 以上答案皆不对 10、请先阅读下面的代码。

int x = 1; int y = 2;

if (x % 2 == 0) { }

System.out.println(\

y++; y--; } else {

上面一段程序运行结束时,变量y的值为下列哪一项?A

A、1 B、2 C、3 D、switch语句

四、程序分析题

阅读下面的程序,分析代码是否能够编译通过,如果能编译通过,请列出运行的结果。否则请说明编译失败的原因。

代码一:b=7(编译不通过。int值4和b相加时,由于变量b的类型为byte,取值范围没有int类型大,存不下int类型的值,因此编译不通过)

public class Test01 { }

public static void main(String[] args) { }

byte b = 3; b = b + 4;

System.out.println(\

代码二:不能,y只在{}有效(编译不通过。这是因为y是在最里层的代码块中定义的一个变量,只有在那个代码)

public class Test02 {

public static void main(String[] args){

int x = 12; {

int y = 96;

System.out.println(\System.out.println(\

}

void test() { }

System.out.print(\

class B extends A { }

void test() { }

super.test();

System.out.print(\

A、产生编译错误 B、代码可以编译运行,并输出结果AB C、代码可以编译运行,但没有输出 D、编译没有错误,但会产生运行时异常

四、分析题

阅读下面的程序,分析代码是否能编译通过,如果能编译通过,请列出运行的结果。如果不能编译通过,请说明原因。 代码一:进入catch代码块

进入finally代码块(程序编译能通过,这是因为int x = 2 / 0; System.out.println(x);这两条语句使用了try块,捕获了程序因为除以0而产生的异常情况,之后程序会继续向下执行,输出“进入catch代码块”,“进入finally代码块”。)

public class Test01 {

public static void main(String[] args) { }

try {

int x = 2 / 0;

System.out.println(x);

} catch (Exception e) { }

System.out.println(\进入catch代码块\System.out.println(\进入finally代码块\} finally {

}

代码二:不能,final修饰shout,不能被重写(程序编译不通过,这是因为在程序中使用了final关键字修饰Animal类,使得Animal类不能被继承。shout()方法中同样使用了final关键字,使得该方法不能被重

写。)

final class Animal { }

class Dog extends Animal { }

class Test02 { }

public static void main(String[] args) { }

Dog dog=new Dog(); public void shout() { }

// 程序代码

public final void shout() { }

// 程序代码

代码三:动物叫!

汪汪……

class Animal { }

class Dog extends Animal { }

public class Test03 { }

public static void main(String[] args) { }

Animal animal = new Dog(); animal.shout();

void shout() { }

super.shout();

System.out.println(\汪汪……\void shout() { }

System.out.println(\动物叫!\

代码四:不能,Dog没有实现Animal所有方法,Dog为抽象类不能创建对象(程序编译不通过,因为

接口中定义的方法不能有方法体,所以定义的eat()方法是错误的。接口中的方法必须在子类中全部实现,由于run()方法在子类中并没有重新实现,所以这也是错误的。)

interface Animal { }

class Dog implements Animal {

public void breathe() {

System.out.println(\’m breathing\}

public void eat() {

System.out.println(\’m eathing\} }

public class test04 {

public static void main(String [] args) { Dog dog = new Dog(); dog.breathe(); dog.eat(); } }

void breathe(); void run(); void eat(){};

五、简答题

1、什么是方法重写?

在继承关系中,子类的方法与父类的某一方法具有相同的方法名、返回类型和参数列表,则称子类的该方法重写(覆盖)父类的方法。

2、什么是多态?

多态意味着一个对象有着多种形态,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。简单的说,多态就是使用父类类型的变量引用子类对象,根据被引用子类对象的特性,程序会得到不同的运行效果。

3、抽象类和接口的区别?

在Java中,使用abstract关键字修饰的类称之为抽象类。抽象类是不能被实例化的,通常需要写一个子类来继承抽象类,同时实例化子类来获得该类的对象。抽象类通常用于表示一种抽象的概念。

接口可以说是一种特殊的抽象类,接口中只能定义常量和抽象方法。由于接口的特殊性,在定义时需要使用interface关键字。

六、编程题

请按照题目的要求编写程序并给出运行结果。

1、 设计一个学生类Student和它的一个子类Undergraduate,要求如下:

1) Student类有name(姓名)、和age(年龄)属性,一个包含两个参数的构造方法,用于给name和

age属性赋值,一个show()方法打印Student的属性信息

2) 本科生类Undergraduate增加一个degree(学位)属性。有一个包含三个参数的构造方法,前两个

参数用于给继承的name和age属性赋值,第三个参数给degree专业赋值,一个show()方法用于打印Undergraduate的属性信息

3) 在测试类中分别创建Student对象和Undergraduate对象,调用它们的show()。 2、设计一个Shape接口和它的两个实现类Square和Circle,要求如下:

1)Shape接口中有一个抽象方法area(),方法接收有一个double类型的参数,返回一个double类型的结果

2)Square和Circle中实现了Shape接口的area()抽象方法,分别求正方形和圆形的面积并返回 在测试类中创建Square和Circle对象,计算边长为2的正方形面积和半径为3的圆形面积

3、自定义一个异常类NoThisSoundException和Player类,在Player的play()方法中使用自定义异常,要求入下:

1) NoThisSongException继承Exception类,类中有一个无参和一个接收一个String类型参数的

构造方法,构造方法中都使用super关键字调用父类的构造方法。

2) Player类中定义一个play(int index)方法,方法接收一个int类型的参数,表示播放歌曲的索

引,当index>10时,paly()方法用throw关键字抛出NoThisSongException异常,创建异常对象时,调用有参的构造方法,传入“您播放的歌曲不存在”。

3) 在测试类中创建Player对象,并调用play()方法测试自定义的NoThisSongException异常,使

用try…catch语句捕获异常,调用NoThisSongException的getMessage()方法打印出异常信息。

第5章 多线程

一、填空题

1、一个应用程序中有多条并发执行的线索,每条线索都被称作一个线程______,它们会交替执行,彼此

间可以进行_通信_____。

2、在实现多线程的程序时有两种方式,一是通过继_Thread_____承类,二是通过实现Runnable______接口。

3、yield()方法只能让相同优先级或者更高优先级、处于_就绪_____状态的线程获得运行的机会。 4、在Java语言中,同步方法需要用到关键字_synchronized_,对于同步方法而言无需指定同步锁,

它的同步

锁是方法所在的_对象_____,也就是_this_____(关键字)。

5、在多任务系统中,每个独立执行的程序称之为_线程_____,也就是“正在运行的程序”。

6、线程的整个生命周期分为五个阶段,分别是_新建_____、就绪______、_运行_____、_阻塞_____、和死亡_____。

7、线程的优先级用1~10之间的整数来表示,其中__10___代表优先级最高,__1___代表优先级最低。 8、在Thread类中,提供了一个start()方法,该方法用于启动线程______,当新线程启动后,系统会自动调用__run()____方法。

9、要想解决线程间的通信问题,可以使用__wait()____、notify()______、_notifyALL()_____方法。 10、要将某个线程设置为后台线程,需要调用该线程的_setDaemon(true)_____方法,该方法必须在

_start()_____方法之前调用。

二、判断题

1、当我们创建一个线程对象时,该对象表示的线程就立即开始运行。错 2、如果前台线程全部死亡,后台线程也会自动死亡。对 3、同步代码块中的锁对象可以是任意类型的对象。对 4、静态方法不能使用synchronized关键字来修饰。错 5、线程结束等待或者阻塞状态后,会进入运行状态。错 三、选择题

1、Thread类位于下列哪个包中?B

A、java.io B、java.lang C、java.util D、java.awt 2、关于线程的创建过程,下面四种说法正确的有哪些?(多选)AC

A、定义Thread类的子类,重写Thread类的run()方法,创建该子类的实例对象,调用对象的start()方法

B、定义Thread类的子类,重写Thread类的run()方法,创建该子类的实例对象,调用对象的run()方法

C、定义一个实现Runnable 接口的类并实现run()方法,创建该类实例对象,将其作为参数传递给Thread类的构造方法来创建Thread对象,调用Thread对象的start()方法 D、定义一个实现Runnable 接口的类并实现run()方法,创建该类对象,然后调用run()方法 3、对于通过实现Runnable接口创建线程,下面说法正确的有哪些?(多选)ABC A、适合多个相同程序代码的线程去处理同一个资源的情况

B、把线程同程序代码、数据有效的分离,很好的体现了面向对象的设计思想 C、可以避免由于Java的单继承带来的局限性 D、编写简单,可以不通过Thread类直接创建线程

4、对于线程的生命周期,下面四种说法正确的有哪些?(多选) ABC(BC)

A、调用了线程的start()方法,该线程就进入运行状态 (就绪,还要获得CPU使用权)

B、线程的run()方法运行结束或被未catch的InterruptedException等异常终结,那么该线程进入死亡状态

C、线程进入死亡状态,但是该线程对象仍然是一个Thread对象,在没有被垃圾回收器回收之前仍可以像引用其它对象一样引用它

D、线程进入死亡状态后,调用它的start()方法仍然可以重新启动 5、对于死锁的描述,下面四种说法正确有哪些?(多选)AB(ABD) A、当两个线程互相等待对方释放同步锁时会发生死锁 B、Java虚拟机没有检测和处理死锁的措施 C、一旦出现死锁,程序会发生异常

D、处于死锁状态的线程处于阻塞状态,无法继续运行 6、下面四个选项中,哪些是线程进入阻塞状态的原因?(多选)ABC A、线程试图获取某个对象的同步锁,而该锁被其它线程持有 B、线程调用了另一个线程的join()方法 C、当线程调用了一个阻塞式的IO方法 D、线程调用了setDaemon(boolean b)方法

7、线程调用sleep()方法后,该线程将进入以下哪种状态?C A、就绪状态 B、运行状态 C、阻塞状态

D、死亡状态

8、在以下哪种情况下,线程进入就绪状态?D A、线程调用了sleep()方法时

B、线程调用了join()方法(终止)

C、线程调用了yield()方法时 D、线程调用了notify()方法??

9、下面四个选项中,对线程同步的目的描述正确的有哪些?(多选)AD(AB)

A、锁定资源,使同一时刻只有一个线程去访问它,防止多个线程操作同一个资源引发错误 B、提高线程的执行效率 C、让线程独占一个资源

D、让多个线程同时使用一个资源

10、对于wait()方法,下面说法正确的是?(多选)ABCD A、wait()方法的调用者是同步锁对象 B、wait()方法使线程进入等待状态

C、调用同一锁对象的notify()或notifyAll()方法可以唤醒调用wait()方法等待的线程 D、调用wait()方法的线程会释放同步锁对象

四、程序分析题

阅读下面的程序,分析代码是否能编译通过,如果能编译通过,请列出运行的结果。如果不能编译通过,请说明原因。

1.代码一:不能,RunHandler没有继承Thread,不能用Thread创建对象(程序不能编译通过,因为RunHandler类没有实现Runnable接口,因此RunHandler的实例对象不能作为参数传递给Thread的构造方法。)

class RunHandler {

public void run(){

System.out.println(\} }

public class Test {

public static void main(String [] args) {

Thread t = new Thread(new RunHandler()); t.start(); }

}

2.代码二:this is run(程序不能编译通过,因为Thread的子类A重写的run()方法的访问级别不能低于父类run()方法的。访问级别)

public class A extends Thread{

protected void run() {

System.out.println(\ }

public static void main(String[] args) { }

}

A a = new A(); a.start();

3.代码三:Exception(程序不能编译通过,因为同步方法中调用wait()方法的对象必须为同步锁对象)

public class Test{ }

private Object obj=new Object(); public synchronized void a(){ }

public static void main(String[] args) { }

new Test().a(); try { }

obj.wait();改this.wait() System.out.println(\System.out.println(\

} catch (InterruptedException e) {

4.为了使下面的程序能够输出“Thread is running”,请在在空格处填上相应的代码。

public class B implements Runnable {

public static void main(String[] args) { }

public void run() { }

public void go() { }

start(1);

System.out.println(\Thread t = new Thread(new B());

__t.start()_____________________ //此处填空

}

public void start(int i) { }

五、简答题

1、 java中有几种方法可以实现一个线程?请举例说明。

一种是继承java.lang包下的Thread类,覆写Thread类的run()方法,在run()方法中实现运行在线程上的代码。

new Thread() {

public void run(){} }.start();

另一种就是实现java.lang.Runnable接口,同样是在run()方法中实现运行在线程上的代码。

new Thread(new Runnable(){ public void run(){} }).start()

2、 sleep() 和 wait() 有什么区别?

调用sleep()方法,正在执行的线程主动让出CPU去执行其他线程,在sleep()方法指定的时间过后,CPU才会回到这个线程上继续往下执行,如果当前线程进入了同步锁,sleep()方法并不会释放锁,即使当前线程使用sleep()方法让出了CPU,但其它被同步锁挡住了的线程也无法得到执行。wait()在一个已经进入了同步锁的线程内进行调用,让当前线程暂时让出同步锁,以便其它正在等待此锁的线程可以得到同步锁并运行。当其它线程调用了notify()方法后,调用wait()方法的线程就会解除wait状态,当再次获得同步锁后,程序可以继续向下执行。 六、编程题

请按照题目的要求编写程序并给出运行结果。

1、通过继承Thread类的方式创建两个线程,在Thread构造方法中指定线程的名字,并将这两个线程的名字打印出来。

2、通过实现Runnable接口的方式创建一个新线程,要求main线程打印100此次“main”,新线程打印50次“new”。

3、模拟传智播客的三个老师同时分发80份学习笔记,每个老师相当于一个线程。

4、编写10个线程,第一个线程从1加到10,第二个线程从11加到20...第十个线程从91加到100,最后再把十个线程结果相加。

第6章 JavaAPI

一、填空题

1、在Java中定义了两个类来封装对字符串的操作,它们分别是String_和_StringBuffer____。 2、Java中的操作日期的类有_Date___、_Calendar___、DateFormat____等。

3、在程序中若想取得一个Runtime实例,则可以调用Runtime类的静态方法getRnutime()_____。 4、Math类中用于计算所传递参数平方根的方法是_sqrt()____。 5、Java中专门用于将日期格式化为字符串的类是_DateFormat____。 6、Math类中有两个静态常量PI和E,分别代表数学常量_π___和_e___。 7、Java中的用于产生随机数的类是_Random___,它位于java.util____包中。 8、String类中用于返回字符串字符个数的方法是_length()____。

9、System类中所提供的属性和方法都是_静态___的,想要引用这些属性和方法,直接使用System类调用即可。

10、已知 sb 为 StringBuffer 的一个实例,且 sb.toString() 的值为 \, 则执行sb. reverse()后,sb.toString()的值为_”edcba_”___。

二、判断题

1、String对象和StringBuffer对象都是字符串变量,创建后都可以修改。错

2、用运算符“==”比较字符串对象时,如果两个字符串的值相同,结果为true。错 3、System类中的currentTimeMillis()方法返回一个long类型的值。对

4、Date、Calendar以及DateFormat类都位于java.util包中。错 分别java.util.Date java.util.Calendar java.text.DateFormat

5、String类的方法 replace (CharSequence srt1, CharSequence srt2)返回一个新的字符串,它是通过用srt2替换此字符串中出现的所有 srt1得到的。对 三、选择题。

1、先阅读下面的程序片段:C

String str = \ String[] arr = str.split(\ System.out.println(arr.length);

程序执行后,打印的结果是几?

A、2个 B、 3个 C、4个 D、 5个 2、以下都是Math类的常用方法,其中用于计算绝对值的方法是哪个?C

A、ceil() B、 floor() C、 abs() D、random() 3、Random对象能够生成以下哪种类型的随机数?D

A、int B、string C、double D、A和C

4、String s = \则s.substring(3,4)返回的字符串是以下选项中的哪个?C

A、cd B、de C、d D、e

5、假若indexOf()方法未能找到所指定的子字符串,则返回以下选项中的哪个?C

A、 false B、 0 C、-1 D、以上答案都不对 6、要产生[20,999]之间的随机整数可以使用以下哪个表达式?B

A.(int)(20+Math.random()*97) B. 20+(int)(Math.random()*980)

C. (int)Math.random()*999 D. 20+(int)Math.random()*980

7、以下Math类的方法中,-4.4通过哪个方法运算后,结果为-5.0?D(C)

A. round()四舍五入 B. min() C. floor() 小于参数最大整数 D. ceil()大于参数最小整数 8、下面的程序段执行后,输出的结果是以下哪个选项?A

StringBuffer buf=new StringBuffer(\ buf.insert(7,\

System.out.println(buf.toString());

A、Beijing@2008 B、@Beijing2008 C、Beijing2008@ D、Beijing#2008 9、阅读下面的程序:A

public class test {

public static void main(String args[]) { int i;

float f = 2.3f;

double d = 2.7;

i = ((int)Math.ceil(f)) * ((int)Math.round(d)); System.out.println(i); } }

程序执行后,运行结果为以下哪个选项?

A、 9 B、 5 C、6 D、 6.1 10、先阅读下面的程序片段:B

String str1=new String(\String str2=new String(\

StringBuffer str3=new StringBuffer(\

对于上述定义的变量,以下表达式的值为true的是哪个?

A、 str1==str2; B、str1.equals(str2); C、str1==str3; D、以上都不对 四、程序分析题。

阅读下面的程序,分析代码是否能编译通过,如果能编译通过,请列出运行的结果。如果不能编译通 过,请说明原因。

代码一:5 7.0

-8.0 -5 8.1 -6.1

public class A {

}

public static void main(String[] args) { }

System.out.println(Math.abs(-5)); System.out.println(Math.ceil(6.6)); System.out.println(Math.floor(-7.8)); System.out.println(Math.round(-4.9)); System.out.println(Math.max(8.1, -8.1)); System.out.println(Math.min(6.1, -6.1));

代码二:str.length():15 str.charAt(0):d lastIndexOf(m):\substring(2,4):fe indexOf(g):5

public class B { }

public static void main(String[] args) { }

String s = \System.out.println(\System.out.println(\

System.out.println(\System.out.println(\System.out.println(\

五、简答题

1、String和StringBuffer有什么区别?

String类是不可变类,即字符串值一旦初始化后就不可能改变。StringBuffer是可变字符串类,类似String的缓冲区,可以修改字符串的值。

2、Date和Calender类有什么区别和联系?

Date类用来表示某个特定的瞬间,能够精确到毫秒。而在实际应用中,往往需要把一个日期中的年、月、日等信息单独返回进行显示或处理,这个类中的大部分方法都已被标记过时。Calender

类基本取代了Date类,该类中定义了一系列用于完成日期和时间字段操作的方法。

Calendar的getTime()方法,getTime()返回一个表示Calendar时间值的Date对象,同时Calendar有一个setTime(Date date)方法,setTime()方法接收一个Date对象,将Date对象表示的时间值设置给Calendar对象,通过这两个方法就可以完成Date和Calendar对象之间的转换。

六、编程题

请按照题目的要求编写程序并给出运行结果

1、 编写一个程序,实现字符串大小写的转换并倒序输出,要求如下

1)使用for循环将字符串“HelloWorld”从最后一个字符开始遍历。

2)遍历的当前字符如果是大写字符,就使用toLowerCase()方法将其转换为小写字符,反之则使用toUpperCase() 方法将其转换为大写字符

3)定义一个StringBuffer对象,调用append()方法依次添加遍历的字符,最后调用StringBuffer对象的toString()方法,并将得到的结果输出。

2、 计算从今天算起,100天以后是几月几号,并格式化成xxxx年x月x日的形式打印出来。

提示:

1)调用Calendar类的add()方法计算100天后的日期 2)调用Calendar的getTime() 方法返回Date类型对象

2)使用FULL格式的DateFormat对象,调用format() 方法格式化Date对象 3、利用Random类来产生5个20~50之间的随机整数。

提示:[n-m](n、m均为整数,n

第7章 集合类

一、填空题

1、JDK中提供了一系列可以存储任意对象的类,统称为 集合 。

2、在创建TreeSet对象时,可以传入自定义的比较器,自定义比较器需要实现 Comparator 接口。 3、Collection有两个子接口分别是List和Set,List集合的特点是 有序、可重复 ,Set集合的特点是 无序、不可重复 。

4、使用Iterator遍历集合时,首先需要调用 hashNext() 方法判断是否存在下一个元素,若存在下一个元素,则调用 next() 方法取出该元素。

5、集合按照存储结构的不同可分为单列集合和双列集合,单列集合的根接口是 Collection ,双列集合的根接口是 Map 。

6、Map集合中的元素都是成对出现的,并且都是以 键 、 值 的映射关系存在。

7、Iterator有一个子类,不仅可以对集合进行从前向后遍历,还可以从后向前遍历,该类是 ListIterator 。

8、List集合的主要实现类有 ArrayList 、 LinkedList ,Set集合的主要实现类有 HashSet 、 TreeSet Map集合的主要实现类有 HashMap 、 TreeMap 。

9、Map集合中存储元素需要调用 put() 方法,要想根据该集合的键获取对应的值需要调用 get() 方法。

10、java.util包中提供了一个专门用来操作集合的工具类,这个类是 Collections ,还提供了一个专门用于操作数组的工具类,这个类是 Arrays 。

二、判断题

1、Set集合是通过键值对的方式来存储对象的。错

2、集合中不能存放基本数据类型,而只能存放引用数据类型。对

3、如果创建的TreeSet集合中没有传入比较器,则该集合中存入的元素需要实现Comparable接口。对

4、使用Iterator迭代集合元素时,可以调用集合对象的方法增删元素。错

5、LinkedList在内部维护了一个双向循环链表,每一个元素节点都包含前一个元素节点和后一个元素节点的引用。对

三、选择题

1、要想保存具有映射关系的数据,可以使用以下哪些集合?(多选)BC

A、ArrayList B、TreeMap C、HashMap D、TreeSet 2、Java语言中,集合类都位于哪个包中?A

A、java.util B、java.lang C、java.array D、java.collections 3、使用Iterator时,判断是否存在下一个元素可以使用以下哪个方法?D A、next() B、hash() C、hasPrevious() D、hasNext() 4、关于foreach循环的特点,以下说法哪些是正确的?(多选)ABD A、foreach循环在遍历集合时,无需获得容器的长度

B、foreach循环在遍历集合时,无需循环条件,也无需迭代语句 C、foreach循环在遍历集合时非常繁琐

D、foreach循环的语法格式为:for(容器中元素类型 临时变量 :容器变量)。 5、在程序开发中,经常会使用以下哪个类来存储程序中所需的配置?C

A、HashMap B、TreeSet C、Properties D、TreeMap 6、使用Enumeration遍历集合时,需要使用以下哪些方法?(多选)AB

A、hasMoreElements() B、nextElement() C、next() D、hashNext()

7、要想集合中保存的元素没有重复并且按照一定的顺序排列,可以使用以下哪个集合?D A、LinkedList B、 ArrayList C、hashSet D、TreeSet

8、下列哪些说法是正确的?(多选)AB

A、LinkedList集合在增删元素时效率较高 B、ArrayList集合在查询元素时效率较高 C、HashMap不允许出现一对null键null值 D、HashSet集合中元素可重复并且无序

9、以下哪些方法是LinkedList集合中定义的?(多选) ABC

A、getLast() B、getFirst() C、remove (int index) D、next() 10、获取单列集合中元素的个数可以使用以下哪个方法?B

A、length() B、size() C、get(int index) D、add(Object obj)

四、分析题

阅读下面的程序,分析代码是否能编译通过,如果能编译通过,请列出运行的结果。如果不能编译通过,请说明原因。

代码一:程序可以编译通过,输出结果是“a、b、c”,因为TreeSet集合不允许存放重复元素,第2次增加的元素c会覆盖之前存入的元素c,所以输出结果是“a、b、c”,而不是“a、b、c、c”。

import java.util.*; public class Test01 {

public static void main(String[] args) { TreeSet ts = new TreeSet(); ts.add(\ ts.add(\ ts.add(\ ts.add(\ }

Iterator it = ts.iterator(); while(it.hasNext()) {

System.out.println(it.next()); }

}

代码二:程序不可以编译通过,这是由于向ArrayList集合中存入元素时,集合并不能记住元素的类型,因此在取出元素时,只能使用Object类型,而不能使用String类型。

import java.util.ArrayList; public class Test02 { }

public static void main(String[] args) { }

ArrayList list = new ArrayList(); list.add(\ list.add(\ list.add(\ }

for (String obj : list) {

System.out.println(obj);

代码三:程序可以编译通过,但是什么也没有打印。使用ListIterator进行从后向前的遍历集合,可以使用以下两种方法,一是使用listIterator(int index)方法将索引index的值设置为集合元素的数目,也就是ListIterator it = list.listIterator(3);,二是将程序先从前向后遍历,然后再从后向前遍历。

import java.util.*; public class Test03 { }

public static void main(String[] args) { }

ArrayList list = new ArrayList(); list.add(\list.add(\list.add(\

ListIterator it = list.listIterator(); while(it.hasPrevious()) { }

Object obj = it.previous(); System.out.print(obj+\

代码四:程序编译不通过,由于Map集合在遍历的过程中不能使用集合对象本身删除元素,这会导致并发修改异常,若想删除集合中的元素,可以使用Iterator的remove()方法。

import java.util.*; import java.util.Map.*; public class Test04 { }

public static void main(String[] args) { }

Map map = new HashMap(); map.put(1, \map.put(2, \map.put(3,\

Set keySet = map.keySet(); Iterator it = keySet.iterator(); while (it.hasNext()) { }

Object key = it.next(); System.out.println(key); map.remove(key);

五、简答题

1、什么是集合,请列举集合中常用的类和接口?

为了使程序能方便的存储和操作数目不固定的一组数据,JDK提供了一套类库,这些类都位 于java.util包中,统称为集合。集合框架中包含3个接口,分别是List、Set、Map。

2、集合中的List、Set、Map有什么区别?

List的特点是元素有序、元素可重复。List接口的主要实现类有ArrayList和LinkedList。Set的特点是元素无序、元素不可重复。Set接口的主要实现类有HashSet和TreeSet。Map的特点是存储的元素是键(Key)、值(Value)映射关系,元素都是成对出现的。Map接口的主要实现类有HashMap和TreeMap。

3、请说说Collection和Collections的有什么区别?

Collection是一个单例集合接口。它提供了对集合对象进行基本操作的通用方法。Collections是一个工具类。它包含各种有关集合操作的方法。 六、编程题

请按照题目的要求编写程序并给出运行结果。

1、 使用ArrayList集合,对其添加10个不同的元素,并使用Iterator遍历该集合。

提示:

1)使用add()方法将元素添加到ArrayList集合中。

2)调用集合的iterator()方法获得Iterator对象,并调用Iterator的hasNext()和next()方法,迭代出

集合中的所有元素。

2、 在HashSet集合中添加三个Person对象,把姓名相同的人当做同一个人,禁止重复添加。 提示:

1)Person类中定义name和age属性,重写hashCode()方法和equals()方法,针对Person类的name

属性进行比较,如果name相同,hashCode()方法的返回值相同,equals方法返回true。 3、选择合适的Map集合保存5位学员的学号和姓名,然后按学号的自然顺序的倒序将这些键值对一一打印出来。 提示:

1)创建TreeMap集合。

2)使用put()方法将学号(“1”、“2”、“3”、“4”、“5”)和姓名(“Lucy”、“John”、“Smith”、“Aimee”、“Amanda”)存储到Map中,存的时候可以打乱顺序观察排序后的效果。 3)使用 map.keySet()获取键的Set集合。

4)使用Set集合的iterator()方法获得Iterator对象用于迭代键。 5)使用Map集合的get()方法获取键所对应的值。

第8章 IO(输入输出)

一、填空题

1、Java中的IO流,按照传输数据不同,可分为__字节流__和__字符流__。 2、在Java中,__File__类用于操作磁盘中文件和目录,位于__java.io__包中。 3、在Java中,_SequenceInputStream

__类用来把两个或更多的InputStream输入流对象合并为单个InputStream输入流对象 使用。

4、Java中提供了一个类__RandomAccessFile

__,它不但具有读写文件的功能,并且可以随机地从文件的任何位置开始执行读写数据的操作。 1、 5、在Java中,能实现线程间通信的流是__管道流 __。

6、Java中提供了一个可以在读文件的同时记录行号的类,这个类是__LineNumberReader__,它是__BufferedReader__的直接子类,它通过__setLineNumber(int)__和 __getLineNumber()__方法设置和获取当前行号。

7、InputStreamReader类是用于将__字节流__转换为__字符流__。

8、System.out是__PrintStream__类的对象,称为标准输出流,调用System类的__setOut(PrintStream out)__方法可以实现标准输出流的重定向。

2、 9、Java中一个字符占用两个字节,所有字符采用的都是__Unicode __码表。

10、BufferedWriter的__newLine()__方法可以写入一个换行符。 二、判断题

1、如果一个File表示目录下有文件或者子目录,调用delete()方法也可以将其删除。错 2、装饰设计模式中,装饰对象应该包含一个被装饰对象的引用。对

3、使用ObjectInputStream与ObjectOutputStream类来读取或存储的对象必须要实现Serializable接口,否则程序将出现NotSerializableException异常。对

4、InputStream类的close()方法是用于关闭流并且释放流所占的系统资源。对

5、一般来说,把字符转换成计算机识别的字节序列称为解码,而把字节序列转换为普通人能看懂的明文字符称为编码。错 三、选择题

1、下面选项中,哪些是标准输入输出流?(多选)AB

A、System. In B、System. Out C、InputStream D、OutputStream 2、以下选项中,哪个是FileOutputStream的父类?C A.File B.FileOutput C.OutputStream D.InputStream 3、File类中以字符串形式返回文件绝对路径的的方法是? C A、getParent()

B、getName() D、getPath()

C、getAbsolutePath()

4、下面哪些是常用的字符码表?(多选)ABCD

A、ASCII B、UTF-8 C、ISO8859-1 D、GB2312

5、以下创建RandomAccessFile类实例对象的代码,哪些是正确的? (多选)AB A、RandomAccessFile(new File(“D:\\\\itcast\\\\dir1\\\\test.java”),”rw”) B、RandomAccessFile( “D:\\\\itcast\\\\dir1\\\\test.java”,”r”) C、RandomAccessFile( “D:\\\\itcast\\\\dir1\\\\test.java”)

D、RandomAccessFile( “D:\\\\itcast\\\\dir1\\\\test.java”,”wr”) 6、以下哪些属于InputStream类的方法?(多选)ACD

A、int read(byte[]) B、void flush() C、void close() D、available() 7、以下选项中,哪个流中使用了缓冲区技术?A

A 、BuffereOutputStream B、 FileInputStream C、DataOutputStream D、FileReader

8、以下选项中,哪个是File类delete()方法返回值的类型?A

A、 boolean B、 int C、 String D、 Integer 9、以下选项中,哪个文件操作类可以实现一次读入多个文件?D

A、 FileReader B、BufferedReader C、FileInputStream D、SequenceInputStream 10、以下对File类的public boolea isFile()方法的描述,哪个是正确的?A

A、判断该File对象所对应的是否是文件。 B、判断该File对象所对应的是否是目录。 C、返回文件的最后修改时间。 D、在当前目录下生成指定的目录。

四、程序填空题

1、阅读以下代码,并将空处填写完整。

import java.io.*;

public static void main(String args[])throws Exception{

int a=4;

BufferedReader br=new BufferedReader(new InputStreamReader (System.in)); System.out.println(\请输入一个数字\String input= br.readLine() ; int b=Integer.parseInt(input);

public class Test1 {

if(b>a){

int sum=b/a;

System.out.println(sum); }else{

System.out.println(\输入错误\ } } }

当输入的数字是8时,打印输出的结果是 2 。

2、以下是使用FileInputStream类与FileOutputStream类复制文件。阅读以下代码,并将空处填写完整。

import java.io.*; class Test2 { }

public static void main(String[] args) { }

String file1, file2; int ch = 0;

file1 = \file2 = \try { }

FileInputStream fis = new FileInputStream(file1) ; FileOutputStream fos=new FileOutputStream(file2); int size= fis.available() ;

System.out.println(\字节有效数、\ while ((ch = fis.read()) != -1) { }

fis.close(); fos.close();

System.out.println(e.toString());

System.out.write(ch); fos.write(ch);

} catch (IOException e) {

五、简答题

1、简述流的概念。

Java程序通过流来完成输入和输出,流是输入或输出信息的抽象。流通过Java的输入/输出系统与外设连接进行数据通信。流是抽象的对象,具体实现代码在java.io包中。

2、Java流被分为字节流、字符流两大流类,两者有什么区别?

字节流的两个基类是InputStream和OutputStream,字符流的两个基类是Reader和Writer,它们都是Object类的直接子类,字节流是处理以8位字节为基本单位的字节流类;Reader和Writer类是专门处理16位字节的字符流类。

3、简要说明管道流。

管道流分为管道输入流(PipedInputStream)和管道输出流(PipedOutputStream),通常由一个PipedInputStream实例对象和一个PipedOutputStream实例对象相互连接而实现管道通信,PipedOutputStream向管道写入数据,PipedInputStream从管道中读取PipedOutputStream写入的数据,管道流主要用来完成线程之间的通信。 六、编程题

按照题目需求,编写程序并运行

1、编写一个程序,分别使用字节流和字符流拷贝一个文本文件。 提示:

1)使用FileInputStream、FileOutputStream和FileReader、FileWriter分别进行拷贝

2)使用字节流拷贝时,定义一个1024长度的字节数组作为缓冲区,使用字符流拷贝使用使用

BufferedReader和BufferedWriter包装流进行包装

2、某人在玩游戏的时候输入密码123456后成功进入游戏(输错5次则被强行退出),要求用程序实现密码验证的过程。 提示:

1)使用Sysytem.in包装为字符流读取键盘输入。

2)BufferedReader对字符流进行包装。调用BufferedReader的readLine()方法每次读取一行。 3)在for循环判中判断输入的密码是否为“123456”,如果是则打印“恭喜你进入游戏”,并跳出循环,否则继续循环读取键盘输入。

4)当循环完毕,密码还不正确,则打印“密码错误,结束游戏”,并调用System.exit(0)方法结束程序。

第9章 GUI(图形用户界面)

一、填空题

1、 Java中,图形用户界面简称___GUI___,它的组件包含在___java.awt___和___javax.swing___这两个包中。

2、 为了避免实现监听器中定义的所有方法,造成代码的臃肿,在JDK中提供了一些___适配器___

类,这些类实现了接口所有的方法,但是方法中没有任何代码,属于一种空实现。 3、 在Java中,___Graphics___类相当于一个抽象的画笔对象,使用它可以在组件上绘制图形。 4、 ___事件监听器___负责监听事件源上发生的事件,并对各种事件做出响应处理。

5、 大部分的Swing组件都是___JComponent___类的直接或者间接子类,其名称都是在原来AWT组

件名称前加上字母J。

6、 AWT事件有多种多样,大致可以分为___窗体事件___、___键盘事件___、___鼠标事件___、___

动作事件___等。

7、 如果点击Frame窗口右上角的关闭按钮能将其关闭,那么这个Frame窗口添加了

___WindowListener___监听器,并实现了监听器的实现了___windowClosing(WindowEvent e)___方法。

8、 对话框可以分为___模态对话框___和___非模态对话框 ___两种。

9、 每一个容器都有一个默认的布局管理器,如果不希望通过布局管理器对容器进行布局,可以调用

容器的___setLayout(null)___方法将其取消。

10、创建下拉式菜单需要使用三个组件,分别是___JMenuBar___、___JMenu___和___JMenuItem___。 二、判断题。

1、容器(Container)是一个可以包含基本组件和其它容器的组件。对

2、可以通过实现ActionListener接口或者继承ActionAdapter类来实现动作时间监听器。错 3、CardLayout布局管理器将界面看做一系列卡片,在任何时候只有其中一张卡片是可见的。对 4、非模态对话框是指用户需要等到处理完对话框后才能继续与其它窗口进行交互。错

5、JFrame的默认布局管理器是FlowLayout。错 三、选择题

1、下面四个组件中哪一个不是Component的子类?D

A、Button B、Dialog C、Label D、MenuBar 2、每一个GUI程序中必须包含一个什么组件?D

A、按钮 B、标签 C、菜单 D、容器 3、下面四个选项中,哪些是事件处理机制中的角色?(多选)ABD A、事件

B、事件源

C、事件接口 D、事件监听器

4、当鼠标按键被释放时,会调用以下哪个事件处理器方法?A A、mouseReleased() C、mouseOff()

B、mouseUp() D、mouseLetGo()

5、ActionEvent的对象会被传递给以下哪个事件处理器方法?D A、addChangeListener() B、addActionListener() C、stateChanged() D、actionPerformed() 6、AWT中,常用的布局管理器包括哪些?(多选)ABCD A、FlowLayout布局管理器 C、CardLayout布局管理器

B、BorderLayout布局管理器 D、GridLayout布局管理器

7、下面哪些是FlowLayout类中表示对齐方式的常量?(多选)ABD A、FlowLayout.LEFT

B、FlowLayout.CENTER D、FlowLayout.RIGHT

C、FlowLayout.VERTICAL

8、下面对与Swing的描述,正确的有哪些?(多选)ABC

A、Swing 是在AWT基础上构建的一套新的图形界面系统 B、Swing提供了AWT 所能够提供的所有功能 C、Swing 组件是用Java代码来实现的 D、Swing组件都是重量级组件

9、下面四对AWT和Swing对应组件中,错误的是?D A、Button和JButton B、Dialog和JDialog C、MenuBar和JMenuBar D、ComboBox和JComboBox

10、使用下面哪个组件可以接收用户的输入信息?C A、JButton B、JLabel C、JTextField D、以上都可以

四、程序分析题

阅读下面的程序以及注释的要求,在空格处填上相应的代码 代码一:

import java.awt.*; import javax.swing.*;

public class MyLayout __extends __/*此处填空*/ JFrame{

JLabel labelNo,labelName,labelGender; JTextField stdno,name,gender; int x=0,y=0,w,h;

Container cp=getContentPane(); public MyLayout() {

setLayout(null);

学号=new JLabel(\、\姓名=new JLabel(\、\性别=new JLabel(\、\

_____Stdno = new JTextField();_______ // 此处填空 ____Name = new JTexxtField();_______ // 此处填空

}

}

gender=new JTextField(); x=80;y=30; w=100;h=30;

cp.add(labelNo); cp.add(labelName);cp.add(labelGender); cp.add(stdno);cp.add(name);cp.add(gender);

labelNo.setBounds(0,y,w,h); stdno.setBounds(x,y,w,h); labelName.setBounds(0,2*y,w,h);name.setBounds(x,2*y,w,h); labelGender.setBounds(0,3*y,w,h);gender.setBounds(x,3*y,w,h); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(280,200); setVisible(true);

public static void main(String args[]){ }

MyLayout obj=new MyLayout();

代码二:

import java.awt.CardLayout; import java.awt.Container;

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; public class MyCardLayout {

public static void main(String args[]) {

final JFrame jframe = new JFrame(\一个滚动列表的例子\final Container panelcp = jframe.getContentPane(); final CardLayout card = new CardLayout (20, 20); panelcp.setLayout(card); for (int i = 0; i < 5; i++) {

JButton jbt = new JButton(\

jbt.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

final JPanel panel = new JPanel();

jframe.add(panel);

// 点击的时候显示下一个按钮

}

jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

____card.next(cp);____ // 此处填空

});

__cp.add(jbt);___ // 此处填空

}

}

jframe.setSize(150, 200); jframe.setVisible(true);

五、简答题。

1、请简述GUI中实现事件监听的步骤。 参考答案

? 通过实现XxxListener接口或者继承XxxAdapter类实现一个事件监听器类,并对处理监听动作的

方法进行重写

? 创建事件源对象和事件监听器对象

? 调用事件源的addXxxLisntener()方法,为事件源注册事件监听器对象

2、AWT和Swing的区别 参考答案

AWT 是Abstract Window ToolKit (抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口。AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,当我们利用 AWT 来构件图形用户界面的时候,我们实际上是在利用操作系统所提供的图形库。由于不同操作系统的图形库所提供的功能是不一样的,在一个平台上存在的功能在另外一个平台上则可能不存在。为了实现Java语言所宣称的\一次编译,到处运行\的概念,AWT 不得不通过牺牲功能来实现其平台无关性,也就是说,AWT 所提供的图形功能是各种通用型操作系统所提供的图形功能的交集。由于AWT 是依靠本地方法来实现其功能的,我们通常把AWT控件称为重量级控件。

Swing 是在AWT的基础上构建的一套新的图形界面系统,它提供了AWT 所能够提供的所有功能,并且用纯粹的Java代码对AWT 的功能进行了大幅度的扩充。由于在Swing 中没有使用本地方法来实现图形功能,我们通常把Swing控件称为轻量级控件。

AWT和Swing之间的基本区别:AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是

本文来源:https://www.bwwdw.com/article/xpkt.html

Top