【真题+答案】2024年10月自考04747JAVA语言程序设计(一)试题

绝密★启用前

2024 年 10 月高等教育自学考试全国统一考试

Java 语言程序设计 (一)

(课程代码 04747)

注意事项
1.本试卷分为两部分,第一部分为选择题,第二部分为非选择题。
2.应考者必须按试题顺序在答题卡(纸)指定位置上作答,答在试卷上无效。
3.涂写部分、画图部分必须使用 2B 铅笔,书写部分必须使用黑色字迹签字笔。

第一部分 选择题

一、单项选择题:本大题共 10 小题,每小题 1 分,共 10 分。在每小题列出的备选项中只有一项是最符合题目要求的,请将其选出。
1.Java 程序 HelloWorld.java 编译后的类文件名是( )
A. HelloWorld.java B. HelloWorld.class
C. Helloworld.java D. Helloworid.class

2.下列属于 Java 语言的关键字是( )
A. name B. long
C. age D. school

3.设 i 的初值为 10,则执行完 j = ++i; 后,i 和 j 的值分别为( )
A. 10,10 B. 10,11
C. 11,10 D. 11,11

4.下列关于实例方法和静态方法的叙述中,正确的是( )
A. 类中的静态方法可以直接调用实例方法
B. 类中的静态方法不可以互相调用
C. 类中的实例方法不可以互相调用
D. 类中的实例方法可以调用静态方法

5.下列 Java 程序代码中,能正确创建数组的是( )
A. int [] array = {1,2,3,4,5,6}; B. int array [] = new array (6);
C. int array []; array [] = new int [6]; D. int [6] = array {1,2,3,4,5,6};

6.有如下类和对象的定义:
class Parent{}
class Child1 extends Parent{}
class Child2 extends Parent{}
Parent p = new Parent();
Child1 s = new Child1();
Child2 d = new Child2();
当执行语句 s = (Child1) d; 时,结果是( )
A. 执行时完全正确 B. 编译时正确,但执行时出错
C. 执行时不确定 D. 编译时出错

7. 下列 Java 程序代码中,不能创建 File 对象的是( )
A. File myFile; myFile = new File (“hello,world!”)
B. File myFile = new File (“”,”hello,world!”)
C. File myDir = new File (myDir, “hello,world!”)
D. File myDir = new File (“”); File myFile = new File (myDir,”bello,world!”)

8. 在顶层容器中,带有标题行和控制按钮的独立窗口,创建应用程序时需要使用的是( )
A. JFrame B. JApplet
C. JDialog D. JWindow

9. 能够实现单行文本输入的文本组件是( )
A. 文本域 B. 文本区
C. 对话框 D. 菜单栏

10. 下列方法中,强制终止线程执行的方法是( )
A. start () B. run ()
C. yield () D. isAlive ()

第二部分 非选择题

二、填空题:本大题共 10 小题,每小题 2 分,共 20 分。
11.Java 语言的解释器是______。
12.一个 float 类型的运算数和一个 double 类型的运算数进行运算,结果的类型是______。
13.与 try 语句配套使用的语句是______。
14.Java 程序中,调用方法时,参数传送采用的机制是______。
15.执行 String str = “123421”; String result = str.replace (“2”, “6”); 后,result 的值是______。
16.接口上的所有变量都默认为是______属性。
17.用于读取字节流的抽象类是______。
18.为 JButton 组件注册事件侦听程序,需要使用的方法是______。
19.绘制一条从 (a,b) 到 (c,d) 的直线,需要使用的方法是______。
20.线程的创建除了继承 Thread 类以外,还能通过实现接口完成线程的创建,需要实现的接口为______。

三、简答题:本大题共 5 小题,每小题 4 分,共 20 分。
21.什么是构造方法?什么是构造方法的重载?
22.在输入输出处理时,什么是对象的序列化?对象序列化的主要任务是什么?
23.请写出 if – else 语句的语法格式,并且解释其语义。
24.Java 标准包 java.lang 封装了 String 类和 StringBuffer 类,简述他们的含义及区别。
25.线程一共有哪几种状态?

四、程序填空题:本大题共 3 小题,每小题 6 分,共 18 分。
26.以下程序定义了一个线程类,线程类每休眠一个 0 – 1 秒的随机时间后,运行输出代码。

class MyThread implements ① {
       private String who;
       public MyThread(String str) {
       who = str;
       }
       public void run() {
       for(int i = 0; i < 3; i++) {
       try {
       Thread.sleep((int)(②));
       } catch(InterruptedException e) {
       System.out.println(e.toString());
       }
       System.out.println(who + "正在运行!!");
   }
  }
}
public class Test26 {
       public static void main(String[] args) {
          MyThread you = new MyThread("你");
          Thread t1 = new Thread(you);
          t1③;
    }
}

 

27.以下程序实现存款收益的计算。假设银行中存款 m 元,一年后的存款为 n。你若将此款继续存入银行,试问多长时间就会达到原来的 k 倍。

public static void calYear(double m, double n, double k) {
       double original,money,interest;
       int years = 0;
       original = money = m;
       interest = ①;
       System.out.println("year money");
       while (②) {
           years = years + 1;
           money = ③;
           System.out.println(" " + years + " " + money);
           }
      System.out.println();
      System.out.println("第" + years + "年存款额达到" + money + "元。");
}

 

28.以下程序实现了从标准输入通道读取字符串信息,然后进行输出。

public class Test28 {
import java.io.*;
           public static void main(String args[]) throws ① {
               String s;
               InputStreamReader isr;
               BufferedReader in;
               isr = new InputStreamReader(System.in);
               in = new ②;
               while (③)!= null) {
                    System.out.println("Read:" + s);
         }
}

 

五、程序分析题:本大题共 3 小题,每小题 6 分,共 18 分。
29. 阅读程序,请写出该程序的输出结果。

class Wheel {
        Wheel(String str) {
              System.out.println(str);
        }
}
class Car {
        Wheel w2 = new Wheel("车轮2");
        Wheel w1 = new Wheel("车轮1");
        Car(String str) {
              System.out.println(str);
        }
}
public class Test29 {
        public static void main(String arg[]) {
              Car c = new car("我的车");
        }
}

 

30.阅读程序,请写出该程序的输出结果。

class EqualsOrNot {
        private int a, b;
        A (int n, int m) {a=n; b=m;}
        public String toString( {return a+" " +b;}
        }
public class Test30 {
        public static void main(String [] args){
              A a1 =new A(10, 20);
        Aa2-a1;
        boolean flag;
        if(al.equals(a2))fag = true ;
        else flag= false;
        System.out.println(flag);
        System.out.println(a1);
        System.out.println(a2);
    }
}

 

31. 阅读程序,请写出该程序的输出结果。

public class Test31 {
        public static String output = "";
        public static void foo(int i) {
              try {
                    if(i == 0) {
                          throw new Exception();
                    }
                    output += '1';
              } catch (Exception e) {
              output += '2';
        } finally {
        output += '3';
        }
        output += '4';
}
public static void main(String args[]) {
        foo(0);
        foo(1);
        System.out.println(output);
    }
}

 

六、程序设计题:本大题共 2 小题,每小题 7 分,共 14 分。
32. 请使用 for 循环语句,计算九九乘法表。请编写 main 函数,在 main 函数中,实现乘法计算及其结果的输出。运行结果如题 32 图。

9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
4*1=4 4*2=8 4*3=12 4*4=16
3*1=3 3*2=6 3*3=9
2*1=2 2*2=4
1*1=1

题 32 图

public class Test32 {
        public static void main(String args[]){
              //请在答题卡(纸)上填写此处应编写的代码
        }
}

33. 类 Test33 显示一个窗口,窗口包含了一个按钮和一个文本域。初始时文本域无显示,第一次点击按钮时,显示 “你已经按了按钮。”;第二次点击按钮时,显示 “你已经按了第二次按钮。”,如题 33 图所示。注:要求将 go () 中的代码补充完整,不需要实现事件处理。

2024年10月自考04747JAVA语言程序设计(一)试题第33题图

import java,awt,*;
import java.awt.event.*;
import javax.swing.*;
public class Test33 extends WindowAdapter implements ActionListener {
        JFrame f;
        JButton b;
        JTextField tf;
        int tag = 0;
        public static void main(String args[]) {
              Test33 be = new Test33();
              be.go();
        }
        public void go() {
              //请在答题卡(纸)上填写此处应编写的代码
              f.setSize(300, 150);
              f.setVisible(true);
        }
        public void actionPerformed(ActionEvent e) {
              String s1 = "你已经按了按钮。";
              String s2 = "你已经按了第二次按钮。";
              if (tag == 0) {
              tf.setText(s1);tag = 1;
              } else {
              tf.setText(s2);tag = 0;
        }
}
public void windowClosing(WindowEvent e) {
              System.exit(0);
        }
}

2024 年 10 月高等教育自学考试全国统一命题考试

04747 Java 语言程序设计(一) 参考答案

一、单项选择题:本大题共 10 小题,每小题 1 分,共 10 分。
1.B 2.B 3.D 4.D 5.A
6.D(注:Child1 和 Child2 无继承关系,无法强制转换,直接编译报错)

20.Runnable

三、简答题:本大题共 5 小题,每小题 4 分,共 20 分。
21.构造方法是类中用于初始化对象的特殊方法,其名称与类名相同,无返回类型。当通过 new 创建对象时自动调用。构造方法的重载指在同一个类中定义多个参数列表不同的构造方法,提供多种初始化方式。例如,无参构造初始化默认值,带参构造根据传入参数初始化。
22.对象序列化是将对象转换为字节流以便存储或网络传输的过程。主要任务包括:将对象状态转换为字节流;处理对象间的引用关系;支持持久化存储及跨平台传输。需实现 Serializable 接口,通过 ObjectOutputStream 实现序列化。

23.语法格式:

if(条件表达式) {
      //条件为真时执行
} else {
      //条件为假时执行
}

 

语义:若条件表达式为 true,执行 if 代码块;否则执行 else 代码块。若无 else,则条件不满足时跳过。

24. String:不可变字符序列,修改会生成新对象,适用于字符串不频繁修改的场景。StringBuffer:可变字符序列,线程安全(方法用 synchronized 修饰),适合多线程下频繁修改字符串。核心区别:可变性(String 不可变)与线程安全性(StringBuffer 安全)。

25.
1. 新建 (New):未启动的线程。
2. 可运行 (Runnable):包括就绪和运行中,等待或占用 CPU。
3. 阻塞 (Blocked):等待获取同步锁。
4. 等待 (Waiting):无限期等待其他线程唤醒。
5. 定时等待 (Timed Waiting):带超时的等待(如 sleep ())。
6. 终止 (Terminated):执行完毕或异常结束。

四、程序填空题:本大题共 3 小题,每小题 6 分,共 18 分。
① Runnable
② Math.random ()*1000
③ start ()
解析:MyThread 类实现了 Runnable 接口,因此①填 Runnable。要生成 0 – 1 秒的随机时间,需将 Math.random () 的结果乘以 1000,然后转换为整数,因此②填 Math.random ()*1000。启动线程需要调用 start () 方法,因此③填 start ()。

27.① n/m – 1
② money < original * k
③ money * (n/m)
解析:假设年利率为 r,则 n = m*(1 + r),解得 r = n/m – 1,因此①填 n/m – 1。循环继续的条件是存款未达到原来的 k 倍,因此②填 money < original * k。计算下一年的存款额,因此③填 money * (1 + interest)。

28.① IOException
② BufferedReader (isr)
③ s = in.readLine ()
解析:读取输入时可能抛出 IOException,需要捕获,因此①填 IOException。创建 BufferedReader 对象需要传入 InputStreamReader 对象,因此②填 BufferedReader (isr)。读取一行输入并赋值给变量 s,因此③填 s = in.readLine ()。

五、程序分析题:本大题共 3 小题,每小题 6 分,共 18 分。
29.输出结果:
车轮 1
车轮 2
我的车
注:实际代码中 new car (“我的车”) 应改为 “new Car (” 我的车 “)”,否则编译错,但假设题目忽略此错误)

30.输出结果:
true
10,20
10,20
(假设类名 A 存在且构造方法正确)

31.输出结果:
234134
分析:foo (0):出异常→catch 块执行 (output += “2”) → finally 块 (output += ‘3’) →继续执行 output += ‘4’,结果为 “234”。
foo (1):无异常→try 块执行 (output += ‘1’) →finally 块 (output += ‘3’) →继续执行 output += ‘4’,结果为 “234134”。

六、程序设计题:本大题共 2 小题,每小题 7 分,共 14 分。
32.

public class Test32 {
      public static void main(String args[]) {
      // 外层循环控制行数(从9到1递减)
      for (inti=9;i>= 1;i--){
            // 内层循环控制列数(从 1到当前行数递增)
            for (int j = 1;j<= i; j+ +){
                  // 输出乘法表达式及结果,使用制表符分隔
                  System.out.print(i + "*" +j+ "="+ (¡* j)+ "\t");
            }
            // 换行,准备输出下一行
            System.out.printIn()
      }
   }
}

代码解释:
使用双重 for 循环,外层循环变量i从9递减到 1,代表乘法表的行.。
内层循环变量i从1递增到当前行号i,代表每行的列。
通过 System.out.print 输出乘法表达式 i*j=结果,并使用制表符 \t 对齐。
每完成一行输出后,使用 System.out.printn()换行。

32.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test33 extends WindowAdapter implements ActionListener {
      JFrame f;
      JButton b;
      JTextField tf;
      int tag=0;// 用于记录按钮点击次数

public static void main(String args[]){
      Test33 be = new Test33();
      be.go();
}
public void go() {
      // 创建窗口组件
f= new JFrame("My JFrame");
b = new JButton("点击按钮”);
tf= new JTextField(20);

// 设置窗口布局为流式布局
f.setLayout(new FlowLayout();
// 将按钮和文本域添加到窗口
f.add(tf);
f.add(b);
// 为按钮添加事件监听器
b.addActionListener(this);
// 为窗口添加关闭监听器
faddWindowListener(this);

// 设置窗口大小并显示
f.setSize(300,150);
f.setVisible(true);
}

public void actionPerformed(ActionEvent e){
      String s1="你已经按了按钮。"
      String s2="你已经按了第二次按钮。"
      if (tag == 0){
            tf.setText(s1);
            tag = 1:
      } else {
            tf.setText(s2);
            tag = 0;
      }
}

public void windowClosing(WindowEvent e){
      System.exit(0); // 关闭窗口时退出程序
}
}

 

代码解释:
初始化组件:在 go()方法中创建 JFrame(窗口)、JButton(按钮)和 JTextField(文本域)。
布局管理:使用 FlowLayout 布局管理器,使组件按添加顺序排列。
事件监听:
按钮焦击事件:通过 b.addActionListener(this)将按钮的点击事件绑定到actionPerformed 方法。
窗口关闭事件:通过 faddWindowListener(this)将窗口的关闭事件绑定到windowClosing 方法。
点击逻辑:使用 tag 变量记录点击次数,第一次点击显示“你已经按了按钮。”,第次点击显示“你已经按了第二次按钮。”,并循环切换。

(答案仅供参考,以官方评分标准为准。)

© 版权声明
THE END
喜欢就支持一下吧
赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容