Java选择题(二十)

wuchangjian2021-11-01 21:07:39编程学习

1.一个抽象类并不需要其中所有的方法都是抽象的。( )

正确答案: A 你的答案: A (正确)
A.正确
B.错误

解释:
1)抽象类可以包括抽象方法和非抽象方法
2)如果类里面有抽象方法的话,那么类一定要声明为抽象的!

2.进行Java基本的GUI设计需要用到的包是()

正确答案: C 你的答案: C (正确)
A.java.io
B.java.sql
C.java.awt
D.java.rmi

解释:
图形用户界面(Graphical User Interface,简称 GUI)是指采用图形方式显示的计算机操作用户界面。
java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。
java.sql 提供使用 Java 编程语言访问并处理存储在数据源中的数据的 API。此 API 包括一个框架,凭借此框架可以动态地安装不同驱动程序来访问不同数据源。
java.awt是一个软件包,包含用于创建用户界面和绘制图形图像的所有分类。功能:包含用于创建用户界面和绘制图形图像的所有类。
java.rmi 提供 RMI 包。RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。

3.以下代码的输出的正确结果是

public class Test {
    public static void main(String args[]) {
        String s = "祝你考出好成绩!";
        System.out.println(s.length());
    }
}

正确答案: D 你的答案: D (正确)
A.24
B.16
C.15
D.8

解释:
length得到的是字符,不是字节。

4.下面有关java hashmap的说法错误的是?

正确答案: C 你的答案: C (正确)
A.HashMap 的实例有两个参数影响其性能:“初始容量” 和 “加载因子”。
B.HashMap 的实现不是同步的,意味着它不是线程安全的
C.HashMap通过开放地址法解决哈希冲突
D.HashMap中的key-value都是存储在Entry数组中的

解释:

  1. 开放定址法:线性探测再散列、二次探测再散列、再随机探测再散列;

  2. 再哈希法:换一种哈希函数;

  3. 链地址法 :在数组中冲突元素后面拉一条链路,存储重复的元素;

  4. 建立一个公共溢出区:其实就是建立一个表,存放那些冲突的元素。

什么时候会产生冲突

HashMap中调用 hashCode() 方法来计算hashCode。

由于在Java中两个不同的对象可能有一样的hashCode,所以不同的键可能有一样hashCode,从而导致冲突的产升。
HashMap底层是 数组和链表 的结合体。底层是一个线性数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。数组是 Entry[] 数组,静态内部类。 Entry就是数组中的元素,每个 Map.Entry 其实就是一个key-value对,它持有一个指向下一个元素的引用 next ,这就构成了链表。所以 很明显是链地址法。
具体过程:
当我们往HashMap中put元素的时候:当程序试图将一个key-value对放入HashMap中时,
1 . 程序首先根据该 key 的 hashCode() 返回值决定该 Entry 的存储位置;
2 . 若 Entry 的存储位置上为 null ,直接存储该对象;若不为空,两个 Entry 的 key 的 hashCode() 返回值相同,那它们的存储位置相同,
3 . 循环遍历链表,如果这两个 Entry 的 key 通过 equals 比较返回 true,新添加 Entry 的 value 将覆盖集合中原有 Entry 的 value,但key不会覆盖;如果这两个 Entry 的 key 通过 equals 比较返回 false,新添加的 Entry 将与集合中原有 Entry 形成 Entry 链,而且新添加的 Entry 位于 Entry 链的头部

5.说明输出结果。

import java.util.Date; 
public class SuperTest extends Date{ 
    private static final long serialVersionUID = 1L; 
    private void test(){ 
       System.out.println(super.getClass().getName()); 
    } 
      
    public static void main(String[]args){ 
       new SuperTest().test(); 
    } 
}

正确答案: C 你的答案: A (错误)
A.SuperTest
B.SuperTest.class
C.test.SuperTest
D.test.SuperTest.class

解释:
estSuper和Date的getClass都没有重写,他们都是调用Object的getClass,而Object的getClass作用是返回的是运行时的类的名字。这个运行时的类就是当前类,所以
super.getClass().getName()
返回的是test.SuperTest,与Date类无关
要返回Date类的名字需要写super.getClass().getSuperclass()

6.URL u =new URL(“http://www.123.com”);。如果www.123.com不存在,则返回______。

正确答案: A 你的答案: A (正确)
A.http://www.123.com
B.””
C.null
D.抛出异常

我们在执行URL u =new URL(“http://www.123.com”);这句话的时候确实要抛出异常,但是这个异常属于IOException,不管网址是否存在,最后都会返回该网址的一个连接,打印出来就是该网址。

7.下面哪些语法结构是正确的?

正确答案: A C 你的答案: A C (正确)
A.public class A extends B implements C
B.public class A implements A B
C.public class A implements B,C,D
D.public implements B

解释:
一个类只能继承一个类,但是可以实现多个接口;
B中间没逗号分隔
另外补充一点,如果一个类既继承了某个基类,又实现了接口。那么extends>关键字必须在implements之前。

8.下列哪个选项是合法的标识符?()

正确答案: B D 你的答案: B D (正确)
A.123
B._name
C.class
D.first

解释:
标识符:

  1. 只能由数字,字母,符号(有且仅有_和$两个)组成。

  2. 数字不能作为标识符的开头。

  3. 不能和关键字,保留字,显式常量一样。关键字都是小写的。

  4. null,true,false都不是关键字,属于显式常量。goto,const都是保留关键字。

9.下面有关Java的说法正确的是( )

正确答案: A C D F 你的答案: A D E (错误)
A.一个类可以实现多个接口
B.抽象类必须有抽象方法
C.protected成员在子类可见性可以修改
D.通过super可以调用父类构造函数
E.final的成员方法实现中只能读取类的成员变量
F.String是不可修改的,且java运行环境中对string对象有一个常量池保存

解释:
A对:java类单继承,多实现
B错:被abstract修饰的类就是抽象类,有没有抽象方法无所谓
C错:描述有问题。protected成员在子类的可见性,我最初理解是子类(不继承父类protected成员方法)获取父类被protected修饰的成员属性或方法,可见性是不可能变的,因为修饰符protected就是描述可见性的。
这道题应该是要考察子类继承父类,并重写父类的protected成员方法,该方法的可见性可以修改,这是对的,因为子类继承父类的方法,访问权限可以相同或往大了改
D对。
E错:final修饰的方法只是不能重写,static修饰的方法只能访问类的成员变量
F对。

下面有关java的引用类型,说法正确的有?

正确答案: A B C D 你的答案: A B D (错误)
A.对于一个对象来说,只要有强引用的存在,它就会一直存在于内存中
B.如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
C.如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存
D.一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的空间

解释:
1、强引用:一个对象赋给一个引用就是强引用,比如new一个对象,一个对象被赋值一个对象。
2、软引用:用SoftReference类实现,一般不会轻易回收,只有内存不够才会回收。
3、弱引用:用WeekReference类实现,一旦垃圾回收已启动,就会回收。
4、虚引用:不能单独存在,必须和引用队列联合使用。主要作用是跟踪对象被回收的状态。

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。