当前位置:网站首页 > Java基础 > 正文

java基础多态选择题



一、单项选择题(在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在题后的括号内。本题共20小题,每小题1分,共20分)

1.下面说法正确的是:(      )

  A. 如果源代码中有package语句,则该语句必须放在代码的第一行(不考虑注释和空格);

  B. 如果源代码中有import语句,则该语句必须放在在代码的第一行(不考虑注释和空格);

  C. 如果源代码中有main()方法,则该方法必须被放在代码的第一行 ;

  D. 如果某文件的源代码中定义了一个public的接口,接口名和文件名应该不同。

2.下列有关继承的说法。正确的是:(       )

  A. 子类能继承父类的所有方法和属性;

  B. 子类能继承父类的非私有方法和属性 

  C. 子类只能继承父类public方法和属性

  D. 子类能继承父类的方法,而不是属性。

3.下列代码的运行结果是(     )。              

    String test = "This is a test";

    String[] tokens = test.split("\s");

    System.out.println(tokens.length);

A. 0   B. 1        C. 3            D. 4

4. Java语言中, 通常把可能发生异常的方法调用语句放到________、________块中,分别用来捕获和处理异常。(    )

A. try,finally;   B. catch,try;    C. try,catch      D. finally,try

5.下面哪个表达式可用得到x和y的最大值?(       ) 

  A. x>y?y:x    B. x<y?y:x  C. x>y?(x+y):(x-y)  D. x==y?y:x;  

6. 用于定义类成员的访问控制权的一组关键字是(   )。  

   A. class, float, double, public  

   B. float, boolean, int, long  

   C. char, extends, float, double  

   D. public, private, protected

7. 不能构成循环的语句是(    )。  

   A.for语句       B.while语句     C.switch语句   D.do__while语句 

8. 关于Java语言叙述错误的是:(     )。
   A.Java语言具有跨平台性
   B.Java是一种面向对象的语言
   C.Java语言中的类可以多继承
   D.Java的垃圾收集机制自动回收程序已不再使用的对象

9.下列选项中,用于在定义子类时声明父类名的关键字是(     )。  

   A. interface      B. package       C. extends       D. class

10.下面语句执行后,i的值是(     )。  

    for( int i=0, j=1; j < 5; j+=3 ) i=i+j;  

   A. 4              B. 5          C. 6             D. 7 

11.给出以下代码,请问该程序的运行结果是什么?(     )            

class Example {

    public static void main(String args[]){

        String s = new String( "Computer" );

        if( s == "Computer" )

            System.out.println( "Equal A" );

        if( s.equals( "Computer" ) )

            System.out.println( "Equal B" );

        }

}

A. 代码编译失败

B. 打印输出空白行

C. 打印输出:Equal A

D. 打印输出:Equal B

E. 打印输出:Equal A和Equal B

12.如果希望某个变量只可以被类本身访问和调用,则应该使用下列哪一种访问控制修饰(     )。

    A. private      B. protected     C. private  protected       D. public

13.有如下程序段:

     int total = 0;

     for ( int i = 0; i < 4; i++ ){

         if ( i == 1) continue;

         if ( i == 2) break;                      

         total += i;

     }

    则执行完该程序段后total的值为:(       )。

     A. 0           B. 1               C. 3                   D. 6

14.关于下列代码书法正确的是 (     )   。                

    public class A{

        public void doit(){}

        public String doit(){

             return "a";

        }

        public double doit(int x){

             return 1.0;

        }

    }

A. 无编译错误

B. 代码public void doit(){}行和public String doit(){}行,出现编译错误

C. 代码public double doit(int x){}行,出现编译错误

D. 代码return "a";行处 出现编译错误

15. 下列哪个语句可以获取文件“file.txt”的父目录名称?(      )   

A. String name = File.getParentName("file.txt");

B. String name = (new File("file.txt")).getParent();

C. String name = (new File("file.txt")).getParentName();

D. String name = (new File("file.txt")).getParentFile();

16. 下列属于容器的组件是(   )。

A. JButton    B.  JPane    C. JLabel     D. JTextArea

17. 在复选框中移动鼠标,然后单击一选项,要捕获所选项必须实现哪个接口(    )。

A.ActionListener  B.MouseListener  C.MouseMotionListener  D.ItemListener

18. 给出以下代码,该程序的运行结果是什么? (   )

public class Example{

    final int x=0;

    Example(){

        x=1;

    }

    final int aMethod(){

        return x;

    }

}

A. 代码编译错误,因为非 final 类中存在 final 方法。

B. 代码编译成功。

C. 代码编译错误,因为final修饰符只能修饰方法不能修饰变量,因此语句final lint x=0错误。

D. 代码编译错误,如果去掉变量 x 前的 final 修饰符,可使代码编译通过。

19. 请问,以下哪些修饰符用于修饰变量,可使该变量属于类而不属于类实例?请选择一个正确答案。(       )

A. static      B.  final        C. abstract       D. transient

20. 给出以下代码,请问插入以下哪些语句可以满足对插入语句的要求?(      )

public class T{

    int r;

    int s;

    T(int x,int y){

        r=x;

        s=y;

    }

}

class S extends T{

    int t;

    public S(int x,int y,int z){

        //插入代码处:要求插入代码实现 r=x,s=y

        t=z;

    }

}

A.T(x,y);  B.this(x,y);  C.super(x,y);  D. super(x,y,z);  E.以上均不对

 

二、填空题(本题共15小题,每题1分,共15分)

1.Java程序中的单行注释符是____。

2.System.out prinln(4/3)的输出结果为____,System.out prinln(4%3)的输出结果为____。

3.数组x定义如下
   int x[ ][ ]=new int[3][2]
   则 x.length的值为____,x[0].length的值为____。

4. Java输入/输出流从流的内容划分为:____和____。

5.  实现接口要使用关键字____。

6. Java中所有类都是类____的子类

7. 完成代码计算10的阶乘并输出,把下面代码补全:

    int result = 1;

    for(int i = 2; i <= 10; i++){

           ________________

    }

    System.out.println(“result=”+ result);

8. 方法重载的条件中,参数只要满足____、____、____ 中的任何一点即可。

9. String类和StringBuffer类都被定义为____,不能有子类。

10. 下面程序的运行结果是:____ 。

    String str1="hello";

    String str2="he" + new String("llo");

    System.out.println(str1 == str2);

 

三、简答题(本题共5小题,每题6分,共30分)

1. 方法重写(0veriding) 和方法重载(Overloading) 的区别?方法重载能改变返回值类型吗?

 

2.面向对象三大特性是什么?各有什么用处,说说你的理解。

 

3.何为抽象类、抽象方法?

4.Java静态变量(类变量)和实例变量的区别?

 

5.解释守护线程?它的作用?

四、程序阅读题(本题共2小题,每空1分,共10分)

1.写出下列程序的运行结果

class ObjectTool<T>

       {

           private ____  obj;

        

           public void setObj(___ obj) {

               this.obj = obj;

           }

           public T getObj() {

               return  obj;

           }

       }

public class exa1 {

        public static void main(String[] args) {

               ObjectTool<______> obj = new ObjectTool<>();

               obj.setObj("Hello World!");

               System.out.println(obj.getObj());

           }

}

程序运行结果是:                                  

2.请阅读程序并补全程序

已知数据库mydatabase中的表student如下,其中id为整型,name、sex为字符串型

id    name    sex

    陈雪    女

    王峰    男

    刘菲雨    女

数据库用户名为abcd,密码为pd,程序从数据库中读取所有记录并且输出。

 public class test{

     public static void main(String args[]){

           try{

                  class.forName(“com.mysql.jdbc.Driver”);

                  Connection con=DriverManager.getConnection(

”jdbc:mysql://localhost:3306/mydatabase”, ____, ______);

                 Statement s=con.createStament();

                 ResultSet result=____________________________________________;

                 while(result.next()){

                    System.out.println(____________________________________________);

                    System.out.println(____________________________________________);

                    System.out.println(____________________________________________); }

                 s.close();

                con.close();

} catch(Exception e)

    { System.out.println(e);}

}//end of main

}//end of class test      

请填上空缺的语句。

 

 

五、编程题(本题共2小题,第1小题10分,第2小题15分,共25分)

1. 定义一个员工类employee,具有属性id(String),属性姓名name(String)、年龄age (int)和薪水salary(float),函数成员包括:构造函数,设置/读取id函数setId和getId,设置/读取姓名函数setName和getName,设置/读取年龄函数setAge和getAge,设置/读取薪水函数setSalary和getSalary,输出员工基本信息的函数print。在主函数中首先创建任一员工对象emp1,最后输出emp1的基本信息。

2. 利用接口做参数,写个计算器,能完成加减乘除运算。 

(1)定义一个接口Compute含有一个方法int computer(int n, int m)。 

(2)设计四个类分别实现此接口,完成加减乘除运算。 

(3)设计一个类UseCompute,类中含有方法:public void useCom(Compute com, int one, int two),此方法能够用传递过来的对象调用computer方法完成运算,并输出运算的结果。 

(4)设计一个主类Test,调用UseCompute中的方法useCom来完成加减乘除运算。 

 

答案

 

 

一、单项选择题(在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在题后的括号内。本题共20小题,每小题1分,共20分)

1.A 2. B 3. D  4.C 5.B

6. D 7.C 8.C 9.C 10.B

11.D 12.A 13.A 14.B 15.D

16.B 17.D 18.D 19.A 20.C

二、填空题(本题共15小题,每题1分,共15分)

1. //

2.1,1

3.3, 2

4.  面向字符的流,面向字节的流

5. implement

6. java.lang.Object

7. result *= i  或  result = result * i

8. 顺序不同、个数不同、类型不同

9.最终类

10. false

 

三、简答题(本题共5小题,每题6分,共30分)

1. 方法重写(0veriding) 和方法重载(Overloading) 的区别?方法重载能改变返回值类型吗?

方法重写

子类通过重写可以隐藏自己继承的方法,即如果子类可以继承父类的某个方法,那么子类就有权利重写这个方法,重写时,方法的返回值和形参都不能改变,就是外壳不能变, 里面的核心代码重写,即重写的这个方法的名字、参数个数、参数的类型要和父类的方法完全相同。子类这样定义的方法称作子类重写的方法。

重写的目的就是可以隐藏从父类继承的方法,子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为,如果非要用父类的方法可以使用关键字super。

重写的注意事项:

1、参数列表必须完全与被重写的方法完全相同。

2、返回类型也必须要和被重写的方法完全相同。

3、访问权限不能比父类中被重写方法的访问权限低,

4、声明为final的方法不能被重写,

5、声明为static的方法也不能被重写,但是可以被再次声明。

6、如果子类和父类是在同一个包,那么子类可以重写父类的所有的方法,

7、如果子类和父类不在同一个包,那么子类只能重写父类的声明为public和protected的方法

8、构造方法也不能被重写。

方法的重载的意思是:一个类中可以有很多个方法具有相同的名字,但这些方法的参数必须不同,返回类型可以相同也可以不同。

方法的返回类型和参数的名字不参与比较,也就是说,如果两个方法的名字相同,即使返回类型不同,也必须保证参数不同,不然就不是方法重载。

参数不同包括:

1、参数的个数不同

2、参数的个数相同,但是参数列表中对应的某个参数的类型不同

方法重载(overload)和方法重写(overriding)是java中的两种多态,重写是父类和子类之间的一种多态的表现,而重载是一个类的多态表现。

方法重载能改变返回值类型。

 

2.面向对象三大特性是什么?各有什么用处,说说你的理解。

三个基本特征:封装,继承,多态;

封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏,这就是封装。封装是面向对象的特征之一,是对象和类概念的主要特性。简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。

继承:继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;

多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。多态性增强了软件的灵活性和扩展性。

 

3.何为抽象类、抽象方法?

 

抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract。 在抽象类中的成员方法可以包括一般方法和抽象方法。

    抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract。 抽象类中不一定包含抽象方法,但是包含抽象方法的类一定是抽象类。

 

4.Java静态变量(类变量)和实例变量的区别?

静态变量也叫做类变量,独立于方法之外的变量,有static修饰。实例变量同样也是独立于方法之外的变量,但没有static修饰。

实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。

静态变量不属于某个实例对象,而是属于整个类。只要程序加载了类的字节码,不用创建任何实例对象,静态变量就回被分配空间,静态变量就可以被使用了。

实例变量必须创建对象后,才可以通过这个对象来使用;静态变量则可以直接使用类名来引用(如果实例对象存在,也可以通过实例对象来引用)。

 

5.解释守护线程?它的作用?

守护线程是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。在 Java 中垃圾回收线程就是特殊的守护线程。

当JVM中没有任何User线程时(非守护线程),JVM则关闭。

 

 

四、程序阅读题(本题共2小题,每空1分,共10分) 

1.程序的运行结果是:  (每空1分)

T, T, String,Hello World!

 

2.程序的运行结果是:

答:   “abcd” (1分) , “pd” (1分)

s.executeQuery(“select * from student”);  (1分)

        result.getInt(“id”);  (1分)                 或 result.getInt(1)

        result.getString(“name”);  (1分)        或result.getString(2)

        result.getString(“name”); (1分)          或result.getString(3)

(后三个空顺序不一样也算对)

五、编程题(本题共2小题,第1小题10分,第2小题15分,共25分)

1. 定义一个员工类employee,具有属性id(String),姓名name(String)、年龄age (int)和薪水salary(float),函数成员包括:构造函数,设置/读取id函数setId和getId,设置/读取姓名函数setName和getName,设置/读取年龄函数setAge和getAge,设置/读取薪水函数setSalary和getSalary,输出员工基本信息的函数print。在主函数中首先创建任一员工对象emp1,最后输出emp1的基本信息。

class Employee {

         public String id;

         public String name;

         public int age;

         public float salary;

         public Employee(String id, String name, int age,float salary) {

                  this.id = id;

                  this.name = name;

                  this.age = age;

                  this.salary = salary;

         }

         public Employee(String id) {

                  this.id = id;

         }

         public String getId() {

                  return id;

         }

         public void setId(String id) {

                  this.id = id;

         }

         public String getName() {

                  return name;

         }

         public void setName(String name) {

                  this.name = name;

         }

         public int getAge() {

                  return age;

         }

         public void setAge(int age) {

                  this.age = age;

         }

         public void print(){

        System.out.println("id=" + id + ", 姓名name=" + name + ", 年龄age=" + age  + ", 薪水salary=" + salary);

    }

         public float getSalary() {

                  return salary;

         }

         public void setSalary(float salary) {

                  this.salary = salary;

         }

public class EmployeeTest {

         public static void main(String[] args) {

                  Employee emp1=new Employee("1234", "张三", 12,5600);

                  emp1.print();

         }

}

2. 利用接口做参数,写个计算器,能完成加减乘除运算。 

(1)定义一个接口Compute含有一个方法int computer(int n, int m)。 

(2)设计四个类分别实现此接口,完成加减乘除运算。 

(3)设计一个类UseCompute,类中含有方法:public void useCom(Compute com, int one, int two),此方法能够用传递过来的对象调用computer方法完成运算,并输出运算的结果。 

(4)设计一个主类Test,调用UseCompute中的方法useCom来完成加减乘除运算。

 

interface ICompute{

         int computer(int a,int b);

}

//四个类实现接口

class Add implements ICompute{

         public int computer(int a,int b){

                  return a+b;

         }

}

class Minus implements ICompute{

         public int computer(int a,int b){

                  return a-b;

         }

}

class Multiply implements ICompute{

         public int computer(int a,int b){

                  return a*b;

         }

}

class Divide implements ICompute{

         public int computer(int a,int b){

                  return a/b;

         }

}

class UseComputer{

         public void useCom(ICompute com,int one,int two){

                  System.out.println(com.computer(one,two));

         }

}

public class interfaceTest4{

         public static void main(String[] args) {

                  UseComputer user = new UseComputer();

                  Add s1= new Add();

                  System.out.print("和为:");

                  user.useCom(s1,12,4);

                  Minus s2= new Minus();

                  System.out.print("差为:");

                  user.useCom(s2,12,4);

                  Multiply s3 = new Multiply();

                  System.out.print("乘积为:");

                  user.useCom(s3,12,4);

                  Divide s4 = new Divide();

                  System.out.print("商为:");

                  user.useCom(s4,12,4);

         }

版权声明


相关文章:

  • java教学零基础2024-11-12 18:42:01
  • 达内java基础课程表2024-11-12 18:42:01
  • 判断 基础类型 java2024-11-12 18:42:01
  • java银行面经基础2024-11-12 18:42:01
  • 兄弟连java基础视频2024-11-12 18:42:01
  • 后端基础面试题初级java2024-11-12 18:42:01
  • 成都零基础学java2024-11-12 18:42:01
  • Java八大基础2024-11-12 18:42:01
  • JAVA基础之形参与实参的区别2024-11-12 18:42:01
  • java 基础数据操作2024-11-12 18:42:01