贡献者

排错小能手:yjb,gm

《JAVA语言程序设计》练习一

单选择题

  1. 编译Java Application 源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为( B)。
    A. java B. .class
    C. html D. .exe
  2. 设 x = 1 , y = 2 , z = 3,则表达式 y+=z--/++x 的值是( A )。
    A. 3 B. 3. 5
    C. 4 D. 5
  3. 不允许作为类及类成员的访问控制符的是( C )。
    A. public B. private
    C. static D. protected
  4. 为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为( A )。
    A. static void method( ) B. public void method( )
    C. final void method( ) D. abstract void method( )
  5. 给定java 代码如下,编译运行后,输出结果是( C )(选择一项)。
    public class Test {
    static int i;
    public int aMethod() {
    i++;
    return i;
    }
    public static void main(String args[]) {
    Test test = new Test();
    test.aMethod();
    System.out.println(test.aMethod());
    }
    }

    a) 0 b) 1 c) 2 d) 3

二. 填空题
以下是排版后的内容:

  1. 开发与运行 Java 程序需要经过的三个主要步骤为编写代码编译程序运行程序

  2. 在 Java 的基本数据类型中,char 型采用 Unicode 编码方案,每个 Unicode 码占用2字节内存空间,这样,无论是中文字符还是英文字符,都是占用2字节内存空间。

  3. 设 x = 2 ,则表达式 (x++)/3 的值是0

  4. 若 x = 5,y = 10,则 x < y 和 x >= y 的逻辑值分别为TrueFalse

  5. 抽象方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类之中定义。final 方法是不能被当前类的子类重新定义的方法。

  6. 创建一个名为 MyPackage 的包的语句是 package MyPackage;,该语句应该放在程序的位置为:第一行

  7. 设有数组定义:int MyIntArray[] = {10, 20, 30, 40, 50, 60, 70};,则执行以下几个语句后的输出结果是120

    int s = 0;
    for (int i = 0; i < MyIntArray.length; i++)
    if (i % 2 == 1)
    s += MyIntArray[i];
    System.out.println(s);
  8. 在 Java 程序中,通过类的定义只能实现重继承,但通过接口的定义可以实现重继承关系。

写出下面程序的运行结果

1.

import java.io.*;

public class abc {
public static void main(String args[]) {
AB s = new AB("Hello!", "I love JAVA.");
System.out.println(s.toString());
}
}

class AB {
String s1;
String s2;

public AB(String str1, String str2) {
s1 = str1;
s2 = str2;
}

public String toString() {
return s1 + s2;
}
}

结果:Hello! I love JAVA.

2.

import java.io.*;

public class abc {
public static void main(String args[]) {
int i, s = 0;
int a[] = { 10, 20, 30, 40, 50, 60, 70, 80, 90 };
for ( i = 0 ; i < a.length ; i ++ )
if ( a[i] % 3 == 0 )
s += a[i];
System.out.println("s=" + s);
}
}

结果:s=180

3.

class Parent {
String one, two;

public Parent(String a, String b) {
one = a;
two = b;
}

public void print() {
System.out.println(one);
}
}

public class Child extends Parent {
public Child(String a, String b) {
super(a, b);
}

public void print() {
System.out.println(one + " to " + two);
}

public static void main(String args[]) {
Parent p = new Parent("south", "north");
Parent t = new Child("east", "west");
p.print();
t.print();
}
}

结果:

south
east to west

《JAVA语言程序设计》期末考试练习二

判断题

  1. Java的源代码中定义几个类,编译结果就生成几个以.class为后缀的字节码文件。(√)
  2. Java程序里,创建新的类对象用关键字new,回收无用的类对象使用关键字free。 (×)
    回收对象使用JVM的GC自动完成
  3. 构造函数用于创建类的实例对象,构造函数名应与类名相同,返回类型为void。 (×)
    构造函数无返回类型
  4. 在异常处理中,若try中的代码可能产生多种异常则可以对应多个catch语句,若catch中的参数类型有父类子类关系,此时应该将父类放在后面,子类放在前面。(√)
  5. 拥有abstract方法的类是抽象类,但抽象类中可以没有abstract方法。(√)
  6. 静态初始化器是在其所属的类加载内存时由系统自动调用执行。(√)
  7. 在Java中对象可以赋值,只要使用赋值号(等号)即可,相当于生成了一个各属性与赋值对象相同的新对象。(×)
    没有分配内存,没有创建新对象。

单项选择题

  1. Java application中的主类需包含main方法,以下哪项是main方法的正确形参?(B)
    A. String args B. String args[] C. Char arg D. StringBuffer args[]

  2. 以下关于继承的叙述正确的是(A)。
    A. 在Java中类只允许单一继承
    B. 在Java中一个类只能实现一个接口
    C. 在Java中一个类不能同时继承一个类和实现一个接口
    D. 在Java中接口只允许单一继承

  3. paint()方法使用哪种类型的参数? (A)
    A. Graphics B. Graphics2D C. String D. Color

  4. 以下哪个不是Java的原始数据类型(B)
    A. int B. Boolean C. float D. char

  5. 若需要定义一个类域或类方法,应使用哪种修饰符?(A)
    A. static B. package C. private D. public

  6. 在浏览器中执行applet程序,以下选项中的哪个方法将被最先执行(A)。
    A. init() B. start() C. destroy() D. stop()

  7. 有以下程序片段,下列哪个选项不能插入到行1。(D)

    1. public class Interesting{
    2. //do sth
    3. }
      A. import java.awt.* ; B. package mypackage; C. class OtherClass{ } D. public class MyClass{ }
  8. 设有下面两个赋值语句:
    a = Integer.parseInt(“12”);
    b = Integer.valueOf(“12”).intValue();
    下述说法正确的是( D )。
    A. a是整数类型变量,b是整数类对象。
    B. a是整数类对象,b是整数类型变量。
    C. a和b都是整数类对象并且值相等。
    D. a和b都是整数类型变量并且值相等。

  9. FilterOutputStream是BufferedOutputStream、DataOutputStream及PrintStream的父类,以下哪个类可能是FilterOutputStream构造函数的参数类型?(A)
    A. OutputStream B. File C. InputStream D. BufferedOutputStream

  10. 在编写Java Applet程序时,需在程序的开头写上(B)语句。
    A. import java.awt.* ; B. import java.applet.Applet ; C. import java.io.* ; D. import java.awt.Graphics ;

  11. 在使用interface声明一个接口时,只可以使用(D)修饰符修饰该接口。
    A. private B. protected C. private protected D. public

程序阅读题

  1. 以下程序的输出结果为 相等 。

    class StringTest1
    {
    public static void main(String[] args)
    {
    String s1="hello";
    String s2=new String("hello");
    if(s1.equals(s2)){
    System.out.println("相等");
    }else{
    System.out.println("不相等");
    }
    }
    }
  2. 以下程序段的输出结果为 5 6 7 8 9 。

    public class TestArray
    {
    public static void main(String args[ ]){
    int i , j ;
    int a[ ] = { 5,9,6,8,7};
    for ( i = 0 ; i < a.length-1; i ++ ) {
    int k = i;
    for ( j = i ; j < a.length ; j++ )
    if ( a[j]<a[k] ) k = j;
    int temp =a[i];
    a[i] = a[k];
    a[k] = temp;
    }
    for ( i =0 ; i<a.length; i++ )
    System.out.print(a[i]+" ");
    System.out.println( );
    }
    }
  3. 写出以下程序的功能。

    import java.io.*;
    public class TestFile
    {
    public static void main(String args[]) throws Exception
    {
    BufferedReader br = new BufferedReader(
    new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new FileWriter("input.txt"));
    String s;
    while (true)
    {
    System.out.print("请输入一个字符串: ");
    System.out.flush();
    s=br.readLine();
    if (s.length()==0) break;
    bw.write(s);
    bw.newLine();
    }
    bw.close();
    }
    }

    结果:该程序的功能是将用户从控制台输入的字符串保存到名为 “input.txt” 的文本文件中。

  4. 阅读以下程序,写出输出结果。

    class Animal {
    Animal() {
    System.out.print("Animal ");
    }
    }
    public class Dog extends Animal {
    Dog() {
    System.out.print("Dog ");
    }
    public static void main(String[] args) {
    Dog snoppy = new Dog();
    }
    }

    结果:Animal Dog

《JAVA语言程序设计》期末考试练习三

单项选择题

  1. 如下哪个是Java中的标识符(D)
    A. public B. super C. 3number D. width

  2. 如下哪个是Java中的标识符( A)
    A. fieldname B. super C. 3number D. #number

  3. 已知如下定义:String s = “story”; 下面哪个语句不是合法的( C )
    A. s += “books”; B. s = s + 100;
    C. int len = s.length; D. String t = s + “abc”;

  4. 如下哪个是Java中有效的关键字(C)
    A. name B. hello C. false D. good

  5. 下面的代码段执行之后count的值是什么( D )

    int count = 1;
    for (int i = 1; i <= 5; i++) {
    count += i;
    }
    System.out.println(count);

    A. 5 B. 1 C. 15 D. 16

  6. 定义一个类,必须使用的关键字是( B)
    A. public B. class C. interface D. static

  7. 定义一个接口必须使用的关键字是( C )
    A. public B. class C. interface D. static

  8. 如果容器组件p的布局是BorderLayout,则在p的下边中添加一个按钮b,应该使用的语句是( C )
    A. p.add(b); B. p.add(b,”North”);
    C. p.add(b,”South”); D. b.add(p,”North”);

  9. 声明并创建一个按钮对象b,应该使用的语句是( A )
    A. Button b=new Button(); B. button b=new button();
    C. Button b=new b(); D. b.setLabel(“确定”);

  10. Frame对象默认的布局管理器是( B )
    A. FlowLayout B. BorderLayout
    C. CardLayout D. null

  11. 下列哪一个import命令可以使我们在程序中创建输入/输出流对象(C)
    A. import java.sql.*; B. import java.util.*;
    C. import java.io.*; D. import java.net.*;

  12. 下面哪一个import命令可以为我们提供编写网络应用程序的类(D)
    A. import java.sql.*; B. import java.util.*;
    C. import java.io.*; D. import java.net.*;

  13. 如果需要从文件中读取数据,则可以在程序中创建哪一个类的对象(A)
    A. FileInputStream B. FileOutputStream
    C. DataOutputStream D. FileWriter

填空题

  1. 如果将类MyClass声明为public,它的文件名称必须是 MyClass.java 才能正常编译。
  2. Java程序中的单行注释符是( // ),多行注释符是( /**/ )。
  3. Java中布尔类型的常量有两种,它们是( True )和(False )。
  4. Java中用于定义小数的关键字有两个:( float) 和 ( double),后者精度高于前者。
  5. Java中用于两个数相等比较的运算符是:( == ),用于不相等比较的运算符是( != )。
  6. 在Java中定义一个字符串类型的变量str的语句是:( String str ) ,定义一个具有10个元素的整型数组a的语句是:( int[] a = new int[10]; ) 。
  7. 导入mypackage包中的所类的命令是( import mypackage.*; )。
  8. 当声明一个数组int arr[] = new int[5]; 时,这代表这个数组所保存的变量类型是(整型 ),数组名是( arr ),数组的大小为( 5 ),数组元素下标的使用范围是(0-4 )。
  9. 假设x=13,y=4,则表达式x%y != 0的值是(true ),其数据类型是( boolean )。
  10. 异常处理是由( try ). ( catch )和finally块三个关键所组成的程序块。
  11. 以下程序段的输出结果是( 三角形 )
    int x = 5, y = 6, z = 4;
    if (x + y > z && x + z > y && z + y > x)
    System.out.println(“三角形”);
    else
    System.out.println(“不是三角形”);
  12. 下面程序段的执行结果是( 6 5 4 3 2 )
    int a[] = { 2, 3, 4, 5, 6 };
    for (int i = a.length - 1; i >= 0; i–)
    System.out.print(a[i] + “ “);

程序阅读题

  1. 以下程序的输出结果为__ Peter is 17 years old! 。
    public class Person {
    String name;
    int age;
    public Person(String name, int age) {
    this.name = name;
    this.age = age;
    }
    public static void main(String[] args) {
    Person c = new Person("Peter", 17);
    System.out.println(c.name + " is " + c.age + " years old!");
    }
    }
  2. 以下程序的输出结果为_ 课程号:101 课程名:ASP 学分:3 。
    public class Course {
    private String cNumber;
    private String cName;
    private int cUnit;
    public Course(String number, String name, int unit) {
    cNumber = number;
    cName = name;
    cUnit = unit;
    }
    public void printCourseInfo() {
    System.out.println("课程号:" + cNumber + " 课程名:" + cName + " 学分:" + cUnit);
    }
    }
    class CourseTest {
    public static void main(String[] args) {
    Course c;
    c = new Course("101", "ASP", 3);
    c.printCourseInfo();
    }
    }
  3. 以下程序的输出结果为__ 汤姆猫体重:20.0斤 。
    public class Tom {
    private float weight;
    private static String name;

    public void setWeight(float weight) {
    this.weight = weight;
    }

    private void out() {
    System.out.println(name + "体重:" + weight + "斤");
    }

    public static void main(String[] args) {
    Tom.name = "汤姆猫";
    Tom cat = new Tom();
    cat.setWeight(20);
    cat.out();
    }
    }
  4. 以下程序的输出结果 : 姓名:Tom 年龄:15 家庭住址:金水区 电话:66123456 学校:九中 。
    public class Father {
    String name, address, tel;
    int age;

    public Father(String name, int age) {
    this.name = name;
    this.age = age;
    }

    void out() {
    System.out.print("姓名:" + name);
    System.out.print(" 年龄:" + age);
    }

    void outOther() {
    System.out.print(" 家庭住址:" + address);
    System.out.print(" 电话:" + tel);
    }
    }

    class Son extends Father {
    String school;

    public Son(String name, int age) {
    super(name, age);
    }

    void out() {
    super.out();
    super.outOther();
    System.out.println(" 学校:" + school);
    }

    public static void main(String args[]) {
    Son son = new Son("Tom", 15);
    son.address = "金水区";
    son.school = "九中";
    son.tel = "66123456";
    son.out();
    }
    }
  5. 下列程序的运行结果是__ 1 2 3 4 5 。
    public class MyClass {
    int a[] = { 1, 2, 3, 4, 5 };

    void out() {
    for (int j = 0; j < a.length; j++)
    System.out.print(a[j] + "");
    }

    public static void main(String[] args) {
    MyClass my = new MyClass();
    my.out();
    }
    }

简答题

  1. 简述Java中异常处理的机制?
    答:首先Java的异常是面向对象的。一个Java的Exception是一个描述异常情况的对象.当出现异常情况时,一个Exception对象就产生了,并放到异常的成员函数里。
    Java的异常处理是通过5个关键词来实现的:try,catch,throw,throws和finally。
    1.异常处理:在Java语言的错误处理结构由try,catch,finally三个块组成。其中try块存放将可能发生异常的Java语言,并管理相关的异常指针;catch块紧跟在try块后面,用来激发被捕获的异常;finally块包含清除程序没有释放的资源,句柄等。不管try块中的代码如何退出,都将执行 finally块。
    2.抛出异常:Java语言可以不在方法中直接捕获,而用throw语句将异常抛给上层的调用者。Throw语句就是来明确地抛出一个异常;首先你必需得到一个Throwable的实例句柄,通过参数传到catch中,或者采用new操作符来创建一个。

  2. 什么是继承?
    答:通过必要的说明能够实现某个类无需重新定义就拥有另一个类的某些属性和方法,并把这种关系称为继承,先定义的类称为父类,后定义的类称为子类,并且允许多层的继承关系。

  3. 请简述重载和重写的区别?
    答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。
    重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
    如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

程序设计题

第一个程序:

class Rectangle {
double width;
double height;

double calculatePerimeter() {
return 2 * (width + height);
}

double calculateArea() {
return width * height;
}
}

public class Main1 {
public static void main(String[] args) {
Rectangle myRectangle = new Rectangle();
myRectangle.width = 5;
myRectangle.height = 7;
double perimeter = myRectangle.calculatePerimeter();
double area = myRectangle.calculateArea();
System.out.println("矩形的周长为:" + perimeter);
System.out.println("矩形的面积为:" + area);
}
}

第二个程序:

interface Animal {
void run();
}
class Bird implements Animal {
@Override
public void run() {
System.out.println("Bird is flying.");
}
}
class Fish implements Animal {
@Override
public void run() {
System.out.println("Fish is swimming.");
}
}
public class Main {
public static void main(String[] args) {
Bird myBird = new Bird();
Fish myFish = new Fish();
myBird.run(); // 输出 "Bird is flying."
myFish.run(); // 输出 "Fish is swimming."
}
}

第三个程序:

import java.awt.Color;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MyFrame extends Frame {
private static final long serialVersionUID = 6895463895656626294L;

private Frame frmMain;
MenuBar mb;
Menu mnuFile;
Menu mnuEdit;
MenuItem miOpen;
MenuItem miSave;
MenuItem miClose;
MenuItem miCopy;
MenuItem miPaste;

public MyFrame() {
frmMain = new Frame("主窗体");
mb = new MenuBar();
mnuFile = new Menu("文件");
mnuEdit = new Menu("编辑");
miOpen = new MenuItem("打开");
miSave = new MenuItem("保存");
miClose = new MenuItem("关闭");
miCopy = new MenuItem("复制");
miPaste = new MenuItem("粘贴");
}

public void showFrame() {
frmMain.setSize(800, 600);
frmMain.setLocation(100, 100);
frmMain.setBackground(Color.white);
frmMain.setVisible(true);
frmMain.setLayout(null);

frmMain.addWindowListener(new WindowHandler());

frmMain.setMenuBar(mb);
mb.add(mnuFile);
mb.add(mnuEdit);
mnuFile.add(miOpen);
mnuFile.add(miSave);
mnuFile.add(miClose);
mnuEdit.add(miCopy);
mnuEdit.add(miPaste);

miClose.setActionCommand("miClose_Clicked");
miClose.addActionListener(new MenuHandler());
}

private class WindowHandler extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}

private class MenuHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand() == "miClose_Clicked") {
System.exit(0);
}
}
}
}

public class TestMyFrame {
public static void main(String[] args) {
MyFrame guiWindow = new MyFrame();
guiWindow.showFrame();
}
}

《JAVA语言程序设计》期末考试练习四

单选题

  1. 下列程序段执行后的结果是(A)。

    String s = new String("abcdefg");
    for (int i=0; i<s.length(); i+=2){
    System.out.print(s.charAt(i));
    }

    A) aceg B) ACEG C) abcdefg D) abcd

  2. 有整型数组:int[] x={12,35,8,7,2};,则调用方法Arrays.sort(x)后,数组x中的元素值依次是(A)。
    A) 2 7 8 12 35 B) 12 35 8 7 2
    C) 35 12 8 7 2 D) 8 7 12 35 2

  3. 下面的程序段创建了BufferedReader类的对象in,以便读取本机c盘my文件夹下的文件1.txt。File构造函数中正确的路径和文件名的表示是(C)。

    File f = new File(填代码处);
    file =new FileReader(f);
    in=new BufferedReader(file);

    A) “./1.txt” B) “../my/1.txt” C) “c:\ \my\ \1.txt” D) “c:\ my\1.txt”

  4. 应用程序的main方法中有以下语句,则输出的结果是(A)。

    String  s1=new String("abc");
    String s2=new String("abc");
    boolean b1=s1.equals(s2);
    boolean b2=(s1==s2);
    System.out.print(b1+" "+b2);

    A)true false B) false true C) true true D)false false

  5. 应用程序的main方法中有以下语句,则输出的结果是(B)。

    Hashtable hashtable=new Hashtable();
    hashtable.put("x","12345");
    hashtable.put("y","67890");
    hashtable.put("a","abcde");
    System.out.println(hashtable.get("a"));

    A) a B) abcde C) 12345 D) 67890

  6. 下面语句的功能是(A)。

    RandomAccessFile  raf2 = new RandomAccessFile("1.txt","rw" ); 

    A)打开当前目录下的文件1.txt,既可以向文件写数据,也可以从文件读数据。
    B)打开当前目录下的文件1.txt,但只能向文件写入数据,不能从文件读取数据。
    C)打开当前目录下的文件1.txt,但不能向文件写入数据,只能从文件读取数据。
    D)以上说法都不对。

  7. 应用程序的main方法中有以下语句,则输出的结果是(B)。

    String   s="12345#aaa#bbb#67890";
    int n=s.indexOf("#");
    int k=s.indexOf("#",n+1);
    int m=s.indexOf("#",k+1);
    String s2=s.substring(m+1);
    System.out.println(s2);

    A) 123456 B) 67890 C) aaa D) bbb

  8. 下面程序段执行后b的值是(B)。

    Integer integ =new Integer(9);
    boolean b = integ instanceof Object;

    A) 9 B) true C) 1 D) false

  9. 应用程序Test.java的源程序如下,在命令行键入:

    public class Test {
    public static void main(String args[]) {
    int k1=args.length;
    int k2=args[1].length();
    System.out.print(k1+" "+k2);
    }
    }

    回车后输出的结果是(A)。
    A) 3 2 B)1 2 C) 1 3 D) 3 3

  10. 应用程序的main方法中有以下语句,则输出的结果是(B)。

    int  b[][]={{1}, {2,2}, {2,2,2}};
    int sum=0;
    for(int i=0;i<b.length;i++) {
    for(int j=0;j<b[i].length;j++) {
    sum+=b[i][j];
    }
    }
    System.out.println("sum="+sum);

    A) 32 B) 11 C) 2 D) 3

  11. 应用程序的main方法中有以下语句,则执行后输出的结果是(D)。

    int[]  x={125,21,5,168,98};
    int max=x[0];
    for(int i=1;i<x.length;i++){
    if(x[i]> max)
    max =x[i];
    }
    System.out.println(max);

    A) 125 B) 5 C) 98 D) 168

  12. 程序Test.java编译运行后输出的结果是(A)。

    public class Test {
    String s1="java";
    public static void main(String args[]) {
    int z=2;
    Test t=new Test();
    System.out.println(t.s1+z);
    }
    }

    A) java2 B) 2 C) 没有输出结果 D) java

  13. 应用程序的main方法中有以下语句,则输出的结果是(A)。

    String s1="0.5", s2="12"; 
    double x=Double.parseDouble(s1);
    int y=Integer.parseInt(s2);
    System.out.println(x+y);

    A) 12.5 B) 120.5 C) 12 D) “12.5”

  14. 下面的程序创建了一个文件输出流对象,用来向文件test.txt中输出数据,假设程序当前目录下不存在文件test.txt,编译下面的程序Test.java后,将该程序运行3次,则文件test.txt 的内容是(D)。

    import java.io.*;
    public class Test {
    public static void main(String args[]) {
    try {
    String s="ABCDE";
    byte b[]=s.getBytes();
    FileOutputStream file=new FileOutputStream("test.txt",true);
    file.write(b);
    file.close();
    }
    catch(IOException e) {
    System.out.println(e.toString());
    }
    }
    }

    A) ABCABC B) ABCDE C) Test D) ABCDE ABCDE ABCDE

多选题

  1. 下面main()方法的定义哪些是正确的(ACD)?

    • A) public static void main(String args[]) {}
    • B) public static void main(String[]) {}
    • C) public static void main(String[] args) {}
    • D) public static void main(String [] x) {}
  2. 线程对象的生命周期中,通常经历下面哪些状态(ABCD)?

    • A) 新建
    • B) 运行
    • C) 就绪
    • D) 死亡
  3. 下面说法正确的是(ABCD)。

    • A) final 可修饰类、属性(变量)、方法。
    • B) abstract 可修饰类、方法。
    • C) 抽象方法只有方法头,没有方法体。
    • D) 关键字 finalabstract 不能同时使用。
  4. 下面关于 Java 中输入/输出流的说法正确的是(ABCD)。

    • A) FileInputStreamFileOutputStream 类用于读写字节流。
    • B) ReaderWriter 类用来读写字符流。
    • C) RandomAccessFile 既可以用来读文件,也可以用来写文件。
    • D) File 类用来处理与文件相关的操作。
  5. 下面说法正确的是(AC)。

    • A) 如果某公共接口被声明在一个源文件中,则接口必须与源文件具有相同名字。
    • B) 如果源文件包含 import 语句,则该语句必须是除空行和注释行外的第一个语句行。
    • C) 如果某源文件包含 package 语句,则该语句必须是第一个非空、非注释行。
    • D) 接口中的方法必定是抽象方法,但可以不用关键字 abstract 修饰。
  6. 下面关于 Java 中异常处理 try 块的说法正确的是(AC)?

    • A) try 块后通常应有一个 catch 块,用来处理 try 块中抛出的异常。
    • B) catch 块后必须有 finally 块。
    • C) 可能抛出异常的方法调用应放在 try 块中。
    • D) 对抛出的异常的处理必须放在 try 块中。
  7. 下面关于进程和线程的说法正确的是(ABCD)。

    • A) 进程是程序的一次动态执行过程。一个进程在其执行过程中,可以产生多个线程——多线程,形成多条执行线索。
    • B) 线程是比进程更小的执行单位,是在一个进程中独立的控制流,即程序内部的控制流。线程本身不能自动运行,栖身于某个进程之中,由进程启动执行。
    • C) Java 多线程的运行与平台相关。
    • D) 对于单处理器系统,多个线程分时间片获取 CPU 或其他系统资源来运行。对于多处理器系统,线程可以分配到多个处理器中,从而真正的并发执行多任务。
  8. 关于 BufferedReader 类的 readLine() 方法,以下说法正确的是(ACD)。

    • A) 方法 readLine() 每次读取一行数据。
    • B) 方法 readLine() 每次读取一个字节。
    • C) 该方法可能抛出 IOException 异常,调用该方法时通常应将它放到 try 块中,并通过 catch 块处理异常。
    • D) 如果读到流的末尾,该方法返回的结果为 null

程序阅读题

  1. 阅读下面的程序,回答问题:
    import java.awt.*;
    import javax.swing.*;
    public class T extends JFrame {
    public T ( ) {
    super("GridLayout");
    Container con=this.getContentPane();
    con.setLayout(new GridLayout(2,3));
    con.add(new JButton("a"));
    con.add(new JButton("b"));
    con.add(new JButton("c"));
    con.add(new JButton("d"));
    con.add(new JButton("e"));
    con.add(new JButton("f"));
    setSize(200, 80);
    setVisible(true);
    }
    public static void main(String args[]) {
    new T();
    }
    }
  • 画图表示程序运行后的图形界面。

  • 如果程序通过实现某个接口处理按钮的动作事件,则该接口名为何?接口中的方法头声明如何?

答案:

  • 接口名:ActionListener
  • 接口中的方法:public void actionPerformed(ActionEvent e)
  1. 阅读下面的程序,并回答问题:
    import java.io.*;
    public class Test {
    public static void main(String args[]) throws IOException {
    BufferedReader buf=new BufferedReader(
    new InputStreamReader(System.in));
    while(true) {
    String str=buf.readLine();
    if(str.equals("quit"))
    break;
    int x=Integer.parseInt(str);
    System.out.println(x*x);
    }
    }
    }
  • 编译运行上面的程序:

  • 从键盘输入5,回车后输出的结果如何?

回答:输出25

  • 从键盘输入quit,回车后程序执行情况如何?

回答:退出程序

《JAVA程序设计》期末考试练习五

单选题

  1. 当某一线程正处于休眠状态,而另一个线程用 Thread 类中的 interrupt() 方法中断它时,抛出的异常类型是( C )。
    A) IOException B) RuntimeException
    C) InterruptedException D) ClassNotFoundException

  2. 下面的程序段的功能是( A )。

    File file1=new File("d:\\xxx\\yyy\\zzz");
    file1.mkdirs();

    A)在当前目录下生成子目录:\xxx\yyy\zzz B)生成目录: e:\xxx\yyy\zzz
    C)在当前目录下生成文件xxx.yyy.zzz D)以上说法都不对

  3. 应用程序的main方法中有以下语句,则输出的结果是 ( B )。

    String s = "xxxxxxxxxxxxxxx#123#456#zzzzz";
    int n = s.indexOf("#");
    int k = s.indexOf("#", n+1);
    String s2 = s.substring(n+1, k);
    System.out.println(s2);

    A) 123456 B) 123 C) xxxxxxxxxxxxxxx D) zzzzz

  4. 关于下面的程序Test.java说法正确的是( D )。

    public class Test {
    String x="1";
    int y;
    public static void main(String args[]) {
    int z=2;
    System.out.println(x+y+z);
    }
    }

    A)3 B)102 C) 12 D)程序有编译错误

  5. 应用程序的main方法中有以下语句,则输出的结果是 ( A )。

    int b[][]={{1, 1, 1}, {2,2}, {3}};
    int sum=0;
    for(int i=0; i<b.length; i++) {
    for(int j=0; j<b[i].length; j++) {
    sum+=b[i][j];
    }
    }
    System.out.println("sum="+sum);

    A) 10 B) 6 C) 9 D) 13

  6. 应用程序的main方法中有以下语句,则执行后输出的结果是 ( B )。

    int[] x = {125,21,5,168,98};
    int min = x[0];
    for (int i=1; i<x.length; i++){
    if(x[i] < min)
    min = x[i];
    }
    System.out.println(min);

    A) 125 B) 5 C) 98 D) 168

  7. 应用程序的main方法中有以下语句,则输出的结果是 ( D )。

    Hashtable hashtable=new Hashtable();
    hashtable.put("100","aaa");
    hashtable.put("200","bbb");
    hashtable.put("300","ccc");
    System.out.println(hashtable.get("300").toString()
    + hashtable.get("200").toString()
    + hashtable.get("100").toString());

    A) aaa B) bbb C) ccc D) cccbbbaaa

  8. 下面的程序创建了一个文件输出流对象,用来向文件 test.txt 中输出数据,假设程序当前目录下存在文件 test.txt,编译下面的程序 Test.java 后,将该程序运行 3 次,则文件 test.txt 的内容是( D )。

    import java.io.*;
    public class Test {
    public static void main(String args[]) {
    try {
    String s="ABCDE";
    byte b[]=s.getBytes();
    FileOutputStream file=new FileOutputStream("test.txt", true);
    file.write(b);
    file.close();
    }
    catch(IOException e) {
    System.out.println(e.toString());
    }
    }
    }

    A) ABCABC B) ABCDE C) Test D) ABCDE ABCDE ABCDE

  9. 下面说法不正确的是( D )?
    A) 列表(List). 集合(Set) 和映射(Map) 都是 java.util 包中的接口。
    B) List 接口是可以包含重复元素的有序集合。
    C) Set 接口是不包含重复元素的集合。
    D) Map 接口将键映射到值,键可以重复,但每个键最多只能映射一个值。

多选题

  1. 下面哪些关键字能用来控制对类成员的访问( ABC )?
    A) public B) protected C) private D) default

  2. 下面关于Java中异常处理try块的说法正确的是( AC )?
    A) try 块后通常应有一个 catch 块,用来处理 try 块中抛出的异常。
    B) catch 块后必须有 finally 块。
    C) 可能抛出异常的方法调用应放在 try 块中。
    D) 对抛出的异常的处理必须放在 try 块中

  3. 线程对象的生命周期中,通常经历下面哪些状态( ABCD )。
    A)新建 B)运行 C)就绪 D)死亡

  4. 定义如下的二维数组 b,下面的说法正确的是( ACD )。
    int b[][]={{1, 2, 3}, {4, 5},{6, 7, 8}}};
    A) b.length 的值是3。 B) b[1].length 的值是3。
    C) b[1][1] 的值是5。 D) 二维数组 b 的第一行有3个元素

  5. 类 B 是一个抽象类,类 C 是类 B 的非抽象子类,下列创建对象 x1 的语句中正确的是( BC )。
    A) B x1= new B( ); B) B x1= new C( );
    C) C x1=new C( ); D) C x1= new B( );

  6. 下面关于进程. 线程的说法正确的是( ABCD )。
    A) 进程是程序的一次动态执行过程。一个进程在其执行过程中,可以产生多个线程——多线程,形成多条执行线索。
    B) 线程是比进程更小的执行单位,是在一个进程中独立的控制流,即程序内部的控制流。线程本身不能自动运行,栖身于某个进程之中,由进程启动执行。
    C) Java 多线程的运行与平台相关。
    D) 对于单处理器系统,多个线程分时间片获取 CPU 或其他系统资源来运行。对于多处理器系统,线程可以分配到多个处理器中,从而真正的并发执行多任务。

  7. 下面关于外部类和内部类成员的相互访问的规则中,正确的选项是( AD )。
    A) 内部类可以直接访问外部类的成员
    B) 外部类可以直接访问内部类的成员
    C) 外部类不能访问内部类的成员
    D) 外部类可通过创建内部类的实例来访问内部类的成员

程序阅读题

  1. 阅读下面的程序代码,并回答问题。
String s1 = new String("abcde");
String s2 = new String("abcde");
boolean b1= s1.equals(s2);
boolean b2 = s1== s2;
System.out.print(b1+" "+b2);

程序段执行后,在命令行的输出结果如何?

true false

解释输出(1)的结果的原因?

boolean b1 = s1.equals(s2); 这一行比较的是两个字符串对象的内容,即它们所包含的字符序列是否相同。

boolean b2 = s1 == s2; 这一行比较的是两个字符串对象的引用,即它们在内存中的地址是否相同。

  1. 阅读下面的程序,并回答问题(问3分,问3分,共6分)。
import java.io.*;

public class Test {

public static void main(String args[]) throws IOException {

BufferedReader buf=new BufferedReader(
new InputStreamReader(System.in));

while(true) {
String str = buf.readLine();
if(str.equals("quit"))
break;

int x=Integer.parseInt(str);
System.out.println(x*x);
}
}
}

编译运行上面的程序:

从键盘输入10,回车后输出的结果如何?

输出100

从键盘输入exit,回车后程序能正确执行吗?为什么?

不能正确执行。在执行 Integer.parseInt(str) 时,无法将字符串 “exit” 转换成整数。

  1. 写出下面的程序编译. 运行后的结果(6分)。
public class Test{

public static void main(String args[]) {

new Student("Tom", 'm', 90, 88);
new Student("Jack", 'm', 66, 89);
new Student("Mary", 'f', 76, 86);

System.out.println("name\tsex\tchinese\tenglish");
Student.print();
}
}

class Student {

protected String name;
protected char sex;
protected int chinese;
protected int english;
protected Student next;

static Student list;

Student (String name, char sex, int chinese, int english) {
this.name=name;
this.sex=sex;
this.chinese=chinese;
this.english=english;
this.next=list;
list=this;
}

static void print() {
Student friend=list;
if (friend==null)
System.out.println("The list is empty.");
else {
do{
System.out.println(friend.toString());
friend=friend.next;
}while(friend!=null);
}
}

public String toString() {
return new String(name+"\t"+sex+"\t"+chinese+"\t"+english);
}

}

结果:

name    sex chinese english
Mary f 76 86
Jack m 66 89
Tom m 90 88

《JAVA程序设计》期末考试练习六

填空题

  1. 定义类的保留字是(class),定义接口的保留字是(interface)。
  2. Socket通常也称为 (套接字),用于描述(网络通信) 和 (数据传输)。
  3. 线程的优先级在(1)至(10)之间,数值越大(优先级越高)。
  4. 构造方法是一种特殊的成员方法,构造方法名与(类名) 相同。
  5. Java语言只允许单继承,指每个类只能有一个 (直接父类)。
  6. Java源程序的扩展名是(.java),经过编译后的程序的扩展名是(.class)。
  7. 在一个时间只能由一个线程访问的资源称为 (临界资源) 。访问临界资源的代码(需要互斥)。
  8. 在多线程系统中,多个线程之间有 (竟态) 和 (协作) 两种关系。

选择题

  1. 关于选择结构下列哪个说法正确? (B)
    A.if语句和 else语句必须成对出现
    B.if语句可以没有else语句对应
    C.switch结构中每个case语句中必须用break语句
    D.switch结构中必须有default语句

  2. while循环和 do…while循环的区别是: (D)
    A.没有区别,这两个结构任何情况下效果一样
    B.while循环比 do…while循环执行效率高
    C.while循环是先循环后判断,所以循环体至少被执行一次
    D.do…while循环是先循环后判断,所以循环体至少被执行一次

  3. 关于 for循环和 while循环的说法哪个正确? (B)
    A.while循环先判断后执行,for循环先执行后判断。
    B.while循环判断条件一般是程序结果,for循环的判断条件一般是非程序结果
    C.两种循环任何时候都不可以替换
    D.两种循环结构中都必须有循环体,循环体不能为空

  4. 下列修饰符中与访问控制无关的是 (D)
    A.private   
    B.public
    C.protected
    D.final

  5. void的含义: (A)
    A.方法没有返回值   
    B. 方法体为空
    C.没有意义    
    D. 定义方法时必须使用

  6. return语句: (C)
    A.只能让方法返回数值    
    B.方法都必须含有
    C.方法中可以有多句return   
    D.不能用来返回对象

  7. 关于对象成员占用内存的说法哪个正确? (B)
    A.同一个类的对象共用同一段内存
    B. 同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间
    C.对象的方法不占用内存
    D.以上都不对

  8. 下列说法哪个正确?(C)
    A.不需要定义类,就能创建对象
    B.对象中必须有属性和方法
    C.属性可以是简单变量,也可以是一个对象
    D. 属性必须是简单变量

  9. 下列说法哪个正确? (A)
    A. 一个程序可以包含多个源文件
    B. 一个源文件中只能有一个类
    C. 一个源文件中可以有多个公共类
    D. 一个源文件只能供一个程序使用

  10. 关于方法main()的说法哪个正确?(C)
    感谢wjl同学修改错误
    A.方法main()只能放在公共类中
    B. main()的头定义可以根据情况任意更改
    C.一个类中可以没有main()方法
    D.所有对象的创建都必须放在main()方法中

  11. 构造函数何时被调用? (A)
    A. 创建对象时     
    B. 类定义时
    C. 使用对象的方法时  
    D. 使用对象的属性时

  12. 抽象方法: (C)
    A. 可以有方法体
    B. 可以出现在非抽象类中
    C. 是没有方法体的方法
    D. 抽象类中的方法都是抽象方法

  13. 关于继承的说法正确的是: (B)
    A. 子类将继承父类所有的属性和方法。
    B. 子类将继承父类的非私有属性和方法。
    C. 子类只继承父类public方法和属性
    D. 子类只继承父类的方法,而不继承属性

  14. 关于构造函数的说法哪个正确? (C)
    A. 一个类只能有一个构造函数
    B. 一个类可以有多个不同名的构造函数
    C. 构造函数与类同名
    D. 构造函数必须自己定义,不能使用父类的构造函数

  15. 覆盖与重载的关系是 (A)
    A. 覆盖只有发生在父类与子类之间,而重载可以发生在同一个类中
    B.覆盖方法可以不同名,而重载方法必须同名
    C.final修饰的方法可以被覆盖,但不能被重载
    D.覆盖与重载是同一回事

  16. 关于接口哪个正确? (A)
    A. 实现一个接口必须实现接口的所有方法
    B.一个类只能实现一个接口
    C.接口间不能有继承关系
    D.接口和抽象类是同一回事

  17. 异常包含下列哪些内容? (A)
    A.程序执行过程中遇到的事先没有预料到的情况
    B.程序中的语法错误  
    C.程序的编译错误
    D.以上都是

  18. 对于已经被定义过可能抛出异常的语句,在编程时: (A)
    A. 必须使用try/catch语句处理异常,或用throws将其抛出
    B.如果程序错误,必须使用 try/catch语句处理异常
    C.可以置之不理
    D.只能使用try/catch语句处理

  19. 字符流与字节流的区别在于 (D)
    A.前者带有缓冲,后者没有
    B.前者是块读写,后者是字节读写
    C. 二者没有区别,可以互换使用
    D. 每次读写的字节数不同

  20. 下列流中哪个不属于字节流 (D)
    A.FileInputStream
    B.BufferedInputStream
    C. FilterInputStream
    D. InputStreamReader

程序填空题

1.

public class Sum {
public static void main(String[] args) {
int j = 10;
System.out.println("j is : " + j);
calculate(j);
System.out.println("At last, j is : " + j);
}

static void calculate(int j) {
for (int i = 0; i < 10; i++)
j++;
System.out.println("j in calculate() is: " + j);
}
}

输出结果为:

j is : 10
j in calculate() is: 20
At last, j is : 10

  1. abstract class SuperAbstract {
    void a() {…}
    abstract void b();
    abstract int c(int i);
    }

    interface AsSuper {
    void x();
    }

    abstract class SubAbstract extends SuperAbstract implements AsSuper {
    public void b() {…}
    abstract String f();
    }

    public class InheritAbstract extends SubAbstract {
    public void x() {…}
    public int c(int i) {…}
    public String f() {…}

    public static void main(String args[]) {
    InheritAbstract instance = new InheritAbstract();
    instance.x();
    instance.a();
    instance.b();
    instance.c(100);
    System.out.println(instance.f());
    }
    }

    在以上这段程序中:

  2. 抽象类有:SuperAbstract和 SubAbstract。

  3. 非抽象类有: InheritAbstract。

  4. 接口有: AsSuper。

  5. AsSuper中的x()方法是抽象方法,所以在InheritAbstract中必须对它进行重写。

  6. public class Leaf {
    private int i = 0; //此属性值用于检验
    Leaf increment() { //定义方法increment(),返回值是Leaf类的对象
    i++;
    return this; //将当前对象的地址作为返回值返回
    }
    void print() {
    System.out.println(" i = " + i);
    }
    public static void main(String args[]) {
    Leaf x = new Leaf(); //创建Leaf类的对象x
    x.increment().increment().increment().print();
    }//多次调用方法increment(),返回的都是x的地址,i 值表示调用次数
    }

    第一空:this
    第二空:new Leaf()

输出结果为:i=3

  1. // FileStream源代码如下:
    import java.io.*;
    class FileStream {
    public static void main(String args []) {
    try {
    File inFile = new File("file1.txt"); //指定源文件
    File outFile = new File("file2.txt"); //指定目标文件
    FileInputStream fis = new FileInputStream(inFile);
    FileOutputStream fos = new FileOutputStream(outFile);
    int c;
    //逐字节从源文件中输入,再输出到fos流
    while ((c = fis.read ())!=-1)
    fos.write(c);
    fis.close();
    fos.close();
    } catch (Exception e) {
    System.out.println("FileStreamsTest: "+e);
    }
    }
    }
    第一空:new FileInputStream(inFile)
    第二空:fos.write(c)

阅读程序,给出结果:

// AbstractClassDemo.java源代码如下:
abstract class Shape { //定义抽象类Shape和抽象方法display
abstract void display();
}

class Circle extends Shape {
void display() { //实现抽象类的方法
System.out.println("Circle");
}
}

class Rectangle extends Shape {
void display() { //实现抽象类的方法
System.out.println("Rectangle");
}
}

class Triangle extends Shape {
void display() { //实现抽象类的方法
System.out.println("Triangle");
}
}

public class AbstractClassDemo{
public static void main(String args[]){
(new Circle()).display(); //定义无名对象来调用对应的display方法
(new Rectangle()).display();
(new Triangle()).display();
}
}

输出结果是:
Circle
Rectangle
Triangle

《JAVA程序设计》期末考试练习七

选择题

  1. 请说出下列代码的执行结果: (B)
    String s = “abcd”;
    String s1 = new String(s);
    if (s == s1) System.out.println(“the same”);
    if (s.equals(s1)) System.out.println(“equals”)
    结果: equals

  2. 下列有关 Java 中接口的说法哪个是正确的? (B)
    A. 接口中含有具体方法的实现代码
    B. 若一个类要实现一个接口,则用到 “implements” 关键字
    C. 若一个类要实现一个接口,则用到“ extends ”关键字
    D. 接口不允许继承
    正确答案: B

  3. 下列代码的执行结果是什么? (B)
    String s1 = “aaa”;
    String s2 = s1.concat(“bbb”);
    System.out.println(s2);
    结果: The string “aaabbb”.

  4. 如果有一个对象 myListener ( 其中 myListener 对象实现了 ActionListener 接口 ),
    下列哪条语句使得 myListener 对象能够接受处理来自于 smallButton 按钮对象的动作事件? (C)
    A. smallButton.add(myListener);
    B. smallButton.addListener(myListener);
    C. smallButton.addActionListener(myListener);
    D. smallButton.addItem(myListener);
    正确答案: C

读程序题

  1. 读下列代码,说出这段程序的功能。
import java.io.*;

public class Test {

public static void main( String[] argv) {

try {
BufferedReader is = new BufferedReader( new InputStreamReader(System.in));
String inputLine;

While ((inputLine = is.readLine ())!= null) {
System.out.println(inputLine);
}

is.close();
} catch (IOException e) {
System.out.println("IOException: " + e);
}
}
}

这段程序的功能是从控制台读取用户输入的文本,并将其逐行打印出来,直到遇到输入结束符。

  1. 读下列程序,写出正确的运行结果。
class test {
public static void main (String[] args ){
int x=9, y;
if (x>=0)
if (x>0)
y=1;
else
y=0;
else
y=-1;

System.out.println(y);
}
}

输出:1

  1. 读程序,写出正确的运行结果。
public class Father {
int a=100;
public void miner(){
a--;
}
public static void main(String[] args){
Father x = new Father();
Son y = new Son();
System.out.println(y.a);
System.out.println( y.getA());
y.miner();
System.out.println(y.a);
System.out.println(y.getA());
}
}

class Son extends Father {
int a = 0;
public void plus(){
a++;
}
public int getA() {
return super.a;
}
}

结果:
0
100
0
99

简答题

1. Java语言的特点:

- 简单性:Java风格类似于C++,但它摒弃了C++中容易引起程序错误的地方。
- 面向对象:Java语言的设计是完全面向对象。
- 分布式:Java具有分布式特性,可以通过远程方法调用(RMI)实现分布式应用程序。
- 解释执行:Java源代码通过解释器逐行翻译成字节码执行。
- 健壮性:Java提供自动垃圾回收机制,异常处理机制,进行严格的类型检查。
- 平台无关性:Java可以在不同平台上运行,只需安装相应的Java虚拟机。
- 安全性:Java提供安全性机制,防止恶意代码执行。
- 多线程:Java支持多线程编程,允许多个任务同时执行。
- 动态性:Java具有动态加载特性,可以在运行时加载类和接口。
  1. AWT事件模型描述:

结合AWT事件模型并举例来说:

import java.awt.event.*;

// 监听对象必须实现对应事件监听器的接口
class MyFirstFrame extends Frame implements ActionListener {
// ...
}

// 明确事件监听器的接口形式
public void actionPerformed(ActionEvent event) {
// ...
}

// MyFirstFrame 类必须实现接口 ActionListener 中的所有方法。

// 注册监听对象.
// 为了把 MyFirstFrame 对象注册为两个按钮的事件监听对象,
// 必须在 MyFirstFrame 的构造函数中添加语句如下:
cancelButton.addActionListener(this);
okButton.addActionListener(this);
  1. 在 Java 中,创建一个线程的两种方法:
  • 定义类来实现 Runnable 接口:
class TestThread implements Runnable {
public void run() {
// 线程执行的代码
}
}
  • 继承 Thread 类:
class TestThread extends Thread {
TestThread(String name) {
super(name);
start();
}

public void run() {
// 线程执行的代码
}
}

Java实验: