一、单项选择题
1. 编译Java应用程序源程序会产生字节码文件,字节码文件的扩展名为: class
2. 表达式-1>>1的值是: -1
3. 为类C定义一个int类型的变量x,使用只有同类和同包的其它类能使用代码C,x就可引用它,则定义x的形式为:static int x;
4. 设有字符串变量String s1=”abc”,s2=new String(“abc”),则以下表达式的值为true的是:
s1.equals(s2)
5. 在以下Swing的类中,属于容器的是: JDialog
6. 在以下叙述中,属于CardLayout布局特点之一的是:多个组件拥有同一个显示空间。
7. Java组件可以使用抽象类Toolkit提供的静态方法获得一个缺省的Toolkit对象,这个静态方法是:getDefaultToolkit()
8. 一个线程要从运行状态自动进入就绪状态,需要使用的方法是:yield()
9. 程序将创建输入流的代码写在try-catch语句结构中,其目的是捕获并处理:文件找不到异常。
10. 在Java语言中,用来处理驱动程序的加载和建立新数据库连接的类是:DriverManager
二、填空题
11. Java源文件中最多只能有一个public类,其它类的个数不限。
12. Java语言使用的字符集是 Unicode 。
13. 在Java语言中,package语句必须出现在源程序文件的 起始行 。
14. 以下代码的输出结果是 45 。
Integer x=234567;
System.out.println(x.toString().substring(2,4));
15. 在Java程序中,设置文本区对象myArea能自动换行的语句是 myAreasetLineWrap(true);
16. Java语言为处理鼠标事件提供了多个接口,其中能处理鼠标拖动和鼠标移动两种事件接口是 MouseMotionListener 。
17. Graphics2D类定义了多种图形的状态属性,其中用来控制线条的宽度、笔形样式、线段连接方式或短划线图案的属性是 stroke 。
18. 当线程A使用某个对象,而且对象又需要线程B修改后才能符合A线程继续执行的要求,这时线程A就要等待线程B完成修改工作,这种线程相互等待成为 线程的同步 。
19. 使用RandomAccessFile类的 writeChar() 方法可以向文件写入一个字符。
20. 使用语句对象作数据库查询,能获得带游标的结果集ResultSet对象,此对象中将游标移到最后一行之后的方法是 afterLast() 。
三、简答题
21. 请写出“条件x=2与y=3有且只有一个成立”的表达式。
x==2&&y!=3||x!=2&&y==3 (或x==2!=y==3)
22. 以下代码定义了一个类,请用注释中的编号指出其中有错的代码行。
class Test22{int x;
Test22(int x){this.x=x;} //1
Test22(){Test22(10);} //2
int f(){ //3
int a=1;x=a; //4
}
void g(){int y; //5
y=a+x; //6
}
}
错误代码行为:2、3、6 。
23. 请写出在java.awt.event中,用来检测并对事件做出反应的模型所包括的三种对象。
源对象、监视器对象和事件对象。
24. 请写出在Java语言中,关键字synchronized的作用。
使用关键字synchronized定义临界段,能对共享对象的操作上锁。
25. 请写出采用缓冲输入方式,按行输入文件内容的步骤。
先创建FileReader对象,再利用FileReader对象创建BufferedReader对象,然后对该对象使用readLine()方法。
26. 已知服务器的IP地址为host,端口号为port,请写出为客户端建立到服务器的套接字对象mySocket的代码(可能发生的例外类型为IOException)。
try{
Socket mySocket=new Socket(host,port);
}catch(IOException e){}
四、程序填空题
27. 方法int countDigitNum(int []a,d)的功能是求已知数组a中元素值为d的个数。
static int countDigitNum(int []a,d){
int s=0;
for(int i=0;i<a.length;i++){
if(a[i]==d) s++;
}
return s;
}
28. 面板子类MyPanel实现在面板上放置一个单选列表框,列表框上的选项条目由创建该类对象时的参数提供。当某个选项被单击时,类的监视程序在指定的文本框中输出选中选项条目。程序将单选列表框放置于滚动面板中,并要求滚动面板的垂直滚动条是可见。以下是类MyPanel的定义。
class MyPanel extends JPanel implements ListSelectionListener{
JList list; JTextField tf;
MyPanel(String listItems[],JTextField tf){
this.tf=tf;
list=new JList(listItems); list.setVisibleRowCount(2);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.addListSelectionListener(this);
JScrollPane jsp=new JScrollPane(list);
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
add(jsp);
}
public void valueChanged(ListSelectionEvent e){
if(e.getSource()==list){
tf.setText(list.getSelectedValue() + “:被选中\n”);
}
}
}
29. 面板子类MyPanel实现在面板监视鼠标单击事件,当鼠标在面板上单击时,面板的背景色就会循环改变。以下是类MyPanel的定义。
class MyPanel extends JPanel implements MouseListener {
int index=0;
Color bgColorA[]={Color.red,Color.yellow,Color.blue};
MyPanel(){
addMouseListener(this); index=0;
}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
index=(index+1)%bgColorA.length;
setBackground(bgColorA[index]);
}
}
30. 下面小应用程序启动后自动播放声音文件open.wav。
import java.applet.*;
public class Test30 extends Applet{
public void start(){
AudioClip clip=getAudioClip(getCodeBase(), “open.wav”);
clip.play();
}
}
31. 以下定义的类Godown用于管理多个线程共享产品库存量数据。类定义了让生产者线程和消费者线程共享的两个操作:生产produce(int pnum)和消费consume(int neednum)。限制生产操作和消费操作不能同时进行,也不能因生产(进库)让库存超过最大库存量maxSize,消费(出库)不能大于当前库存量curnum。为了保证生产和消费操作的完整和正确,这两个操作有互斥和同步要求。以下管理产品库存量curnum的类Godown的代码,其中消费方法consumer()没有在以下代码中列出。
class Godown{
private int maxSize=200;
private int curnum;
Godown(int num){curnum=num;}
public synchronized void produce(int pnum){
while(pnum+curnum>maxSize){
System.out.println(“要生产的产品数量”+pnum+”超过剩余库存空余量”+(maxSize-curnum)+”,暂时不能执行生产任务!”);
try{wait();
}catch(InterruptedException e){}
}
curnum+=pnum; //满足生产条件,可进行生产,并产生产品入库
System.out.println(“这次生产了”+pnum+”个产品,新的库存量是”+curnum);
notifyAll();
}
public synchronized void consume(int neednum){
//该方法代码略
}
}
五、程序分析题
32. 阅读下列程序,请写出该程序的输出结果。
class A{
private void m1(String s){
System.out.println(s+”Call A’s m1()”);
}
private void m2(String s){
System.out.println(s+”Call A’s m2()”);
m1(s);
}
}
class B extends A{
public void m1(String s){
System.out.println(s+”Call B’s m1()”);
m2(s);
}
}
public class Test32{
public static void main(String[] args){
B c=new B();
c.m1(“Child”);
}
}
结果:
Child Call B’s m1()
Child Call A’s m2()
Child Call A’s m1()
33. 阅读下列程序,请写出该程序的输出结果。
public class Test33{
static int biSearch(int k[],int key){
int low=0, high=k.length-1, mid;
while(low<=high){
mid=(low+high)/2;
if(key==k[mid]) return mid;
if(key>k[mid]) low=mid+1;
else high=mid-1;
}
return -1;
}
public static void main(String[] args){
int a[]={6,5,7,11,15};
System.out.println(“ “+biSearch(a,5));
}
}
结果:-1
34. 阅读下列程序,请回答以下问题:
(1)当拖动滚动条滑块时,程序界面有什么变化?
标签里的文字的大小随着滑块的移动而变化。
(2)滚动条的最小值是多少?
10
(3)能从滚动条获得的最大值是多少?
90
import java.awt.*; import java.awt.event.*; import javax.swing.*;
class MyScrollBar implements AdjustmentListener{
JScrollBar js; JLabel label; int size=20;
MyScrollBar(){
JFrame myWin=new JFrame(“我的滚动条”);
myWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myWin.setBounds(200,100,800,400);
Container con=myWin.getContentPane();
js=new JScrollBar(JScrollBar.HORIZONTAL,20,10,10,100);
js.setSize(795,30);
js.addAdjustmentListener(this);
con.add(js);
label=new JLabel(“我的标签文字”);
con.add(label);
myWin.setVisible(true);
}
public void adjustmentValueChanged(AdjustmentEvent e){
size=e.getValue();
Font f=new Font(label.getFont().getName(),label.getFont().getStyle(),size);
label.setFont(f);
label.setText(label.getText().substring(0,6)+size);
}
}
public class Test34{
public static void main(String[] args){
new MyScrollBar();
}
}
35. 阅读下列程序,请回答以下问题:
(1)程序运行时,在文本框中输入整数20,画出程序输出的图形。
程序输出一个方框:
(2)该图形的宽是多少像素?
图形的宽是40像素。
import javax.swing.*; import java.awt.*; import java.awt.event.*;
class MyPanel extends JPanel implements ActionListener{
JTextField text; int width, height;
Polygon polygon=new Polygon();
MyPanel(){
setLayout(new BorderLayout()); text=new JTextField(10);
add(text, BorderLayout.NORTH); text.addActionListener(this);
}
public void paintComponent(Graphics g){
g.clearRect(0,0,width,height);
g.setColor(Color.red); g.drawPolygon(polygon);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==text){
int r=Integer.parseInt(text.getText());
width=this.getWidth(); height=this.getHeight();
polygon=new Polygon();
polygon.addPoint(width/2-r, height/2-r);
polygon.addPoint(width/2+r, height/2-r);
polygon.addPoint(width/2+r, height/2+r);
polygon.addPoint(width/2-r, height/2+r);
repaint();
}
}
}
public class Test33{
public static void main(String[] args){
JFrame myFrame=new JFrame();
myFrame.getContentPane().add(new MyPanel());
myFrame.setSize(200,250); myFrame.setLocation(100,100);
myFrame.setVisible(true);
}
}
36. 阅读下列程序,请回答以下问题:
(1)MyPanel用什么方法实现多线程?
用runnable接口实现多线程。
(2)程序如何实现显示的内容不断变化的?
由线程循环更改显示的颜色、位置实现动态效果。
import javax.swing.*; import java.awt.*;
class MyPanel extends JPanel implements Runnable{
Color col[]={Color.yellow,Color.red,Color.blue,Color.green};
int posX[]={20,60,50,80};
int index=0;
MyPanel(){
JFrame myWin=new JFrame(“我的窗口”);
myWin.setBounds(100,100,400,300);
myWin.setContentPane(this); new Thread(this).start();
myWin.setVisible(true); myWin.setSize(300,200);
}
public void run(){
while(true){
try{Thread.sleep(500);
}catch(InterruptedException e){}
index=(index+1)%posX.length;
repaint();
}
}
public void paintComponent(Graphics g){
g.clearRect(0,0,300,200);
g.setColor(col[index]);
g.fillOval(posX[index],100-posX[index]/2.posX[index]);
}
}
public class Test36{
public static void main(String[] args){new MyPanel();}
}
六、 程序设计题
37. 请编写方法 int searchMaxNumIndex(int []a),该方法的功能是返回已知数组中最大数的下标。
int searchMaxNumIndex(int []a){
int maxNum=a[0], maxNumIndex=0;
for(int i=1;i<a.length;i++)
if(a[i]>maxNum){
maxNum=a[i]; maxNumIndex=i;
}
return maxNumIndex;
}
38. 面板子类MyPanel的对象为某应用程序构建如下图所示界面,左边是4个带标签的文本框,用于输入参数;中间是带滚动条的文本区,用于输出解答;下面是一个启动找解的按钮。其中标签及文本框文字需要采用程序中对象fnt所定义的字型。文本框、标签、文本区和按钮都是子类构造方法的参数(参见以下构造方法代码的首行)。
注:这里是给定程序的部分代码,你要编写的代码是完成按图所示的布局放置。
class MyPanel extends JPanel{
Font fnt=new Font(“楷体”, Font.BOLD, 18);
MyPanel(JTextField fAD[], String[] fName, JTextArea anserArea, JButton bt){
setLayout(new BorderLayout());
JPanel p=new JPanel();
p.setLayout(new GridLayout(4, 2));
for(int i=0; i<fAD.length; i++){
//请编写代码
JLabel al=new JLabel(fName[i], JLabel.RIGHT);
al.setFont(fnt);
p.add(al);
fAD[i]=new JTextField(3);
fAD[i].setFont(fnt);
p.add(fAD[i]);
//代码结束
}
add(p, BorderLayout.WEST);
JScrollPane jsp=new JScrollPane(anserArea);
add(jsp, BorderLayout.CENTER);
add(bt, BorderLayout.SOUTH);
}
}