2016年10月高等教育自学考试全国统一命题考试
Java语言程序设计(一) 试卷
(课程代码 04747)
本试卷共9页,满分l00分,考试时间l50分钟。
考生答题注意事项:
1.本卷所有试题必须在答题卡上作答。答在试卷上无效,试卷空白处和背面均可作草稿纸。
2.第一部分为选择题。必须对应试卷上的题号使用2B铅笔将“答题卡”的相应代码涂黑。
3.第二部分为非选择题。必须注明大、小题号,使用0.5毫米黑色字迹签字笔作答。
4.合理安排答题空间,超出答题区域无效。
第一部分 选择题(共l0分)
一、单项选择题(本大题共l0小题,每小题l分,共10分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将其选出并将“答题卡”的相应代码涂黑。错涂、多涂或未涂均无分。淘宝店铺 自考赢家 V信1297755429
1.在下述字符串中,不是Java余言关键字的是 C
A.int B.static C.java D.try
2.要作下列数据类型转换,需进行强制类型转换才能实现的是 A
A.从int到char B.从int到 long
C.从float到 double D.从byte到 int
3.在以下供选择的概念中,属于面向对象语言重要概念或机制的是 D
A.方法 B.模块 C.线程 D.继承
4.在下述Java程序代码中,能正确创建数组的是 D
A.int myA[5]={1,2,3,4,5); B.int myA[]=new int(5);
C.int myA[];myA[]=new int[5]; D.int[]myA={1,2,3,4,5,6};
5.某Java程序的类A需要利用Swing创建无边框窗口,则A需要继承的类是 A
A.JWindow B.JApplet C.JFrame D.JDialog
6.在以下供选的鼠标事件中,MouseMotionListener接口能处理的是 B
A.按下鼠标键 B.拖动鼠标 C.鼠标进入 D.鼠标松开
7.在以下代码中,能正确创建Font对象的是 C
A.new Font(″宋体″,斜体,20); B.new Font(″楷体″,20,正常);
C.new Font(″楷体″,Font.BOLD,l 8); D.new Font(″楷体″,1 8,Font.BOLD);
8.某线程正处于运行状态,则在以下选项中,不可能是它的后继状态的是 B
A.就绪状态 B.新建状态 C.阻塞状态 D.死亡状态
9.某Java程序用类JFileChooser来实现打开和保存文件对话框。当对话框的返回
值是JFileChooser.APPROVE_OPTION时,程序进一步的工作是 D
A.用方法getName()取得文件名称 B.用方法getPathO()取得文件路径
C.用方法getFile()取得文件内容 D.用方法getSelectedFile()取得文件对象
10.Java语言实现C/S模式时,需要使用网络套接字,套接字的内容包括 A
A.IP地址+端口号 B.IP地址+监控线程名
C.监控线程名+端口号 D.IP地址+监控线程名+端口号
第二部分 非选择题(共90分)
二、填空题(本大题共l0小题,每空2分,共20分)
11.一个Java小应用程序必须定义成一个子类,它的超类是__Applet___。
12.在Java语言中,左移运算符是__<<__。
13.类A的成员变量x的类型是类B的,则类A和类B之间的关系是__has-a__。
14.以下代码:
StringTokenizer pas=new StringTokenizer(“ public static void, main”,” ,”);
System.out.println(“有单词”+pas.countTokens()+”个”);
的输出结果是_有单词4个___。
15.在JFrame子类的构造方法中,代码getContentPane0的作用是___获得JFrame子类对象的内容面板____。
16.用JScrollBar创建一个垂直滚动条对象时,需要指定的常量是___JScrollBar.VERTICAL__。
17.在异或模式下绘图时,实际绘制的颜色是由3种颜色作特定的运算确定的:当前正要绘
制的颜色、原先绘制的颜色以及__模式设定的颜色___。
18.处于运行状态的线程执行yield()方法,该线程将进入___就绪___状态。
19.在Java语言中,客户端使用的套接字类是___Socket____。
20.在Java语言中,DriverManager类的作用是加载驱动程序和___建立与新数据库的连接___。
三、简答题(本大题共6小题,每小题3分,共l8分)
21.已知整型变量n,当n的值为0时,输出“正常”,否则输出“异常”。请写出使用switch
语句实现此功能的代码。
switch(n){
case 0: System.out.println(“正常”); break;
default: System.out.println(“异常”);
}
22.请写出在类、方法、变量之前加上修饰字final的作用。
用final修饰类,声明该类是不能被再继承的类。
用final修饰方法,声明该方法不能被子类的方法覆盖。
用final修饰变量,声明该变量的值不能被改变。
23.请列举出能产生ActionEvent事件类型的3种组件。
JButton、JCheckBox、JComboBox、JMenuItem、JRadioButton
24.某程序用以下代码弹出一个对话框:
int answer=JOptionPane.showConfirmDialog(null, “确实要退出吗?”,”退出确认”, OptionPane.YES_NO_CANCEL_OPTION);
如果程序中anwser的值等于CLOSED_OPTION,请写出用户对该对话框的操作内容。
用户直接关闭对话窗口。
25.请写出用矩形类Rectangle2D创建对象r的代码,对象r的左上角坐标是(20,30),宽是50,高是70。
Rectangle2D r=new Rectangle2D.Double(20,30,50,70);
26.URL对象的格式是:<METHOD>://<HOSTNAME:PORT>/<PATH>/<FILE>,请写出其中HOSTNAME的意义。
HOSTNAME是文档和服务器所在的Internet主机名或IP地址。
四、程序填空题(本大题共5小题,每空2分,共20分)
27.方法void moveZeroFront(int a[])的功能是将数组中的所有值为0的元素都移到数组的前端,而把非0元素放于所有0的后面。
提示:顺序考察数组元素,当发现是非0时,就让该数留在原来位置,当发现是0时,
就与前面的第一个非0数交换。变量zero表示移动过程中遇到的0的个数。
void moveZeroFront(int a[]){
for(int i=0,zero=0;i<a.length;i++)
if(a[i]==0){
a[i]=a[zero]; a[zero]=0; zero++;
}
}
28.这里给出的是一个播放幻灯片小应用程序的部分代码。设幻灯片已由小应用程序的init()方法装入内存,并存放于mylmage数组中。currentlmage为要显示的幻灯片序号。
int currentImage; Image[] myImage;
……
public void paint(Graphiics g){
if((myImage[currentImage])!=null)
g.drawImage(myImage[currentImage],10,10,
myImage[currentImage].getWidth(this),
myImage[currentImage].getHeight(this),this);
}
29.类ShareData用于管理多个线程共享数据data。一些线程要减少data,另一些线程要增加data。出于data不可以是负值,修改data的方法对这些线程来说不仅要互斥,还要同步。类提供一个方法modiData0供修改data的线程调用,该方法在data修改结束后,还应通知其它等待进入这个方法的线程。
class ShareData{
int data=0;
synchronized void modiData(int delta){
if(delta+delta>=0) {data+=delta;
}else {
while(data+delta<0){
try{wait();
}catch(InterruptedException e){}
}
data+=delta;
}
notify();
}
ShareData(int initData){data=initData;}
}
30.方法void sumByLine(String f)的功能是为已知文件f创建缓冲式输入流,然后从文件逐行输入整数,求各行整数的和,并输出。
public void sumByLine(String f){
FileReader file=new FileReader(f);
BufferedReader in=new BufferedReader(file);
int n, sum, I; String s;
try{
while((s=in.readLine())!=null){
StringTokenizer tokens=new StringTokenizer(s);
n=tokens.countTokens(); sum=0;
for(i=0;i<n;i++){
sum+=Integer.parseInt(tokens.nextToken());
}
System.out.println(“\t”+String.valueOf(sum)+”\n”);
}
in.close();
}catch(IOException ie){System.out.println(“\tI/O出错!”);}
}
31. 方法readByURL(String urlName, JTextArea showArea)的功能是通过已知网址创建URL对象,获得URLConnection对象,设置网络连接,然后以数据流方式读取网页内容,并在文本区showArea中显示。
public String readByURL(String urlName, JTextArea showArea){
try{
URL url=new URL(urlName);
URLConnection tc=url.openConnection();
tc.conncet();
/*以下省略的代码完成的工作是:用tc获得网络连接的InputStreamReader类对象,并将该对象转化成为缓冲式输入对象。以后,就能按行读取网络文本数据。*/
……
}catch(MalformedURLException e){e.printStackTrace();}
catch(IOException e){e.printStackTrace();}
}
五、程序分析题(本大题共5小题,每小题4分,共20分)
32.阅读下列程序,请写出该程序的运行结果。
class SuperClass{
public int getData() {return 4;}
}
class SubClass extends SuperClass{
public int getData() {return 5;}
}
public class Test32{
public static int fac(SuperClass s){
int d=s.getData(); return d*(d+1)/2;
}
public static void main(String[] args){
System.out.println(“超类对象调用方法fac():”+fac(new SuperClass()));
System.out.println(“子类对象调用方法fac():”+fac(new SubClass()));
}
}
超类对象调用方法fac():10
子类对象调用方法fac():15
33.阅读下列程序,请写出该程序的运行结果。
public class Test33{
public static void main(String args[]){
System.out.println(makeNewString(“bjZ;”));
}
public static String makeNewString(String oldStr){
String s=new String(oldStr);
char[] repCh={‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,
‘n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’};
s=s.replace(repCh[repCh.length-1],’%’);
for(int i=repCh.length-2;i>=0;i--){
s=s.replace(repCh[i],repCh[i+1]);
}
s=s.replace(‘%’,repCh[0]);
return s;
}
}
ckZ
34.阅读下列程序,请回答以下问题:
(1)在文本框中输入-18,在文本区中会显示多少行整数,各行有几个数?
在文本区中会显示3行整数,前2行各7个数,第3行4个数。
(2)在文本框中输入0,界面又会发生什么?
文本框和文本区的内容被清除。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class MyFrame extends JFrame implements ActionListener{
JTextField textF; JTextArea textA;
MyFrame(){
Container con=getContentPane();
con.setLayout(new BorderLayout());
textF=new JTextField(10);
textF.addActionListener(this);
textA=new JTextArea(6,10);
setSize(240,200);
con.add(textF,”North”);
con.add(textA,”Center”);
setVisible(true);
}
public void actionPerformed(ActionEvent e){
int n, d;
if(e.getSource()==textF){
n=Integer.parseInt(textF.getText());
if(n!=0){
for(int k=1;k<=Math.abs(n);k++){
d=(int)(Math.random()*1000%1000);
textA.append(“ “+d);
if(k%5==0) textA.append(“\n”);
}
}else{ textF.setText(null); textA.setText(null);
}
}
}
}
public class Test34{
public static void main(String[] args){
new MyFrame();
}
}
35.阅读下列程序,请回答以下问题:
(1)应用程序窗口中,有哪几个组件?
应用程序窗口中产生一个水平滚动条,下面是一个标签。
(2)当拖动滚动条滑块时,界面会有什么变化?
当拖动滚动条滑块时,标签里的文字的大小随着滑块的移动而变化。
import java.awt.*; import java.awt.event.*; import javax.swing.*;
class MyFrame extends JFrame implements AdjustmentListener{
JScrollBar js; JLabel label; int size=20; String msg;
MyFrame(String s, int x, int y, int w, int h){
super(s);
msg=s;
Container con=getContentPane();
con.setLayout(new BorderLayout());
js=new JScrollBar(JScrollBar.HORIZONTAL,20,10,1,210);
js.addAdjustmentListener(this);
con.add(js,BorderLayout.NORTH);
label=new JLabel(msg);
con.add(label,BorderLayout.CENTER);
setBounds(x,y,w,h);
setVisible(true);
}
public void adjustmentValueChanged(AdjustmentEvent e){
size=e.getValue();
Font f=new Font(“Courier”,Font.BOLD,size);
label.setFont(f);
}
}
public class Test35{
public static void main(String[] args){
new MyFrame(“可调组件测试程序”,200,200,500,500);
}
}
36.阅读下列程序,请回答以下问题:
(1)程序是如何实现画面动态显示的?
JPanel子类DrawPanel实现Runnable接口,用线程实现画面动态显示。
(2)创建DrawPane对象时,第3个参数的值增大或减小,对画面的显示有何影响?
第3个参数的值增大,使画面更新变慢;减小,使画面更新变快。
import java.awt.*; import javax.swing.*;
public class Test36 extends JFrame{
public static void main(String args[]){
new GraphicsDemo(320,250);
}
}
class DrawPanel extends JPanel implements Runnable{
int x,y,w,h,d;
DrawPanel(int w, int h, int d){
this.w=w; this.h=h; this.d=d;
new Thread(this).start();
setBackground(Color.white);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.red);
g.fillOval(x+w/2, y+h/2, 10, 10);
}
public void run(){
int seta=0; double r;
int s=w/2;
for(int i=1;i<=500;i++){
r=s*Math.sin(2.0*seta/180.0*3.1415926); //r=sin(2seta)
x=(int)(r*Math.cos(seta/180.0*3.1415926));
y=(int)(r*Math.sin(seta/180.0*3.1415926));
repaint();
seta=(seta+2)%360;
System.out.println(“ “+i+”: “+x+” “+y);
try{Thread.sleep(d);}
catch(InterruptedExcepiton e){}
}
}
}
class GraphicsDemo extends JFrame{
GraphicsDemo(int w, int h){
getContentPane().add(new DrawPanel(w,h,30));
setTitle(“线程演示”);
setSize(w+30,h+50); setVisible(true);
}
}
六、程序设计题(本大题共2小题,每小题6分,共l2分)
37.请编写方法int countOddNum(int[]a),该方法的功能是求已知数组a中奇数的个数。要求根据方法的功能写出方法的代码。
static int countOddNum(int[] a){
int s=0, i;
for(int i=0;i<a.length;i++)
if(a[i]%2==1) s++;
return s;
}
38.类MenuWindow对象构建如下图所示的框架窗口,窗口有一个菜单条,有“学习”和“工作”两个菜单,其中“学习”菜单含“Java程序设计”菜单项;“工作”菜单含“项目设计”菜单项。窗口只有一个文本框,目的是用于显示菜单选择的结果。
注:以下是要求你编写的类MenuWindow的构造方法的部分代码。
class MenuWindow extends JFrame implements ActionListener{
public static JTextField text;
public MenuWindow(){
//请将编写的代码填入答题卡上。
super(“学习和工作之窗”);
JMenuBar menubar=new JMenuBar();
JMenu menu1=new JMenu(“学习”);
JMenuItem java=new JMenuItem(“java程序设计”);
menu1.add(java); java.addActionListener(this);
JMenu menu2=new JMenu(“工作”);
JMenuItem project=new JMenuItem(“项目设计”);
menu2.add(project); project.addActionListener(this);
menubar.add(menu); menubar.add(menu2);
setMenuBar(menubar);
//代码结束
text=new JTextField(25); getContentPane().add(text);
setVisible(true); setSize(200,150); pack();
}
}