桂林理工大学考试(考查)试卷
(2017~ 2018 学年度
第 2 学期)
课程名称:java 程序设计
主要命题者:(填写在试卷第一页背面右上角)
课程序号:380160
考核专业班级:软件 16 级
[A]卷
题号 一 二 三 四 五 六 七 八 九 十 总分
得分
一、简答题(每题 4 分、共 24 分)
1、比较方法重写与方法重载,构造方法可以重载吗?
2、如何使用输入、输出流克隆对象?
3、简述类变量和实例变量的区别
4、简要说说 java 多线程机制中为什么要引入同步机制。
5、简述上转型对象及接口回调
6、比较抽象类与接口并说明面向抽象编程的目的与核心是什么?
1. 答:方法重载是:一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不
同。
而方法重写也叫方法覆盖,是指子类中定义一个方法,这个方法的类型和父类的方法
的类型一致或者是父类的方法的类型的子类型,并且这个方法的名字、参数个数、参数的类
型和父类的方法完全相同。
可以。
2. 答:使用对象流很容易得获取一个序列化对象的克隆,只需将该对象写入到对象输出流,
那么用对象输入流读回的对象一定是原对象的一个克隆。
3. 答:一个类通过使用 new 运算符可以创建多个不同的对象,不同的对象的实例变量将被
分配不同的内存空间。所有对象的类变量都分配给相同的一处内存,对象共享类变量。
4. 答:Java 使我们可以创建多个线程,在处理多线程问题时,我们必须注意这样一个问题:
当两个或多个线程同时访问同一个变量,并且一个线程需要修改这个变量。我们应对这样的
问题作出处理,否则可能发生混乱。
5. 答:对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原对象的一些属
性和功能。而接口回调指:可以把实现某一接口的类创建的对象的引用赋给该接口声明的接
口变量中。那么该接口变量就可以调用被类实现的接口中的方法。
6. 答:接口体中只有抽象方法,没有普通方法;抽象类既可以重写接口中的方法,也可以
直接拥有接口中的方法。
面向抽象编程目的是为了应对用户需求的变化,核心是让类中每种可能的变化对应地交给抽
象类的一个子类类去负责,从而让该类的设计者不去关心具体实现。
二、程序填空题(每空 2 分、共 16 分)
1.下面程序是定义一个 Student 类,在空白处填入适当语句补充完整。
class student{
String name; int age;
int chinese
int math
int english;
int total(){
;//定义一个整型属性 chinese
return
math+english+chinese
;//返回 chinese、math 和 english3 个整
型属性的总和。
}}
2.以下为一个 java 的完整程序,它定义了一个类 Car,并在程序中创建了一个该类的对象
DemoCar,调用该对象的 set_number 方法设置车号属性为 3388,调用该对象的 show_number
方法输出车号。
//Car.java
class Car{
int car_number;
void set_number(int car_num) {
car_number=car_num
;}
void show_number(){
System.out.println(“My car No. is :”+car_number); }
}
}
//CarDemo.java
class CarDemo{
public static void main(String args[]){
Car Democar= new Car()
DemoCar. set_number(3388)
;//构造一辆车
; //设置
车号为 3388
}
}
DemoCar. show_number()
; //显示车号
3.以下程序的功能是将文件 a.txt 复制到 b.txt,在空白处填入适当的内容。
import java.io.*;
public class C {
public static void main(String[] args) throws IOException {
File
inputFile = new File(“a.txt”)
;
File outputFile = new File(" b.txt");
FileReader
in = new FileReader(inputFile);
FileWriter
out = new
FileReader(outputFile)
;
int c;
while (
c
in.close();
out.close();
}
}
)
out.write(c);
三、编程应用题(以下程序必须要在机器上运行结果,将源代码写到答卷上、输出结果截图
到答卷上,两者均无误方可得满分。选做其中三题。 每题 20 分)
1、桂工同学你好,忘记密码、不要惊慌失错,请登陆我们的网站,我们有办法。
编写一个 java 应用程序, (a) 输出把错别字替换为正确用字的字符串。
(b) 将“桂工同学”替换为自己的姓名。
源程序如下:
import java.lang.*;
public class one_ {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "桂工同学你好,忘记密码、不要惊慌失错,请登陆我们的网站,我
们有办法。";
String s1 = "唐文艳";
String s2 = "措";
String s3 = "录";
s=s.replaceAll("桂工同学",s1);
s=s.replaceAll("错",s2);
s=s.replaceAll("陆",s3);
System.out.println(s);
}
}
2、设计一个动物声音“模拟器”,希望模拟器可以模拟各种动物的叫声,要求如下:必须使
用接口或者抽象类;至少模拟两种以上的动物种类;类名方法名定义友好;
源程序如下:
Animal.java
abstract class Animal {
abstract void cry();
abstract String getAnimalName();
}
Simulator.java
class Simulator {
void playSound(Animal animal) {
System.out.print("现在播放"+animal.getAnimalName()+"类的声音:");
animal.cry();
}
}
Dog.java
class Dog extends Animal {
void cry() {
System.out.println("汪汪...汪汪");
}
String getAnimalName() {
return "狗";
}
}
Cat.java
class Cat extends Animal {
void cry() {
System.out.println("喵喵...喵喵");
}
String getAnimalName() {
return "猫";
}
}
Application.java
class
Application {
public static void main(String args[]) {
Simulator simulator = new Simulator();
simulator.playSound(new Dog());
simulator.playSound(new Cat());
}
}
3、调用类 java.lang.Math 的成员方法“public static double random()”运算下面表达
式 10000 次, (int) (Math.random()*20+0.5);
统计其中生成的整数 0,1,2,…,20 的个数分别是多少,并输出统计结果。
源代码如下:
import java.lang.Math;
public class three {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = new int[21];
for(int i = 1;i<=10000;i++){
int n=(int)(Math.random()*20+0.5);
if(n>=0&&n<=20){
a[n]++;
}
}
for(int i=1;i<=20;i++){
System.out.println(i+"的个数为:"+a[i]);
}
}
}
4、编写一个完整的 Java
体要求如下:
Application 程序。包含接口 ShapeArea,类 Circle、Test,具
(1)接口 ShapeArea:
接口方法
double
double
getArea():求一个形状的面积
getPerimeter ():求一个形状的周长
(2)类 Circle:
实现 ShapeArea 接口,并有以下属性和方法:
① 属性
radius: double 类型,表示圆的半径
②方法
r):构造函数
Circle(double
toString()方法 :
输出圆的描述信息,如“radius=1.0, perimeter=6.28, area=3.14”
(3)Test 类作为主类要完成测试功能
①生成 Circle 对象
②调用对象的 toString 方法,输出对象的描述信息
源代码如下:
ShapeArea.java
public interface ShapeArea {
double getArea();
double getPerimeter();
}
Circle.java
public class Circle implements ShapeArea{
double radius;
Circle(double r){
radius = r;
}
void toString(Circle c){
System.out.println("radius="+radius+",perimeter="+getPerimeter()+",area="+
getArea());
}
public double getArea(){
return 3.14*radius*radius;
}
public double getPerimeter(){
return 2*3.14*radius;
}
}
Test.java
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Circle circle;
circle = new Circle(3.0);
circle.toString(circle);
}
}