夏Java程序设计复习资料1.docx
《夏Java程序设计复习资料1.docx》由会员分享,可在线阅读,更多相关《夏Java程序设计复习资料1.docx(21页珍藏版)》请在冰豆网上搜索。
![夏Java程序设计复习资料1.docx](https://file1.bdocx.com/fileroot1/2023-1/25/7dd511f6-bb82-4f06-8652-6a723d5ef835/7dd511f6-bb82-4f06-8652-6a723d5ef8351.gif)
夏Java程序设计复习资料1
一、单项选择题
1.关于Java选择结构下列哪个说法正确?
(B)
A.if语句和else语句必须成对出现
B.if语句可以没有else语句
C.switch结构中每个case语句中必须用break语句
D.switch结构中必须有default语句
2.while循环和do…while循环的区别是:
(D)
A.没有区别,这两个结构任何情况下效果一样
B.while循环比do…while循环执行效率高
C.while循环是先循环后判断,所以循环体至少被执行一次
D.do…while循环是先循环后判断,所以循环体至少被执行一次
3.下列说法哪个是正确的?
(C)
A.程序执行到break语句时一定会结束所有的循环
B.程序执行到continue语句时会结束当前循环
C.break语句和continue语句都可以和标签协同使用
D.continue语句和break语句的作用相同
4.方法内的变量:
(B)
A.一定在方法内所在有位置可见
B.可能在方法内的局部可见
C.可以在方法外可见
D.方法外也可用
5.void的含义:
(B)
A.方法体为空B.方法没有返回值
C.没有意义D.定义方法时必须使用
6.throws的作用:
(C)
A.没有意义B.表示后面是方法的输出值
C.表示方法可能会抛出例外
D.方法的标志,每个方法都必须有
7.下列说法哪个正确?
(D)
A.不需要定义类,就能创建对象
B.对象中必须有属性和方法
C.属性必须是简单变量
D.属性可以是简单变量,也可以是一个对象
8.下列说法哪个正确?
(A)
A.一个程序可以包含多个源文件
B.一个源文件中只能有一个类
C.一个源文件中可以有多个公共类
D.一个源文件只能供一个程序使用
9.被声明为private,protected及public的类成员,在类外部:
(B)
A.只能访问声明为public的成员
E.只可能访问到声明为protected和public的成员
B.都可以访问
C.都不能访问2去取6
10.抽象方法:
(C)
A.可以有方法体
B.可以出现在非抽象类中
C.是没有方法体的方法
D.抽象类中的方法都是抽象方法
11.关于类中类的说法哪个正确?
(D)
A.类中类不能使用上层类的私有属性和方法
B.类中类可以广泛使用,不受任何限制
C.类中类可以单独编译
D.类中类可以使用上层类的私有属性和方法
12.下列说法哪个正确?
(B)
A.Java中允许一个子类有多个父类
B.某个类是一个类的子类,它仍有可能成为另一个类的父类
C.一个父类只能有一个子类
D.继承关系最多不能超来4层
13.在调用构造函数时:
(C)
A.子类可以不加定义就使用父类的所有构造函数
B.不管类中是否定义了何种构造函数,创建对象时都可以使用默认构造函数
C.先调用父类的构造函数
D.先调用形参多的构造函数
14.this和super:
(C)
A.都可以在main()方法中
B.都是指一个内存地址
C.不能用在main()方法中
D.意义相同
15.关于抽象类哪个正确?
(B)
A.抽象类中不可以有非抽象方法
B.某个非抽象类的父类是抽象类,则这个子类必须重载父类的所有抽象方法
C.绝对不能用抽象类去创建对象
D.接囗和抽象类是同一回事
16.如果一个程序段中有多个catch,程序会:
(C)
A.每个catch都执行一次
B.把每个符合条件的catch都执行一次
C.找到适合的例外类型后就不再执行其他catch
D.找到适合的例外类型后继续执行后面的catch
17.下面关于例外控制器排序说法正确的是:
(B)
A.应先捕捉父类例外,再捕捉子类例外
B.应先捕捉子类例外,再捕捉父类例外
C.有继承关系的例外不能在同一try块的控制器中使用
D.如果先匹配到父类例外,后面的子类例外仍然可以被匹配到
18.下列关于finally说法正确的是:
(C)
A.finally语句应该放在所有例外控制器的最前面
B.如果程序在前面的例外控制器中匹配了合适例外,就不再执行finally语句了
C.无论程序是否找到合适的例外控制器,都会去执行finally语句
如果程序在前面的例外控制器中匹配到了多个合适的例外,就不再执行finally语句了
19.如果程序逻辑要求在很多情况下输出一个固定的提示信息,下列说法正确的是:
(A)
A.使用String和StringBuffer都可以
B.使用String和StringBuffer,程序的执行效率一样
C.使用StringBuffer效率比较高
D.以上都不对
20.Vector类对象中的元素可以是:
(C)
A.int型整数B.浮点数
C.对象D.属性
21.如果程序逻辑要求对集合中的元素需要经常进行查找定位,应该使用哪些组件来实现?
(B)
A.VectorB.Hashtable
C.IteratorD.Map
22.Character流与Byte流的区别在于:
(A)
A.每次读入的字节数不同
B.前者带有缓冲,后者没有
C.前者是块读写,后者是字节读写
D.二者没有区别,可以互相使用
23.为了实现多线程程序中线程间通讯,需要使用的流是:
(B)
A.Filestream
B.Pipedstream
C.Randomaccessstream
D.Filterstream
24.用最简单的代码输出某个文件内容,最好采用:
(A)
A.Filestream
B.Pipedstream
C.Randomaccessstream
D.Filterstream
25.下列属于图形用户界面元素的有:
(C)
A.AppletB.窗口
C.按钮C.线程
26.每个作用Swing组件的程序都必须至少有一个:
(B)
A.按钮B.顶层容器
C.标签D.菜单
27.监听事件和处理事件:
(B)
A.都由Listener完成
B.都由在相应事件Listener处登记过的组件完成
C.由Listener和组件分别完成
D.由Listener和窗口分别完成
28.进程是指:
(B)
A.一段程序B.正在运行的程序
C.一个.java文件D.一个.class文件
29.在JSP中引用其他Java包,应该使用指令:
(C)
A.importB.include
C.pageD.package
30.关于forward动作的说法正确的有:
(C)
A.forward动作跳转到的页面执行完毕后,程序将返回到原来的页面
B.无论跳转到什么页面都可以传递参数过去
C.forward以下的代码将不能执行
D.不能直接利用forward动作本身向跳转的页面传递参数
31.下列说法正确的是:
(A)
A.只要.class文件放在同一个目录下,引用其他类不需要做任何说明
B.要引用同目录下的其他.class文件,必须在classpath变量中设置该路径
C.在一个类中引用其他自定义类,必须将两个类定义放在一个.java文件中
D.引用不同目录下的类,只要在classpath变量中设置好该路径即可
32.通过如下语句定义的StringBuffer,其length()方法与capacity()方法的返回值分别为:
(B)
StringBuffergreeting=newStringBuffer(50);
Stringa=”HappynewYear”;
greeting.append(a);
A.15,15B.15,50
C.50,15D.50,50
33.BitSot的最小长度是:
(D)
A.8位B.16位
C.32位D.64位
34.如果要读取一个大文件的末尾的一段内容,并且知道该段落的确切位置,最方便的流是:
(C)
A.FilestreamB.Pipedstream
C.RandomaccessstreamD.Filterstream
PartialAnswers:
20.C21.B22.A23.B24.A25.C26.B27.B28.B29.C30.C31.A32.B33.D34.C
二、多项选择题
1.面向过程程序设计的核心是:
(CD)
A.商业逻辑B.客观实体
C.算法D.要解决的问题
2.符合对象和类关系的是:
(CD)
A.人和老虎B.书和汽车
C.楼和建筑物D.汽车和交通工具
3.下列哪些是指线程的状态?
(ABC)
A.RunnableB.Dead
C.newThreadD.NonRunnable
4.网络应用的3层结构指哪些层?
(ACD)
A.Web层B.用户层
C.业务层D.数据层
5.J2EE组件有:
(ABD)
A.ServletB.JavaBeans
C.AWTD.EJB
6.记录页面访问历史事件可以使用的方法有:
(AB)
A.使用cookieB.改写URL
C.使用sessionD.使用表单隐藏
PartialAnswers:
3.A、B、C4.A、C、D5.A、B、D6.A、B
三、试说出以下程序的功能:
classAccount1{
privateStringname;
privateintvalue;
voidput(inti){
value=value+i;
}
intget(inti){
if(value>i)
value=value-i;
else
{
i=value;
value=0;
}
returni;
}
inthowmatch(){
returnvalue;
}
}
classSave2extendsThread{
privateAccount1a1;
privateintamount;
publicSave2(Account1a1,intamount){
this.a1=a1;
this.amount=amount;
}
publicvoidrun(){
synchronized(a1){
intk=a1.howmatch();
try{
sleep
(1);
}catch(InterruptedExceptione){
System.out.println(e);
}
a1.put(amount);
System.out.println("现有"+k+",存入"+amount+",余额"+a1.howmatch());
}
}
publicstaticvoidmain(Stringargs[]){
Account1a1=newAccount1();
(newSave2(a1,100)).start();
(newSave2(a1,200)).start();
(newFetch2(a1,500)).start();
}
}
classFetch2extendsThread{
privateAccount1a1;
privateintamount;
publicFetch2(Account1a1,intamount){
this.a1=a1;
this.amount=amount;
}
publicvoidrun(){
synchronized(a1){
intk=a1.howmatch();
try{
sleep
(1);
}catch(InterruptedExceptione){
System.out.println(e);
}
System.out.println("现有"+k+",取走"+a1.get(amount)+",余额"+a1.howmatch());
}
}
}
四、本程序为银行账户的存取款线程设计,通过synchronized互斥锁实现存取款的同步。
程序中包含三个类,银行账户类Account,存款线程类Save2和取款线程类Fectch2.
在主函数中先创建一个新账户a1,并创建三个线程,分别调用函数start()使线程处于可运行状态,该函数再调用run()函数使线程处于运行状态,由于账户对象a1用synchronized修饰,故账户a1在任一时刻只能有一个线程访问。
这样实现多个存取款线程的同步,保证账户金额的一致性。
输出结果:
现有0,存入100,余额100
现有100,存入200,余额300
现有300,取走300,余额0
四、编程题
有下面一段Server段程序,目的是能够同时服务多个客户,客户的请求是一句话(一个String)。
如果这个请求的内容是字符串"plain"的话,服务器仅将"hello"字符串返回给用户。
否则将用户的话追加到当前目录的文本文件Memo.txt中(路径为"Memo.txt"),并向用户返回"OK"。
注意Server并发的处理多用户,Memo.txt被共享,要求不能出现数据不一致。
Server的程序如下文件Server.java:
publicclassServer{
publicstaticvoidmain(Stringargs[]){
MemoControllermemoController=newMemoController();
try{
ServerSocketss=newServerSocket(1999);
while(true){
Sockets=ss.accept();
try{
UserThreadt=newUserThread(s,memoController);
t.start();
}catch(Exceptione){
e.printStackTrace();
}
}
}catch(Exceptione){
e.printStackTrace();
}finally{
memoController.close();
}
}
}
类UserThread程序如下:
文件UserThread.java:
publicclassUserThreadextendsThread{
Sockets;
MemoControllermemo;
publicUserThread(Sockets,MemoControllermemo){
this.s=s;
this.memo=memo;
}
publicvoidrun(){
try{
BufferedReaderbr=newBufferedReader(new
InputStreamReader(s.getInputStream()));
PrintWriterpw=newPrintWriter(new
OutputStreamWriter(s.getOutputStream()));
Stringreq=br.readLine();
if(req.equals("plain")){
pw.println("hello");
}else{
memo.append(req);
pw.println("OK");
}
pw.flush();
pw.close();
br.close();
s.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}
请根据题目的要求和现有的Server.java,UserThread.java的程序完成类MemoController.java的程序。
ReferenceAnswer:
importjava.io.*;
publicclassMemoController{
FileOutputStreamfos;
OutputStreamWriterosw;
BufferedWriterbw;
publicMemoController(){
try{
fos=newFileOutputStream("memo.txt",true);
osw=newOutputStreamWriter(fos);
bw=newBufferedWriter(osw);
}catch(FileNotFoundExceptione){};
}
publicsynchronizedvoidappend(Strings){
try{
bw.write(s,0,s.length());
bw.flush();
bw.close();
osw.close();
fos.close();
}catch(IOExceptione){}
}
publicstaticvoidmain(Stringargs[]){
MemoControllermmc=newMemoController();
mmc.append("Iamxubin");
}
}
五、详述出以下程序的功能:
importjava.sql.*;
importjavax.swing.*;
classjdbcExample1{
publicstaticvoidmain(Stringargs[]){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Stringurl="jdbc:
odbc:
studyDSN";
Stringlogin="sa";
Stringpassword="";
Connectionconn=
DriverManager.getConnection(url,login,password);
Statementstatement=conn.createStatement();
StringsqlQuery="select*fromcourse";
ResultSetrs=statement.executeQuery(sqlQuery);
while(rs.next()){
System.out.print(rs.getString
(1)+",");
System.out.print(rs.getString
(2)+",");
System.out.println(rs.getInt(3));
}
statement.close();
conn.close();
}
catch(SQLExceptionsqlException){
JOptionPane.showMessageDialog(null,sqlException.getMessage(),
"DatabaseError",JOptionPane.ERROR_MESSAGE);
System.exit
(1);
}
catch(ClassNotFoundExceptionclassNotFound){
JOptionPane.showMessageDialog(null,classNotFound.getMessage(),
"DriverNotFound",JOptionPane.ERROR_MESSAGE);
System.exit
(1);
}
}
}
五、classjdbcExample1
通过JDBC存取studyDSN数据库中的表course,输出所以字段的值。
同时说明java应用程序通过jdbc存取数据库时应遵循的五个步骤:
(注意其在程序中的相应位置)
1.加载JDBC驱动程序
2.建立数据库连接
3.建立SQL语句对象,执行查询
4.处理结果集
5.关闭数据库连接
六、试说出以下程序的功能:
shuben289
//WageCalculatorapplication
//byYongjieWang
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.text.*;
publicclassWageCalculatorextendsJFrame
{
//JLabelandJTextFieldforhours
privateJLabelhoursJLabel;
privateJTextFieldhoursJTextField;
//JLabelandJTextFieldforovertimeworkedinaweek
privateJLabelovertimeJLabel;
privateJTextFieldovertimeJTextField;
//JLabelandJTextFieldforgrosswages
privateJLabelgrossWagesJLabel;
privateJTextFieldgrossWagesJTextField;
//ButtonGrouptocontrol