java 2017.10

Submitted by test on Fri, 02/26/2021 - 17:30

一、单项选择题

 

1. 编译Java应用程序源程序会产生字节码文件,字节码文件的扩展名为: class

2. 表达式-1>>1的值是: -1

3. 为类C定义一个int类型的变量x,使用只有同类和同包的其它类能使用代码Cx就可引用它,则定义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=2y=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

              }

       }

错误代码行为:236

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. 阅读下列程序,请回答以下问题:

       1MyPanel用什么方法实现多线程?

       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);

       }

}

Article type