JAVA笔试面试题集锦02

本文深入探讨Java面向对象的基本概念,包括抽象方法、类与对象、继承与多态、接口实现、内存回收机制、反射机制等关键知识点,通过代码示例详细解析面向对象编程在Java中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.2 JAVA面向对象

【题目描述】

Abstract method cannot be static. True or False ?

【选项】

         A. True

B. False

【正确答案】        A

【解释】

抽象方法可以在子类中被重写,但是静态方法不能在子类中被重写,静态方法和静态属性与对象是无关的,只与类有关,这与abstract 是矛盾的,所以abstract 是不能被修饰为 static,否则就失去了abstract的意义了。

 

【题目描述】

               What will be the output when you compile and execute the following program.

class Base

{

   void test() {

     System.out.println("Base.test()");

   }

}

public class Child extends Base {

   void test() { System.out.println("Child.test()");}

   static public void main(String[] a) {

      Child anObj = new Child();

      Base baseObj = (Base)anObj;

      baseObj.test();

   }

}

Select most appropriate answer.

【选项】

A. Child.test()  Base.test()

B. Base.test()  Child.test()

C. Base.test()

D. Child.test()

【正确答案】        D

【解释】

         测试代码相当于:Base baseObj = new Child();父类的引用指向子类的实例,子类又重写了父类 的 test 方法,因此调用子类的 test 方法。

 

【题目描述】

What will be the output when you compile and execute the following program.

class Base{

   static void test() { System.out.println("Base.test()"); }

}

 

public class Child extends Base {

   void test() {

       System.out.println("Child.test()");

       Base.test(); //Call the parent method

  }

  static public void main(String[] a) {

     new Child().test();

  }

}

Select most appropriate answer.

【选项】

A. Child.test()  Base.test()

B. Child.test()  Child.test()

C. Compilation error. Cannot override a static method by an instance method

D. Runtime error. Cannot override a static method by an instance method

【正确答案】        C

【解释】

静态方法不能在子类中被重写。

 

【题目描述】

关于以下 application 的说明,正确的是(      ):

1.    class StaticStuff

2.    {               

3.            static        int    x=10;

4.            static        { x+=5;}

5.            public       static        void main(String   args[ ])

6.            {      

7.           System.out.println(“x=” + x);

8.            }

9.            static        { x/=3;}

10.     }      

【选项】

A.  4 行与 9 行不能通过编译,因为缺少方法名和返回类型

B.  9 行不能通过编译,因为只能有一个静态初始化器

C.  编译通过,执行结果为:x=5

D. 编译通过,执行结果为:x=3

【正确答案】        C

【解释】

自由块是类加载的时候就会被执行到的,自由块的执行顺序是按照在类中出现的先后顺序执行。

 

【题目描述】

关于以下程序代码的说明正确的是(        ):

1.class  HasStatic{

2.  private     static        int    x=100;

3.  public       static        void main(String      args[ ]){

4.           HasStatic hs1=new HasStatic(        );

5.           hs1.x++; 

6.           HasStatic hs2=new HasStatic(        );

7.           hs2.x++; 

8.           hs1=new HasStatic(        );

9.           hs1.x++; 

10.         HasStatic.x--;  

11.         System.out.println(“x=”+x);

12.         }

13.}

【选项】

A. 5 行不能通过编译,因为引用了私有静态变量

B. 10 行不能通过编译,因为 x 是私有静态变量

C. 程序通过编译,输出结果为:x=103

D. 程序通过编译,输出结果为:x=102

【正确答案】        D

【解释】

静态变量是所有对象所共享的,所以上述代码中的几个对象操作是同一静态变量 x, 静态变量可以通过类名调用。

 

【题目描述】

下列哪种说法是正确的()

【选项】

A.实例方法可直接调用超类的实例方法

B.实例方法可直接调用超类的类方法

C.实例方法可直接调用其他类的实例方法

D.实例方法可直接调用本类的类方法

【正确答案】        D

【解释】

A. 实例方法不可直接调用超类的私有实例方法

B. 实例方法不可直接调用超类的私有的类方法

C.要看访问权限

 

【题目描述】

         下列哪一种叙述是正确的( )

【选项】

A. abstract 修饰符可修饰字段、方法和类

B. 抽象方法的 body 部分必须用一对大括号{ }包住

C. 声明抽象方法,大括号可有可无

D. 声明抽象方法不可写出大括号

【正确答案】        D

【解释】

abstract 可以修饰方法和类,不能修饰属性。抽象方法没有方法体,即没有大括号{}

 

【题目描述】

以下关于面向对象概念的描述中,不正确的一项是()。

【选项】

A.在现实生活中,对象是指客观世界的实体

B.程序中的对象就是现实生活中的对象

C.在程序中,对象是通过一种抽象数据类型来描述的,这种抽象数据类型称为类(class)

D.在程序中,对象是一组变量和相关方法的集合

【正确答案】        B

 

【题目描述】

栈是一种(     )

【选项】

A. 存取受限的线性结构

B. 存取不受限的线性结构

C. 存取受限的非线性结构

D. 存取不受限的非线性结构

【正确答案】        A

【解释】

栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表。

 

【题目描述】

下列哪些语句关于内存回收的说明是正确的。

【选项】

A. 程序员必须创建一个线程来释放内存

B. 内存回收程序负责释放无用内存

C. 内存回收程序允许程序员直接释放内存

D. 内存回收程序可以在指定的时间释放内存对象

【正确答案】        B

【解释】

垃圾收集器在一个 Java 程序中的执行是自动的,不能强制执行,即使程序员能明确地判断出有一块内存已经无用了,是应该回收的,程序员也不能强制垃圾收集器回收该内存块。程序员唯一能做的就是通过调用 System. gc 方法来"建议"执行垃圾收集器,但其是否可以执行,什么时候执行却都是不可知的。

 

【题目描述】

Which method must be defined by a class implementing the java.lang.Runnable interface?

【选项】

A. void run()

B. public void run()

C. public void start()

D. void run(int priority)

E. public void run(int priority)

F. public void start(int priority)

【正确答案】        B

【解释】

实现 Runnable 接口,接口中有一个抽象方法 run,实现类中实现该方法。

 

【题目描述】

Given:

public static void main(String[] args) {

  Object obj = new Object() {

    public int hashCode() {

    return 42;

    }

   }; System.out.println(obj.hashCode());

}

What is the result?

【选项】

A. 42

B. An exception is thrown at runtime.

C. Compilation fails because of an error on line 12.

D. Compilation fails because of an error on line 16.

E. Compilation fails because of an error on line 17.

【正确答案】        A

【解释】

匿名内部类覆盖 hashCode 方法。

 

【题目描述】

Exhibit:

1.package foo;

2.import java.util.Vector;

3.private class MyVector extends Vector {

4.   int i = 1;

5.   public MyVector()   {

6.            i = 2;

7. }

8.}

9.public class MyNewVector extends MyVector {

10. public MyNewVector ()   {

11.                 i = 4;

12. }

13. public static void main (String args [])    {

14.          MyVector v = new MyNewVector();

15.         }

16.}

The file MyNewVector.java is shown in the exhibit.       What is the result?

【选项】

A. Compilation will succeed.

B. Compilation will fail at line 3.

C. Compilation will fail at line 6.

D. Compilation will fail at line 9. E. Compilation will fail at line 14.

【正确答案】        B

【解释】

类 MyVector 不能是私有的

 

【题目描述】

在下面程序的第 6 行补充上下列哪个方法,会导致在编译过程中发生错误?

1)       class Super{

2)                public float getNum(){

3)                         return 3.0f;

4)                }

5)       }

6)       pubhc class Sub extends Super{

7)       }

【选项】

A,public   float getNum(){retun 4.0f;}

B.public   void getNum(){}

C.public void getNum(double d){}

D.public double getNum(float d){ retun 4.0f ;}

【正确答案】        B

【解释】

方法重写的问题。子类中有和父类的方法名相同,但是参数不同,不会出编译错误,认为是子类 的特有的方法,但是如果子类中方法和父类的方法名,参数,访问权限,异常都相同,只有返回值类型不同会编译不通过。

 

【题目描述】

关于实例方法和类方法,以下描述正确的是:(       )

【选项】

A. 实例方法只能访问实例变量

B. 类方法既可以访问类变量,也可以访问实例变量

C. 类方法只能通过类名来调用

D. 实例方法只能通过对象来调用

【正确答案】        D

【解释】

A 实例方法可以访问类变量;B 类方法只能访问类变量;C 类方法可以通过对象调用

 

【题目描述】

               下列关于 interface 的说法正确的是:(       )

【选项】

A. interface 中可以有 private 方法

B. interface 中可以有 final 方法

C. interface 中可以有 function 实现

D. interface 可以继承其他 interface

【正确答案】        D

【解释】

A. 接口中不可以有 private 的方法

B.接口中不可以有 final 的方法 接口中的方法默认是 public abstract 的

C.接口中的方法不可以有实现

 

【题目描述】

已知 A 类被打包在 packageA, B 类被打包在 packageB,且B类被声明为 public,且有一个成员变量 x 被声明为, protected 控制方式  。C 类也位于 packageA 包,且继承了 B 类。则以下说话正确的是(        )

【选项】

A. A 类的实例不能访问到 B 类的实例

B. A 类的实例能够访问到 B 类一个实例的 x 成员

C. C 类的实例可以访问到 B 类一个实例的 x 成员

D. C 类的实例不能访问到 B 类的实例

【正确答案】        C

【解释】

不同包子类的关系, 可以访问到父类 B 的 protected 成员

 

【题目描述】

               以下程序正确的输出是(      )

package test;

public class FatherClass {

public FatherClass() {

         System.out.println("FatherClass Create");

}

}

package test;

import test.FatherClass;

public class ChildClass extends FatherClass {

public ChildClass() {

         System.out.println("ChildClass Create");

}

public static void main(String[] args) {

         FatherClass fc = new FatherClass();

         ChildClass cc = new ChildClass();

}

}

【选项】

A.  FatherClass Create   

      FatherClass Create

      ChildClass Create

B.     FatherClass Create

         ChildClass Create

         FatherClass Create

C.     ChildClass Create

         ChildClass Create

         FatherClass Create

D.    ChildClass Create

         FatherClass Create

         FatherClass Create

【正确答案】        A

【解释】

在子类构造方法的开始默认情况下有一句 super();来调用父类的构造方法

 

 

【题目描述】

从下面四段(A,B,C,D)代码中选择出正确的代码段()

【选项】

A.abstract class Name {

                  private String name;

                  public abstract boolean isStupidName(String name) {}

         }

B.public class Something {

                  void doSomething () {

                          private String s = "";         int l = s.length();

                  }

         }

C.public class Something {

                  public static void main(String[] args) {

                          Other o = new Other();   new Something().addOne(o);

                  }

                  public void addOne(final Other o) {

                          o.i++;

                  }

         }

         class Other {

                  public int i;

         }

D.public class Something { public int addOne(final int x) { return ++x;       }

}

【正确答案】        C

【解释】

A. 抽象方法不能有方法体

B.方法中定义的是局部变量,不能用类成员变量修饰符 private

D.final 修饰为常量,常量的值不能被改变

 

【题目描述】

下面那几个函数是 public void method(){...}的重载函数?()

【选项】

A.public void method( int m){...}

B.public int method(){...}

C.public void method2(){...}

D.public int method(int m,float f ){...}

【正确答案】        A

【解释】

重载:方法名相同,参数列表不同

 

【题目描述】

类 Teacher 和 Student 是类 Person 的子类; Teacher t;

Student s;

// t and s are all non-null.

if (t instanceof Person ){   s=(Student)t; }

最后一条语句的结果是:

【选项】

A.将构造一个 Student 对象;             B.表达式是合法的;

C.表达式是错误的;                            D.编译时正确, 但运行时错误。

【正确答案】        D

【解释】

instanceof 是 Java 的一个二元操作符,它的作用是测试它左边的对象是否是它右边的类的实例,返 回 boolean 类型的数据。Teahcer 和 Student 之间没有继承关系不能做强制类型转换。

 

【题目描述】

    下列关于修饰符混用的说法,错误的是(        ):

【选项】

A. abstract 不能与 final 并列修饰同一个类

B. abstract 类中可以有 private 的成员    

C. abstract 方法必须在 abstract 类中

D. static 方法中能处理非 static 的属性

【正确答案】        D

【解释】

静态方法中不能引用非静态的成员

 

 

【题目描述】

下述代码的执行结果是

class Super {

  public int getLength() {return 4;}

}

public class Sub extends Super {

  public long getLength() {return 5;}

  public static void main (String[]args) {

           Super sooper = new Super ();

           Super       sub = new Sub();

           System.out.printIn(sooper.getLength()+ “,” + sub.getLength() };

  }                        

}                 

【选项】

         A.     4,      4

         B.     4,      5

         C.     5,      4

         D.     5,      5

         E. 代码不能被编译

【正确答案】        E

【解释】

方法重写返回值类型与父类的一致

 

【题目描述】

Which two demonstrate a "has a" relationship(Choose two)?

【选项】

A. public interface Person { }

  public class Employee extends Person{ }

B. public interface Shape { }

  public interface Rectandle extends Shape { }

C. public interface Colorable { }

  public class Shape implements Colorable{ }

D. public class Species{ }

  public class Animal{private Species species;} E. interface Component{ }

  class Container implements Component{

         private Component[] children;

  }

【正确答案】        D

【解释】

“has a”是关联关系,关联分双向关联和单向关联,双向关联是 A,B 类分别持有对方的引用(有是对方 的属性).单向关联是一方持另一方的引用.

 

 

【题目描述】

Given the folowing classes which of the following will compile without error?

interface IFace{}

class CFace implements IFace{}

class Base{}

public class ObRef extends Base{

        public static void main(String argv[]){

        ObRef ob = new ObRef();  Base b = new Base();

        Object o1 = new Object(); IFace o2 = new CFace();

        }

}

【选项】

A.o1=o2;                  B. b=ob;          C. ob=b;           D. o1=b;

【正确答案】        B

【解释】

b 和 ob 对应的类之间没有任何关系,要想 b=ob 成立要么是父子关系,要么是接口实现类的关系

 

 

【题目描述】

关于 java.lang.String 类,以下描述正确的一项是(       )

【选项】

A. String 类是 final 类故不可以继承;

B. String 类是 final 类故可以继承;

C. String 类不是 final 类故不可以继承;

D. String 类不是 final 类故可以继承;

【正确答案】        A

【解释】

String 类是 final 的,在 java 中 final 修饰类的不能被继承

 

【题目描述】

     下面中哪两个可以在 A 的子类中使用:(      )

class A {

   protected int method1 (int a,   int b) {

     return 0;

   }

}

【选项】

A. public int method 1 (int a,  int b) { return 0; }

B. private int method1 (int a,  int b) { return 0; }

C. private int method1 (int a,  long b) { return 0; }

D. public short method1 (int a, int b) { return 0; }

【正确答案】        AC

【解释】       

主要考查子类重写父类的方法的原则; B,子类重写父类的方法,访问权限不能降低;    C,属于重载;D,子类重写父类的方法返回值类型要相同或是父类方法返回值类型的子类。

 

【题目描述】

Given:

public class OuterClass {

       private double d1 = 1.0; 

       //insert code here

}

You need to insert an inner class declaration at line2. Which two inner class declarations are valid? (Choose Two)

【选项】

A.     static class InnerOne { public double methoda() {return d1;} }

B.     static class InnerOne { static double methoda() {return d1;} }

C.     private class InnerOne { public double methoda() {return d1;} }

D.     protected class InnerOne { static double methoda() {return d1;} }

E.     public abstract class InnerOne { public abstract double methoda(); }

【正确答案】        CE

【解释】

AB.内部类可以声明为 static 的,但此时就不能再使用外层封装类的非 static 的成员变量; D.非 static 的内部类中的成员不能声明为 static 的,只有在顶层类或 static 的内部类中 才可声明 static 成员

 

【题目描述】

Which two declarations prevent the overriding of a method? (Choose Two)

【选项】

A. final void methoda()   {}

B. void final methoda() {} C. static void methoda() {}

D. static final void methoda() {}

E. final abstract void methoda() {}

【正确答案】        AD

【解释】

final 修饰方法,在子类中不能被重写。

 

【题目描述】

下列说法错误的有()

【选项】

A. 在类方法中可用 this 来调用本类的类方法

B. 在类方法中调用本类的类方法时可直接调用

C. 在类方法中只能调用本类中的类方法

D. 在类方法中绝对不能调用实例方法

【正确答案】        ACD

【解释】

A.在类方法中不能使用 this 关键字 C.在类方法中可以调用其它类中的类方法 D.在类方法中可以通过实例化对象调用实例方法

 

【题目描述】

给出下面的代码段:( )

public class Base{

         int w, x, y, z;

         public Base(int a, int b)

         {x=a; y=b;}

         public Base(int a, int b, int c, int d){

         //assignment x=a, y=b w=d;z=c;    

}}

在代码说明//assignment x=a, y=b 处写下如下哪几个代码是正确的?()

【选项】

A.Base(a, b);         B.x=a, y=b;          C.x=a; y=b;             D.this(a,b);

【正确答案】        CD

【解释】

C 是直接给 x,y 赋值;D 是使用 this 调用本类中其它的构造方法。

 

【题目描述】

下面关于变量及其范围的陈述哪些是不正确的(    ):

【选项】

A. 实例变量是类的成员变量     

B. 实例变量用关键字 static 声明

C. 在方法中定义的局部变量在该方法被执行时创建

D. 局部变量在使用前必须被初始化

【正确答案】        BC

由 static 修饰的变量称为类变量或是静态变量,法加载的时候创建局部变量。

 

【题目描述】

Given:

1. public interface Foo{

2.      int k = 4;

3. }

Which three are equivalent to line 2? (Choose Three)

【选项】

A.     final int k = 4;

B.     Public int k = 4;

C.     static int k = 4;

D.     Private int k = 4;

E.     Abstract int k = 4;

F.      Volatile int k = 4;

G.     Transient int k = 4;

H.     protected int k = 4;

【正确答案】        BDE

【解释】

static:修饰的静态变量;final 修饰的是常量;abstract 不能修饰变量;

Volatile 修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。 而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻, 两个不同的线程总是看到某个成员变量的同一个值。

Transient:对不需序列化的类的域使用 transient 关键字,以减少序列化的数据量。

int k=4 相当于 public static final int k=4; 在接口中可以不写 static final

 

【题目描述】

         能用来修饰 interface 的有()

【选项】

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

【正确答案】        ACD

【解释】

修饰接口可以是 public 和默认

 

【题目描述】           

执行下列代码后,哪个结论是正确的 String[] s=new String[10];

【选项】

A. s[9] 为 null;  B. s[10] 为 "";   C. s[0] 为 未定义   D. s.length 为 10

【正确答案】        AD

【解释】

s 是引用类型,s 中的每一个成员都是引用类型,即 String 类型,String 类型默认的值为 null s 数组的长度为 10。

 

【题目描述】

Which two create an instance of an array? (Choose Two)

【选项】

A. int[] ia = new int [15];

B. float fa = new float [20];

C. char[] ca = “Some String”;

D. Object oa = new float[20];

E. Int ia [][] = (4, 5, 6) (1, 2, 3)

【正确答案】        AD

【解释】

任何类的父类都是 Object,数组也数据引用类型,Object oa = new float[20];这种写法相当于父类的用指向之类的实例。

 

【题目描述】

谈谈对 ClassLoader 的理解?

【正确答案】       

ClassLoader 加载类用的是全盘负责委托机制。所谓全盘负责,即是当一个 classloader 加载 一个 Class 的时候,这个 Class 所依赖的和引用的所有 Class 也由这个 classloader 负责载入,除非 是显式的使用另外一个 classloader 载入;委托机制则是先让 parent(父)类加载器 (而不是 super, 它与 parent classloader 类不是继承关系)寻找,只有在 parent 找不到的时候才从自己的类路径中 去寻找。此外类加载还采用了 cache 机制,也就是如果 cache 中保存了这个 Class 就直接返回它,如 果没有才从文件中读取和转换成 Class,并存入 cache,这就是为什么我们修改了 Class 但是必须重 新启动 JVM 才能生效的原因。

 

 

【题目描述】

构造器 Constructor 是否可以被继承?是否可以被 Override?

【正确答案】       

构造器 Constructor 不能被继承,因此不能重写 Overriding,但可以被重载 Overloading。

 

【题目描述】

面向对象的特征有哪些方面?

【正确答案】

面向对象的特征主要有以下几个方面:

1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继 承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

3)封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

4)多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

 

 

【题目描述】

接口是否可继承接口? 抽象类是否可实现接口? 抽象类是否可继承实体类?

【正确答案】       

接口是可以继承接口的并且可以继承多个其它接口;抽象类可以实现接口中的方法;抽象类可以继承实体类。

 

【题目描述】

nonymous Inner Class (匿名内部类) 是否可以 extends(继承)其它类,是否可以 implements(实现)interface(接口)?

【正确答案】       

匿名内部类是可以继承其它类,同样也可以去实现接口的,用法为:

JButton button = new JButton();

button.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e){//some mothod...}

});

这样的用法在 swing 编程中是经常使用的,就是因为它需要用到注册监听器机制,而该监听类如果只服务于一个组件,那么,将该类设置成内部类/匿名类是最方便的。

 

【题目描述】

一个 subclass 怎样调用 superclass 中的方法(myMethod)和构造函数?

【正确答案】       

用 super 关键字,子类去调用父类的方法,如:super.myMethod();子类去调用父类的构造函数, 如:super();。

 

【题目描述】

abstract class 和 interface 有什么区别?

【正确答案】       

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现 某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建 abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口(interface)是抽象类的变体。新型多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,所有成员变量都是 public static final 的。一个类可以实现多个接口,当类实现接口时,必须实现接口的所有方法。抽象类在 Java 语言中表示的是一种单继承的关系,对于 interface 来说则不然,并不要求 interface 的实现者和 interface 定义在概念本质上是一致的,仅仅是实现了 interface 定义的契约而已。;抽象类中可以定义自己的成员变量,也可以包含非抽象的方法,而在接 口中只能有静态的常量,所有方法必须是抽象的;实现抽象类时可以只实现其中的部分方法,而要是 实现一个接口的话就必须实现这个接口中的所有抽象方法。

 

【题目描述】

类有哪三个基本特性?各特性的优点?

【正确答案】       

类具有封装性、继承性和多态性。 封装性:类的封装性为类的成员提供公有、缺省、保护和私有等多级访问权限,目的是隐藏类中的私 有变量和类中方法的实现细节。 继承性:类的继承性提供从已存在的类创建新类的机制,继承(inheritance)使一个新类自动拥有 被继承类(父类)的全部可继承的成员。 多态性:类的多态性提供类中方法执行的多样性,多态性有两种表现形式:重载和覆盖。

 

【题目描述】

java 语言中 public、private、protected 三个关键字的用法,重写和重载的区别。

【正确答案】       

作用域

public

×

×

×

重写:发生在父子类之间,方法名相同,参数的类型、个数、顺序相同,返回值相同,访问权限不能 更封闭,抛出异常不能宽泛; 重载:发生在同一个类中,方法名相同,但是参数不同(类型不同或个数不同或参数的顺序不同), 返回值可以不相同。

 

 

【题目描述】

Java 反射机制的作用? Java 反射机制的作用是:

【正确答案】       

1)在运行时判断任意一个对象所属的类。

2)在运行时构造任意一个类的对象。

3)在运行时判断任意一个类所具有的成员变量和方法。

4)在运行时调用任意一个对象的方法

 

【题目描述】

关键字 final 分别修饰一个类,一个方法,一个变量,各起什么作用

【正确答案】       

final 修饰类是不能被继承

fianl 修饰方法不能在子类中被覆盖。

final 修饰变量,称为常量,初始化以后不能改变值。

 

【题目描述】

什么是垃圾回收?什么时候触发垃圾回收?如何降低垃圾回收的触发频率?它能保证程序有足够的可用内存吗?

【正确答案】       

【解释】

垃圾回收(GC)是 Java 语言的一个重要特性,作用是释放不再被使用的内存。垃圾回收由系统 进行管理。在系统认为需要的时候自动启动一个线程进行处理。 尽量减少垃圾内存,也就是新建对象的数量,可以降低垃圾回收的频率。 垃圾回收机制无法保证有足够的内存。

 

【题目描述】

类DynArray实现了一个动态数组。当数组的空间不够时动态分配空间。

【正确答案】       

Class DynArray{

         private int size;

         private int[] array;

         private final int DEFAULT_LENGTH = 10;

         public DynArray() {

                  size = 0;

                  array = new int[DEFAULT_LENGTH];

         }

         public void add(int element) {

                  ensureCapacity();

                  this.array[this.size++] = element;

         }

         private void ensureCapacity() {

                  if (size == array.length) {

                           int[] longerArray = new int[size * 2];

                           System.arraycopy(array, 0, longerArray, 0, size);

                           this.array = longerArray;

              }

         }

}

 

【题目描述】

               用反射机制声明长度为 10 的 int 型数组的表达式

【正确答案】       

import java.lang.reflect.Array;

public class IntArrayDemo {   

           public static void main(String[] args) {       

                   Class c = int.class;       

                   Object objArr = Array.newInstance(c, 10);               

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

                            Array.set(objArr, i, i);       

                   }

                   int[] arr=(int[])objArr;

                   for(int j = 0; j < arr.length; j++) {           

                            System.out.println(arr[j]);       

                   }   

           }

}

 

【题目描述】

               请阅读如下代码,请问答以下三条打印语句输出的结果是什么?

public class Main {

                  public static String staticProperty = "1";

                  public String property = "a";

                  static {

                          staticProperty = "2";

                  }

                  public Main () {

                          this.property = "b";

                          staticProperty = "3";

                  }

                  {

                          this.property = "c";

                          staticProperty = "4";

                  }

                  public static void main(String[] args){

                          System.out.println(Main.staticProperty);

                          System.out.println(new Main().property);

                          System.out.println(Main.staticProperty);

                  }

}

【正确答案】       

2

b

3

 

【题目描述】

有 2 个类 Cat 及 WhiteCat,代码如下:

public class Cat {

         protected static String color = "random";

         public Cat() {

         }

         public void showCatColor() {

                  System.out.println("Cat:" + color);

         }

         public static void showColor() {

                   System.out.println("Cat:" + color);

         }

}

public class WhiteCat extends Cat {

         protected static String color = "white";

         public WhiteCat() {

                  super();

         }

         public void showCatColor() {

                  System.out.println("WhiteCat:" + color);

         }

         public static void showColor() {

                   System.out.println("WhiteCat:" + color);

         }

}

请分析下面各段程序的运行结果

A.  WhiteCat whiteCat = new WhiteCat();

    Cat cat = whiteCat;

         cat.showColor(); cat.showCatColor();

A.     Cat cat = new Cat();

         WhiteCat whiteCat = (WhiteCat) cat;

         cat.showColor();

         cat.showCatColor();

B.     Cat cat = new WhiteCat();

         WhiteCat whiteCat = (WhiteCat) cat;

         cat.showColor();

         cat.showCatColor();

【正确答案】       

A 段执行的结果是: Cat:random WhiteCat:white

B 段执行的结果是:会抛出 java.lang.ClassCastException 异常

C 段执行的结果是: Cat:random WhiteCat:white

 

【题目描述】

判断下列语句是否正确,如果有错误,请指出错误所在?

void foo(final int []arg){

         if (arg.length > 1)

         arg[0] = 5;

}

【正确答案】       

         正确

 

【题目描述】

判断下列语句是否正确,如果有错误,请指出错误所在?

interface A{

         int add(final A a);

}

class B implements A{

         long add(final A a){

                  return this.hashCode() + a.hashCode();

         }

}

【正确答案】       

         错,返回值不是 long 类型

 

【题目描述】

指出下面程序的运行结果:

class A{

         static{

                  System.out.print("a");

         }

         public A (){

                  System.out.print("x");

         }

}

class B extends A{

         static{System.out.print("b");}

         public B (){

                  System.out.print("y");

     }

}

public class Test{

         public static void main(String[] args){

                  A ab = new B ();

                  ab = new B ();

         }

}

【正确答案】       

         abxyxy

 

【题目描述】

下列程序运行的结果是

class A {

         class Dog {

                  private String name; private int age; private int step;

                  Dog(String s, int a) {

                          name = s; age = a; step = 0;

                  }

                  public void run(Dog fast) {

                          fast.step++;

                  }

         }

         public static void main(String args[]) {

                  A a = new A();

                  Dog d = a.new Dog("Tom", 3);

                  d.step = 25; d.run(d);

                  System.out.println(d.step);

         }

}

【正确答案】       

26

 

【题目描述】

请看下列程序,运行结果是

class Super{

         int i=10;

         Super(){ print(); i=20;}

         void print(){ System.out.print(i);}

}

public class Sub extends Super{

         int j=30;

         Sub(){ print(); j=40;}

         void print(){ System.out.print(j);}

         public static void main(String[] args){ System.out.print(new Sub().j);}

 }

【正确答案】       

03040

【解释】无

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值