JAVA经典试卷(理工)(2)

一、判断题(本大题共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+36的因子是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);

  1. raf2.seek(0);
  2. raf2.skipBytes(Employee.LEN*2 + 4);
  3. if(i%j==0)
  4. (sum==i)
  5. threadA=new Thread(this);
  6. 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("这不是一个回文数");}
    }
    }

 

猜你喜欢

转载自blog.csdn.net/nanaz11/article/details/81134106