一、判断题(本大题共20小题,每小题2分,总计 20分)
1.为类A的一个无参数无返回值的方法fun写方法头,使得使用类名A作为前缀就可以调用它,该方法头的形式为public void fun()。
2.对于构造函数,一般在创建新对象时,系统会自动调用构造方法。
3.在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数的个数、类型或顺序各不相同,传回的值也可以不相同。这种面向对象程序特性称为隐藏。
4.abstract方法必须在abstract类中声明,但abstract类定义中可以没有 abstract方法。
5.abstract类只能用来派生子类,不能用来创建abstract类的对象。
6.子类无条件地继承父类的构造方法,在同一个类中定义的重载构造方法可以相互调用。
7.关于被私有访问控制符private修饰的成员变量,只能被同一个包中的类访问。
8.执行完以下代码int[ ] x = new int[25];后,x[25]为0。
9.一个异常处理中 finally语句块可以有多个或者可以没有。
10.关于for循环和while循环,两种循环结构中都必须有循环体,循环体不能为空。
二、单项选择题(本大题共10小题,每小题1分,总计10分)
1. 下列关于Java对import语句规定的叙述中,错误的是( )。
A.在Java程序中import语句可以有多个
B.在Java程序中import语句可以没有
C.在Java程序中import语句必须有一个
D.在Java程序中import语句必须引入在所有类定义之前
2.Java命名规范中,以下哪一个建议全部用大写表示( )。
A.包名 B.类名 C.方法名 D.常量名
3. 所有的异常类皆继承哪一个类?( )
A.java.io.Exception B.java.lang.Throwable
C.java.lang.Exception D.java.lang.Error
4. FilterOutputStream是BufferedOutputStream、DataOutputStream及PrintStream的父类,以下哪个类可能是FilterOutputStream构造函数的参数类型? ( )
A.OutputStream B.File C.InputStream D.BufferedOutputStream
5. JAVA中,如无特殊声明,小数默认为什么类型( )
A.float B.double C.byte D.long
6. 设 X、 Y为已定义的类名,下列声明X类的对象x1的语句中正确的是( )。
A.static X x1; B.public X x1=new X(int 123);
C.Y x1; D.X x1=x( );
7. 设 i、j、k 为类 x 中定义的 int 型变量名,下列类 X 的构造函数中不正确的是( )。
A.X( int m){ ... }
B.void X( int m){ ... }
C.X( int m, int n){ ... }
D.X( int h,int m,int n){ ... }
8. 以下哪个接口的定义是正确的?( )
A.interface B { void print() { } }
B.abstract interface B { void print() }
C.abstract interface B extends A1,A2 //A1、A2为已定义的接口
{ abstract void print(){ };}
D.interface B { void print();}
9. 如果需要从文件中读取数据,则可以在程序中创建哪一个类的对象( )。
A.FileInputStream C.DataOutputStream
B.FileOutputStream D.FileWriter
10. 下列关于Thread类提供的线程控制方法的说法中,错误的一项是( )。
A.在线程A中执行线程B的join()方法,则线程A等待直到B执行完成
B.线程A通过调用interrupt()方法来中断其阻塞状态
C.若线程A调用方法isAlive()返回值为true,则说明A正在执行中
D.currentThread()方法返回当前线程的引用
三、程序填空题(本大题共10个空,每空2分,总计20分)
1.
/**
* 往文件中依次写入3名员工的信息,
* 每位员工有工龄和姓名两个字段 然后按照
* 第二名,第一名,第三名的先后顺序读取员工信息
*/
import java.io.File;
import java.io.RandomAccessFile;
public class RandomAccessFileTest {
public static void main(String[] args) throws Exception {
Employee employee1 = new Employee(5, "张三");
Employee employee2 = new Employee(6, "lisi");
Employee employee3 = new Employee(7, "James");
File file = new File("employee.txt");
if(!file.exists()){
(1) //如果文件不存在,则新建文件
}
//设置文件的打开方式为读写
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
randomAccessFile.writeChars(employee1.getName());
//写出第一个员工的姓名
randomAccessFile.writeInt(employee1.getWork_age());
//写出第一个员工的工龄
randomAccessFile.writeChars(employee2.getName());
randomAccessFile.writeInt(employee2.getWork_age());
randomAccessFile.writeChars(employee3.getName());
randomAccessFile.writeInt(employee3.getWork_age());
randomAccessFile.close();//关闭文件
RandomAccessFile raf2 = (2)
//以只读方式打开文件
(3)
//跳过第一个员工
String strName2 = "";
for(int i=0;i<Employee.LEN;i++){
strName2 = strName2 + raf2.readChar();//一次一个字符读取员工姓名
}
int age2 = raf2.readInt();
System.out.println("strName2 = " + strName2.substring(0,strName2.indexOf('$')));
System.out.println("work_age2 = " + age2);
(4) //跳转回第一个员工信息
String strName1 = "";
for(int i=0;i<Employee.LEN;i++){
strName1 = strName1 + raf2.readChar();
}
int age1 = raf2.readInt();
System.out.println("strName1 = " + strName1.substring(0,strName1.indexOf('$')));
System.out.println("work_age1 = " + age1);
//读取第三个员工信息
(5)
String strName3 = "";
for(int i=0;i<Employee.LEN;i++){
strName3 = strName3 + raf2.readChar();
}
int age3 = raf2.readInt();
System.out.println("strName3 = " + strName3.substring(0,strName3.indexOf('$')));
System.out.println("work_age3 = " + age3);
}
}
/** 定义一个员工信息类,其中work_age为int占4个字节,
** name固定为8个字符,即为16个字节,当姓名不够8个字符时,用$来占位
*/
class Employee {
public int work_age; //工龄
public String name;//姓名
public static final int LEN = 8;//姓名的长度
public Employee(int work_age, String name) {
this.work_age = work_age;
//对name字符长度的一个处理
if(name.length() > LEN){
name = name.substring(0, LEN);
}else{
while(name.length() < LEN){
name = name + "$";
}
}
this.name = name;
}
public int getWork_age() {
return work_age;
}
public String getName() {
return name;
}
}
2.
//打印1000之内的完数(一个数如果恰好等于除它本身外的因子之和,这个数就称为完数//例如6=1+2+3,6的因子是1,2,3)。
public class Wanshu{
public static void main (String args[ ]){
int sum,i,j;
for(i=1;i<=1000;i++){
for(j=1,sum=0;j<=i/2;j++){
(6) {
sum=sum+j;
}
}
if (7) {
System.out.printf("%8d是一个完数%n",i);
}
}
}
}
3.//线程A等待线程B的执行
public class Dengdai{
public static void main(String args[ ]){
KThread a=new KThread ();
a.threadA.start();
}
}
class KThread implements Runnable{
Thread threadA,threadB;
String content[ ]={"今天晚上,","六点钟开始","在201实验室,","全班同学","上java实验!"};
KThread(){
(8)
(9)
threadB.setName("老师");
}
public void run(){
if(Thread.currentThread()==threadA){
System.out.println("我等"+threadB.getName()+"讲完我在提问!");
threadB.start();
while(threadB.isAlive()==false){}
try{ (10) //线程threadA开始等待threadB结束
}
catch(InterruptedException e){}
System.out.printf("\n老师:\"这个问题该怎么解决,谢谢老师\"");
}
else if(Thread.currentThread()==threadB){
System.out.println(threadB.getName()+"说:");
for(int i=0;i<content.length;i++){
System.out.print(content[i]) ;
try { threadB.sleep(1000);
}
catch(InterruptedException e){}
}
}
}
四、写出下列各程序段的运行结果(本大题4小题,每小题5分,总计20分)
1.
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();
}
}
2.
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.
abstract class Shape {
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();
(new Rectangle()).display();
(new Triangle()).display();
}
}
4.
class change{
void changeint(int x){
x++;
} public static void main(String args[]){
int a=2;
System.out.println("Before changed:"+"a="+a);
change cxz=new change();
cxz.changeint(a);
System.out.println("After changed:"+"a="+a);
}
}
五、程序设计(本大题3小题,第一题13分,第二题9分,第三题8分,总计30分)
1. 编写一个圆类Circle,该类拥有:
①一个成员变量
Radius(私有,浮点型); // 存放圆的半径;
②两个构造方法
Circle( ) // 将半径设为0
Circle(double r ) //创建Circle对象时将半径初始化为r
③ 三个成员方法
double getArea( ) //获取圆的面积
double getPerimeter( ) //获取圆的周长
void show( ) //将圆的半径、周长、面积输出到屏幕
(2)编写一个圆柱体类Cylinder,它继承于上面的Circle类。还拥有:
①一个成员变量
double hight(私有,浮点型); // 圆柱体的高;
②构造方法
Cylinder (double r, double h ) //创建Circle对象时将半径初始化为r
③ 成员方法
double getVolume( ) //获取圆柱体的体积
void showVolume( ) //将圆柱体的体积输出到屏幕
编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。(13分)
2. 编写一个Java程序将当100,101,102,103,104,105个数以数组的形式写入到Dest.txt文件中,并以相反的顺序读出显示在屏幕上。(9分)
3. 任取一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 (8分)
答案:
考试科目:面向对象程序设计Java考试时间:100分钟 试卷总分100分
考试班级:软件14-1~10班
一、判断题(本大题共20小题,每小题2分,总计20分)
1. × 2. √ 3. × 4. √ 5. √ 6. × 7. × 8. × 9. × 10. √
二、单项选择题(本大题共10小题,每小题2分,总计10分)
1.C 2.D 3.C 4.A 5.B 6.A 7.B 8.D 9.A 10.D
三、程序填空题(本大题共10小题,每题2分,总计20分)
1、file.createNewFile();
2、new RandomAccessFile(file, "r");
3、raf2.skipBytes(Employee.LEN*2 + 4);
- raf2.seek(0);
- raf2.skipBytes(Employee.LEN*2 + 4);
- if(i%j==0)
- (sum==i)
- threadA=new Thread(this);
- threadB=new Thread(this);
10、threadB.join();
四、写出下列各程序段的运行结果(本大题4小题,每小题5分,总计20分)
1、south
east to west
2、 5 6 7 8 9
3、 Circle
Rectangle
Triangle
4、Before changed: a= 2
After changed: a= 2
五、程序设计(本大题3小题,每小题10分,总计30分)
1.
class Circle { //定义父类--园类
private double radius; //成员变量--园半径
Circle() { //构造方法
radius=0.0;
}
Circle(double r) { //构造方法
radius=r;
}
double getPerimeter() { //成员方法--求园周长
return 2*Math.PI*radius;
}
double getArea() { //成员方法--求园面积
return Math.PI*radius*radius;
}
void disp() { //成员方法--显示园半径、周长、面积
System.out.println("园半径="+radius);
System.out.println("园周长="+getPerimeter());
System.out.println("园面积="+getArea());
}
}
class Cylinder extends Circle { //定义子类--圆柱类
private double hight; //成员变量--园柱高
Cylinder(double r,double h) { //构造方法
super(r);
hight=h;
}
public double getVol() { //成员方法--求园柱体积
return getArea()*hight;
}
public void dispVol() { //成员方法--显示园柱体积
System.out.println("圆柱体积="+getVol());
}
}
public class TestCylinder { //定义主类
public static void main(String[] args) { //主程入口
Circle Ci=new Circle(10.0); // 生成园类实例
Ci.disp(); // 调用园类的方法
Cylinder Cyl=new Cylinder(5.0,10.0); //生成圆柱类实例
Cyl.disp(); //调用父类方法
Cyl.dispVol(); //调用子类方法
}
}
2.
import java.io.*;
public class IODemo {
public static void main( String args[] ) {
int data[] = {100,101,102,103,104,105};
int t;
try
{ DataOutputStream out = new DataOutputStream (new FileOutputStream(“dest.txt”));
for(int i=0;i<data.length;i++)
out.WriteInt(data[i]);
out.close();
DataInputStream in = new DataInputStream (new FileInputStream(“dest.txt”));
for(int i= data.length-1;i>= 0;i--) {
t=in.readInt(data[i]);
System.out.print(“ ”+t);
}
System.out.println( );
in.close();
}catch(IOException e)
{ System.out.println(e.getMessage());}
}
}
3.
import java.util.*;
public class lianxi25 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int a;
do{
System.out.print("请输入一个5位正整数:");
a = s.nextInt();
}while(a<10000||a>99999);
String ss =String.valueOf(a);
char[] ch = ss.toCharArray();
if(ch[0]==ch[4]&&ch[1]==ch[3]){
System.out.println("这是一个回文数");}
else {System.out.println("这不是一个回文数");}
}
}