java常用面试题——笔试选择题解析

    技术2022-07-11  84

    1.以下关于 abstract 关键字的说法,正确的是(D)。 A.abstract 可以与 final 并列修饰同一个类。 B.abstract 类中不可以有 private 的成员。 C.abstract 类中必须全部是 abstract 方法。 D.abstract 方法必须在 abstract 类或接口中。

    解析: final的类不能被重写和继承;而abstract的类是抽象类,本身没有实现,只能通过子类来实现,也就是说必须被继承。所以说它们是没法同时做修饰符的。 abstract 类中可以有abstract 方法和非抽象方法,但abstract 方法必须在 abstract 类或接口中

    2.以下方法,(B)不是对 add 方法的重载。 public class Test{ public void add(int x,int y,int z){ //todo } } A.public int add(int x,int y,float z){return 0;} B.public int add(int x,int y,int z){return 0;} C.public void add(int x,int y){ } D.以上都不是 解析:

    比较项位置方法名参数表返回值访问修饰符方法重写子类相同相同相同或是其子类不能比父类更严格方法重载同类相同不相同无关无关

    3.关于 Java 堆,下面说法错误的是(D)。 A.所有类的实例都是在堆上分配内存。 B.对象所占的堆内存是由自动内存管理系统回收。 C.堆内存由存活和死亡的对象,空闲碎片区组成。 D.数组是分配在栈中的。

    解析:数组是对象,所有对象存储在堆内存中,而基本数据类型存储在栈内存中。

    4.观察以下代码,输出结果是(C)。 public class MyClass{ int i = -1; private void action(){ int i = 0; i++; } public static void main(String[] args){ MyClass mc = new MyClass(); mc.action(); System.out.println(mc.i); } } A.1 B. 0 C. -1 D.抛出异常

    解析:输出结果为mc.i,这里的i是全局变量,不会被action里面的局部变量影响

    5.观察下面的代码,正确的结果是(A)。 class Letter{ char c = ‘x’; } public class PassObject{ static void f(Letter y){ y.c = ‘z’; } public static void main(String[] args){ Letter x = new Letter(); x.c = ‘a’; f(x); System.out.println(x.c); } } A.z B. a C. x D. null 6.观察如下代码,正确显示结果为(C)。 class A{ void callme(){ System.out.println(“Inside A’s callme()method”); } } class B extends A{ void callme(){ System.out.println(“Inside B’s callme() method”); } } class C extends B{ void callme(){ System.out.println(“Inside C’s callme() method”); } } public class Dispatch{ public static void main(String args[]){ A a = new C(); a.callme(); } } A.Inside A’s callme()method B.Inside B’s callme()method C.Inside C’s callme()method D.抛出异常

    解析: A a = new C(); a为C对象,虽然有继承,但callme()方法重写之后,调用C重写之后的方法【子类重写方法,声名一个子类的对象,调用的方法是子类的方法】

    7.观察如下代码,正确的显示结果是(A)。 public class MyClass{ public static void main(String[] args){ String s1 = “hello”; String s2 = “hello”; String s3 = new String(“hello”); String s4 = new String(“hello”); System.out.println((s1 == s2) + “/” + (s3 == s4)); } } A.true/false B.true/true C.false/true D.false/false

    解析: String s1 = "hello"时,数据存储在常量池中,值一样,地址也一样。 String s3 = new String(“hello”)时,直接在堆中创建对象,地址会发生改变 “==”判断 地址是否一致 equals() 判断值是否相等

    8.观察如下代码,正确的显示结果是(B)。 class MyException extends Exception{ public MyException(String msg){ super(msg); } } public class MyClass { public static void main(String[] args){ try{ if(true) throw new MyException(“bad”); System.out.println(" OK"); }catch(MyException e){ System.out.print(e.getMessage()); } System.out.print(" bye"); } } A. bad B. bad bye C. OK bad D. OK bad bye

    解析:if(true) throw new MyException(“bad”);抛出异常时,不执行try异常后面的语句,由于异常被捕获,打印异常信息。代码继续执行,打印bye

    9.下列说法中,不正确的是(B)。 A.一个 Java 源程序经过编译后,得到的文件的扩展名一定是.class。 B.一个 Java 源程序经过编译后,得到的结果文件数也只有一个。 C.一个 Java 源程序只能有一个 public class 类定义,且源文件的名字与 public class 的类 名相同,扩展名必须是.java。 D.一个 Java 源程序可以包含多个 class 类。

    解析:一个JAVA源文件里面可以有内部类,其他类(有且仅有一个类可以声明为public),所以,编译后,可以有多个.class文件

    10.欲构造 ArrayList 类的一个实例,此类实现继承了 List 接口,下列方法正确的是(B)。 A.ArrayList myList = new Object(); B.List mylist = new ArrayList(); C.ArrayList myList = new List(); D.List myList = new List(); 11.下列说法正确的是(AC)(多选)。 A.LinkedList 实现了继承自 List。 B.AbstractSet 继承自 Set。 C.HashSet 继承自 AbstractSet。 D.WeakMap 继承集成自 HashMap。

    解析: List有两个实现类:ArrayList和LinkedList AbstractSet 继承于AbstractCollection并且实现了大部分Set接口。

    12.Thread 类用来创建和控制线程,一个线程从下面(B)方法开始执行。 A.init() B.start() C.run() D.notifyAll()

    解析: 调用start()方法开启线程来执行任务(start()方法会调用run()以便执行任务)

    13.下面关于 Java 语言实例方法和类方法的说法,正确的是(BC)(多选)。 A.实例方法可以直接通过类名调用。 B.类方法可以直接通过类名调用。 C.实例方法可以操作实例变量也可以操作类变量。 D.类方法可以操作实例变量也可以操作类变量。

    解析: 类方法可以通过类名调用,实例方法不能通过类名调用,因为类方法在该类被加载到内存时,就分配了相应的入口地址。 类中的类方法不可以操作实例变量,也不可以调用实例方法,因为在类创建对象之前,实例成员变量还没有分配内存,而且实例方法也没有入口地址

    14.在 Java 语言当中,(C)关键字用来实现同步。 A. native B. Static C. synchronized D. abstract 15.以下关于 Java 的 List Set 和 Map 集合的描述,错误的是(BC)(多选)。 A) List 集合的元素是有序的,元素可以重复 B) HashSet 集合的元素是无序的,可以重复的;TreeSet 是有序的,基于 TreeMap 实现 的 C) HashMap 的 Key 必须唯一,Value 同样不可以重复 D) LinkedList 线程不安全,它是链表结构 E) List 集合具有以下几种常用的方法:add(E e) clear() hashCode() iterator() toArray()

    解析: HashSet 集合的元素不可重复的,HashMap的 Value可以重复

    16.正则表达式“\d+.?\d”,在匹配下列字符串时结果失败的是(C)。* A.12.5 B.1.25 C.以上都成功 D.以上都失败

    解析: \d数字字符匹配。等效于 [0-9]。

    零次或多次匹配前面的字符或子表达式。 一次或多次匹配前面的字符或子表达式 \ 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。
    Processed: 0.010, SQL: 9