浙江工业大学2012-Java程序设计期终考卷(2010级计算机)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浙江工业大学期终考试命题稿
2011 /2012 学年第一学期
命题注意事项:
一、命题稿请用A4纸电脑打印,或用教务处印刷的命题纸,并用黑墨水书写,保持字迹
清晰,页码完整。
二、两份试题必须同等要求,卷面上不要注明A、B字样,由教务处抽定A、B卷。
三、命题稿必须经学院审核,并在考试前两周交教务处。
浙江工业大学2011/2012学年
第一学期试卷
课程JAVA程序设计姓名______________________ 班级______________________ 学号______________________ 授课教师___________________
注:答案请写在答题纸上,否则一律不给分。
一、选择题(共15小题,每题2分,共30分)
1、以下的变量定义语句中,合法的是( )
A)double a= 1.0;
B)char c= a+'1';
C)double $a*5 =2.0D;
D)String name#2 = "jack";
2、以下程序片段,下列哪个选项插入到第1行引起编译错误的是()1) package mypackage;
2)
3) class MyClass
4) {
5) //do sth
6) }
A)public class MainClass{ }
B)package mypackage1;
C)class B{ }
D)import java.util.*;
3、以下程序代码,无法通过编译的是()
A)
class A{
int i=0;
public void method() { System.out.println (i); }
}
B)
class A { int i=0; }
class B
{
public void method() { System.out.println (new A().i); } }
C)
class A
{
public int i=0;
public static void method() { System.out.println (new A().i); } }
D)
class A
{
public int i=0;
public static void method() { System.out.println (i); } }
4、以下代码段执行后的输出结果为()
int x=2,y=3;
System.out.println ((x>y)?x--:++y);
A)1 B) 2 C) 3 D) 4
5、给定如下Java程序片断:
class A{
public A (){
System.out.print("O");
}
}
class B extends A{
public B(){
System.out.print("K");
}
public static void main(String[] args){
B b=new B();
}
}
上述程序将( )
A) 不能通过编译
B) 通过编译,执行后输出为:O
C) 通过编译,执行后输出为:K
D) 通过编译,执行后输出为:OK
6、已知MyInterface是一个接口,ClassA是实现了MyInterface的一个类,ClassB是ClassA的子类,则下列哪个语句是正确的? ( )
A) ClassB obj=new ClassA();
B) MyInterface obj = new ClassB();
C) ClassA obj=new MyInterface();
D) MyInterface obj=new MyInterface();
7、下列变量哪个是引用类型的( )。
A) boolean s=false; B) String s=null;
C) int s = 513; D) float s = 3.14f;
8、为了使用JDK的javac.exe编译Java应用程序,应该设置以下哪个环境变量?( )
A) java_home B) classpath C) path D) runtime
9、下面的程序编译后用以下命令运行:java ExceptionDemo hello,运行的情况是( )
1)public class ExceptionDemo{
2) public static void main(String args[ ]){
3)for(int i=0;i<2;i++){
4)System.out.println(args[i]);
5)}
6) }
7)}
A) 发生异常,异常类型是ArithmeticException
B) 发生异常,异常类型是IOException
C) 发生异常,异常类型是ArrayIndexOutOfBoundsException
D) 程序正常输出信息hello
10、下列说法中,正确的是( )
A) 一个Java源程序中的每个类都可以包含一个main方法。
B) 一个Java源程序中,不能既定义接口,又定义类。
C) 一个Java源程序中必须有一个类定义了main方法。
D) 一个Java源程序中必须定义接口。
11、关于Java输入输出流,下列说法正确的是()
A)类和类都是按照字节读取的
B)类和类都是按照字符读取的
C)类是按字节读取的,类是按字符读取的
D)类是按字符读取的,类是按字节读取的
12、有一个类A,以下为其构造方法的声明,其中错误的是( )。
A)public void A(int x){...}
B)public A(int x){...}
C)protected A(float x){...}
D)private A( ){...}
13、对于异常处理语句try…catch…finally,下面哪个说法是正确的?( )
A) 如果有多个catch语句,对所有的catch都会执行一次
B) 如果有多个catch语句,对每个符合条件的catch都会执行一次
C) 多个catch的情况下,异常类的排列顺序应该是父类在前,子类在后
D) 任何情况下,finally部分都会被执行一次
14、下面说法错误的是( ) 。
A)单击CheckBox (复选框)产生ItemEvent事件,并由ItemListener处理。
B)处理Button和TextField事件监听器接口都是ActionListener。
C)一个面板(Panel) 可以加入到另一个面板(Panel)中。
D)采用BorderLayout布局时,添加到NORTH区的两个按钮将并排显示。
15、关于线程,以下说法正确的是( )
A) 线程可以使用wait()方法,让其他线程等待,以便自己执行。
B) 不管有无活动的用户线程,后台线程都会一直执行。
C) 如果一个应用程序的用户线程都结束了,则后台线程自动结束。
D) 线程可以使用notify()方法,让其他线程等待,以便自己执行。
二、判断题(共10小题,每题1分,共10分)
1、abstract是抽象修饰符,可以用来修饰类、属性和方法。
(对)
2、用“+”可以实现字符串的拼接,用“-”可以从一个字符串中去除一个字符子串。
(错)
3、父类的静态方法不能被子类覆盖为非静态的方法,反之亦然。
(对)
4.子类的构造方法一定会调用父类的构造方法。
(对)
5、接口和抽象类一样,虽然有构造方法,但却不能实例化对象。
(错)
6、线程t运行就是运行其run()方法,所以t.start()等价于t.run()。
(错)
7、Object类型的引用变量可以引用任何对象。
(对)
8、数据流就是从源到目的的字节的有序序列包括输入流和输出流。
(对)
9、java为每一个监听器接口都定义了对应的适配器类。
(错)
10、如果有高优先级的线程就绪,则正在执行的低优先级线程将暂停执行。
(对)
三、程序阅读题。
(共5小题,每题6分,共30分)
1、写出下列程序代码的运行结果。
class A
{
int m=0,n=0;
long f ()
{
return m+n;
}
}
class B extends A
{
int m=1,n=1;
long f()
{
long result=0;
super.m=10;
super.n=30;
result=super.f()+(m+n);
return result;
}
long g()
{
long result=0;
result=super.f();
return result/2;
}
}
class Example
{
public static void main(String args[ ])
{
B b=new B();
b.m=6;
b.n=2;
long resultOne=b.g();
long resultTwo=b.f();
long resultThree=b.g();
System.out.println("resultOne="+resultOne);
System.out.println("resultTwo="+resultTwo);
System.out.println("resultThree="+resultThree);
}
}
标准答案:
resultOne=0
resultTwo=48
resultThree=20
2、写出下列程序代码的运行结果:
class Test {
public static String ss="杭州电子科技大学";
public String ms="计算机学院";
public void printInfo()
{
System.out.println("ss="+ss+" ms="+ms);
}
public static void main(String [] args)
{
Test obj1,obj2;
obj1=new Test();
obj2=new Test();
obj1.ss="浙江工业大学";
obj1.ms="软件学院";
obj1.printInfo();
obj2.printInfo();
}
}
输出结果:
ss=浙江工业大学 ms=软件学院
ss=浙江工业大学 ms=计算机学院
3、仔细阅读下面的程序代码,写出运行后的输出结果。
import java.util.Vector;
class TestVector
{
public static void main(String [] args)
{
Vector<String> vs=new Vector<String>(16,8);
vs.add("1");
vs.add("2");
vs.add(1,"3");
System.out.println (vs.get(1));
if (vs.contains("3"))
System.out.println ("\"3\"is an element of vs");
vs.remove("3");
System.out.println (vs.get(1));
}
}
输出结果:
3
"3"is an element of vs
2
4、仔细阅读下面的程序代码,若经编译和运行后,请写出打印结果。
public class Test
{
private int i;
public class Inner
{
public void increaseSize(){ i++; }
}
Inner inner=new Inner();
public void increaseSize()
{
inner.increaseSize();
}
public static void main(String[] a)
{
Test test=new Test();
for (int j = 0; j<3; j++)
{
test.increaseSize();
System.out.println("i="+test.i);
}
}
}
输出结果:
i=1
i=2
i=3
5、阅读以下程序,回答问题。
package package1;
class ClassA
{
public void printInfo()
{
System.out.println("I am ClassA.");
}
}
package package2;
import package1.ClassA;
public class ClassB
{
public static void main(String [] args) {
new ClassA().printInfo();
}
}
问题1:上面两个类是在同一个源程序文件中吗?问题2:第一个类的定义有一个错误。
请改正。
参考答案:
1、不是
2、将class ClassA改成 public class ClassA
四、程序填空题(共2小题,每小题5分,共10分)
1、下面是一个多线程程序。
请根据提示,将划线上(1)~(5)的语句补充完整。
class TestMultiThreads
{
public static void main(String [] args)
{
Thread t1=new Thread(new T1( ) ); //实例化线程,
t1.setName("线程1"); //将线程t1改名为“线程1”
t1.start(); //启动线程t1
System.out.println ("main方法结束。
");
}
}
class T1 implements Runnable //定义T1为线程体(包含线程的数据和代码){
private int i;
public void run()
{
while(true)
{
System.out.println(i++);
try
{
Thread.sleep((int)(Math.random()*5000)); //随机休眠0-5秒} catch(InterruptedException e) {}
}
}
}
2、下面的程序可以编辑文本文件,单击保存按钮可以保存文件。
如果是新的没有保存过的文件,单击保存按钮时会弹出一个保存文件对话框。
程序运行时界面如下图,请将划线的(6)~(10)的语句补充完整。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
public class MyEditor extends JFrame implements ActionListener
{
JButton jbSave;
JTextArea jtaText;
JScrollPane jsp;
boolean isNewFile;
;
public MyEditor()
{
super("MyEditor");
isNew;
jbSave=new JButton("保存");
jbSave.addActionListener(this);
add(jbSave,BorderLayout.NORTH);
jtaText=new JTextArea(10,80);
jtaText.setLineWrap(true);
jsp=new JScrollPane(jtaText);
add(jsp);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jbSave)
{
if(isNewFile)
{
J chooser = new J();
int returnVal = chooser.showSaveDialog(this);
if(returnVal == J)
{
edit();
String ();
}
}
try
{
BufferedWriter bfw = new BufferedWriter(new (editFile));
bfw.write(jtaText.getText(),0,jtaText.getText().length());
bfw.flush();
bfw.close();
setTitle("MyEditor---"+edit());
isNew;
}
catch(Exception e1)
{
System.out.println (e1.getMessage());
}
}
}
public static void main (String[] args)
{
new MyEditor();
}
}
五、编程题(共2小题,每小题10分,共20分)
1、请编程实现以下要求:
(1)定义一个接口DataStructure,包括以下方法:
Boolean isFull()
Boolean isEmpty()
Void addElement(Object obj),
Object removeElement()
(2)设计一个堆栈类(MyStack)实现DataStructure接口。
堆栈的大小由其构造方法指定。
要求实现的方法体现出堆栈的先进后出特性。
(3)设计一个队列类(MyQueue)实现DataStructure接口。
队列的大小由其构造方法指定。
要求实现的方法体现出队列的先进先出特性。
(4)设计一个测试类,在其主方法中用DataStructure类型的引用变量分别引用两个大小为10的MyStack对象和MyQueue对象,使用addElement()方法增加“0”,“1”, “9”共10个字符串对象,再用removeElement()方法取出这些元素并打印出来。
参考答案:
interface DataStructure
{
boolean isEmpty();
boolean isFull();
void addElement(Object obj);
Object removeElement();
}
class MyStack implements DataStructure
{
private int idx=0,size;
private Object[] data;
public MyStack(int size)
{
data=new Object[size];
this.size=size;
}
public boolean isEmpty()
{
if (idx==0)
return true;
else
return false;
}
public boolean isFull()
{
if (idx==size)
return true;
else
return false;
}
public void addElement(Object obj)
{
data[idx++]=obj;
}
public Object removeElement()
{
return data[--idx];
}
}
class MyQueue implements DataStructure {
private int idx=0,size;
private Object[] data;
public MyQueue(int size)
{
data=new Object[size];
this.size=size;
}
public boolean isEmpty()
{
if(idx==0)
return true;
else
return false;
}
public boolean isFull()
{
if(idx==size)
return true;
else
return false;
}
public void addElement(Object obj)
{
data[idx++]=obj;
}
public Object removeElement()
{
Object obj=data[0];
for(int i=0;i<idx-1;i++)
{
data[i]=data[i+1];
}
idx--;
return obj;
}
}
public class TestDataStructure
{
public static void main (String[] args)
{
DataStructure ds=new MyStack(10);
for(int i=0;i<10;i++)
ds.addElement(""+i);
while(!ds.isEmpty())
System.out.println ((String)ds.removeElement());
ds=new MyQueue(10);
for(int i=0;i<10;i++)
ds.addElement(""+i);
while(!ds.isEmpty())
System.out.println ((String)ds.removeElement());
}
}
2、编写一个程序,将指定的多个文本文件合并到一个文件。
要求类的名称为MergeTxt。
在命令行状态下,该程序的运行形式是:
java MergeTxt 目标文件名合并文件1 合并文件2 ...合并文件n
如:java MergeTxt merge 将、、三个文件的内容合并后放入merge中。
要求程序能够判断文件的类型是否正确,如果类型不正确或者给定的文件不存在时要给出错误信息。
参考答案:
import java.io.*;
public class MergeTxt
{
public static void main (String[] args)
{
if(args.length<3)
{
System.out.println ("无需合并。
");
return;
}
for(String s:args)
{
if(!s.endsWith(".txt"))
{
System.out.println ("文件类型不是txt文件,不能合并。
");
return;
}
}
try
{
[0]);
if (df.exists())
{
System.out.println (args[0]+"文件已存在!请更改目标文件名。
");
return;
}
for(int i=1;i<args.length;i++)
{
if(!(new [i]).exists()))
{
System.out.println ("要合并的文件"+args[i]+"不存在!");
}
}
BufferedWriter bw=new BufferedWriter(new (df,true));
for(int i=1;i<args.length;i++)
{
BufferedReader br=new BufferedReader(new (args[i]));
String s;
while((s=br.readLine())!=null)
{
bw.write(s+"\n");
}
bw.flush();
br.close();
}
bw.close();
System.out.println ("文件合并完毕。
");
}
catch (Exception ex)
{
System.out.println ("合并不成功!");
}
}
}
答题纸(1)
课程JAVA程序设计姓名______________________ 班级______________________ 学号______________________ 授课教师___________________
一、选择题(共15小题,每题2分,共30分)
1、2、3、4、5、6、7、8、9、10、
11、12、13、14、15、
二、判断题(共10小题,每题1分,共10分)
1、2、3、4、5、
6、7、8、9、10、
三、程序阅读题。
(共5小题,每题6分,共30分)
1、
2、
3、
4、
5、
四、程序填空题(每空1分,共10分)
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
五、编程题(共2小题,每小题10分,共20分)。