2019年11月8日 Java1

考点1

关于下面代码 int[] x=new int[25]; 描述正确的是()

  • A x[25]存放了数据“\0”。
  • B x[24] 存放了数据“\0”。
  • C 若访问x[25],程序将抛出异常。
  • D x[1]访问此数组的第一个元素。

正确答案: C

解析

A:不存在x[25] 索引从0开始到length-1
B:x[24]
存的是默认值0(java中没有’\0’这一说)
C:超出内存 正确
D:第二元素

考点2

以下表达式的类型和值是什么?(注意整数除法)()
-5 + 1/4 + 2*-3 + 5.0

  • A int -3
  • B int -4
  • C double -5.5
  • D double -6.0

正确答案: D

解析

注意题目说整数除法,所以1/4 = 0

考点3

下列修饰符中,能够使得某个成员变量可被它所在包访问到和它的子类访问到的是( )

  • A protected
  • B public
  • C private
  • D 应不加修饰符

正确答案: A

解析

访问控制符修饰的成员可见范围

位置 public protected default private
同一个类中
同一个包中
子类中
全局

考点4

内部类(也叫成员内部类)可以有4种访问权限。( )

  • A 正确
  • B 错误

正确答案: A

解析

为什么外部类只能public和默认修饰

外部类的上一级程序单元是包,所以其有两个作用域:同一包内和任何位置。因此只需要2种访问权限:包访问权限和公开访问权限,正好对应的省略访问控制符和public。省略访问控制符是包访问权限,即同一个包内的其他类可以访问省略访问控制符的成员。因此,如果一个外部类不使用任何访问控制符修饰,则只能被同一个包的其他类访问。

为什么内部类可以使用四个访问控制符

而内部类的上一级程序单元是外部类,它就具有4个作用域:同一个类、同一个包、父子类和任何位置。

小结

你就把内部类理解成类的成员,成员有4种访问权限吧,内部类也是!分别为private、protected、public以及默认的访问权限

考点5

以下关于集合类ArrayList、LinkedList、HashMap描述错误的是()

  • A HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值
  • B ArrayList和LinkedList均实现了List接口
  • C 添加和删除元素时,ArrayList的表现更佳
  • D ArrayList的访问速度比LinkedList快

正确答案: C

解析

  1. List 是一个有序集合,可以存放重复的数据 (有序:存进是什么顺序,取出时还是什么顺序)
    (1).ArrayList 底层是数组适合查询,不适合增删元素。
    (2).LiskedList 底层是双向链表适合增删元素,不适合查询操作。
    (3).Vector 底层和ArrayList相同,但是Vector是线程安全的,效率较低很少使用
  2. Set 是一个无序集合,不允许放重复的数据 (无序可重复,存进和取出的顺序不一样)
    (1).HashSet 底层是哈希表/散列表
    (2).TreeSet 继承sartedSet接口(无需不可重复,但存进去的元素可以按照元素的大小自动排序)
  3. Map 是一个无序集合,以键值对的方式存放数据,键对象不允许重复,值对象可以重复。
    (1).HashMap实现不同步,线程不安全。HashTable线程安全
    (2).HashMap中的key-value都是存储在Entry中的。
    (3).HashMap可以存null键和null值,不保证元素的顺序恒久不变,它的底层使用的是数组和链表,通过hashCode()方法和equals方法保证键的唯一性

    数组插入删除效率低

    数组的插入和删除效率比较低,读取的效率高,因为地址是连续的

考点6

以下代码段执行后的输出结果为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Test {
public static void main(String[] args) {
System.out.println(test());
}
private static int test() {
int temp = 1;
try {
System.out.println(temp);
return ++temp;
} catch (Exception e) {
System.out.println(temp);
return ++temp;
} finally {
++temp;
System.out.println(temp);
}
}
}
  • A 1,2,2
  • B 1,2,3
  • C 1,3,3
  • D 1,3,2

正确答案: D

解析

finally代码块在try语句的return之前执行。try的return的值会被放入临时空间,然后执行finally代码块,如果finally中有return,会刷新临时空间的值,方法结束返回临时空间值,也就是finally中的return会覆盖try中的return。

考点7

Hashtable 和 HashMap 的区别是:

  • A Hashtable 是一个哈希表,该类继承了 AbstractMap,实现了 Map 接口
  • B HashMap 是内部基于哈希表实现,该类继承AbstractMap,实现Map接口
  • C Hashtable 线程安全的,而 HashMap 是线程不安全的
  • D Properties 类 继承了 Hashtable 类,而 Hashtable 类则继承Dictionary 类
  • E HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。

正确答案: BCDE

解析

选B、C、D、E。

Hashtable

(1)Hashtable 是一个散列表,它存储的内容是键值对(key-value)映射。
(2)Hashtable 的函数都是同步的,这意味着HashTable是线程安全的。它的key、value都不可以为null。
(3)HashTable直接使用对象的hashCode。

HashMap

(1)由数组+链表组成的,基于哈希表的Map实现,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。
(2)HashMap是线程安全的,HashMap可以接受为null的键(key)和值(value)。
(3)HashMap重新计算hash值

Hashtable继承Dictionary

Properties继承关系如下:

1
2
public class Hashtable<K,V> extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable

HashMap继承AbstractMap

1
public class HashMap<K,V>extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable

Properties继承Hashtable

考点8

下面几个关于Java里queue的说法哪些是正确的()?

  • A LinkedBlockingQueue是一个可选有界队列,不允许null值
  • B PriorityQueue,LinkedBlockingQueue都是线程不安全的
  • C PriorityQueue是一个无界队列,不允许null值,入队和出队的时间复杂度是O(log(n))
  • D PriorityQueue,ConcurrentLinkedQueue都遵循FIFO原则

正确答案: AC

解析

A对、LinkedBlockingQueue是一个基于节点链接的可选是否有界的阻塞队列,不允许null值。
B错、LinkedBlockingQueue是一个线程安全的阻塞队列,实现了先进先出等特性。
C、PriorityQueue是一个无界队列,不允许null值,入队和出队的时间复杂度是O(log(n))。
D、PriorityQueue是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,该队列的元素遵循FIFO原则。

考点9

关于Java的一些概念,下面哪些描述是正确的:( )

  • A 所有的Java异常和错误的基类都是java.lang.Exception, 包括java.lang.RuntimeException
  • B 通过try … catch … finally语句,finally中的语句部分无论发生什么异常都会得到执行
  • C java中所有的数据都是对象
  • D Java通过垃圾回收回收不再引用的变量,垃圾回收时对象的finallize方法一定会得到执行
  • E Java是跨平台的语言,无论通过哪个版本的Java编写的程序都能在所有的Java运行平台中运行
  • F Java通过synchronized进行访问的同步,synchronized作用非静态成员方法和静态成员方法上同步的目标是不同的

正确答案: BF

解析

A:Java中所有错误和异常的父类是java.lang.Throwable
C:基本数据类型不是对象,不能用new的方法获取,但是每个基本数据类型都对应着封装类型,这些封装类型为了解决基本数据类型面向对象用的。
D:Java垃圾回收器负责回收无用对象占据的内存资源,但对象没有使用new获取了一块特殊区域,这块特殊区域的回收使用finallize()
E:Java跨平台是因为有JVM的存在,Java的三个版本的运行需要各自不同的环境。
F: Synchronized修饰非静态方法,实际上是对调用该方法的对象加锁,俗称“对象锁”Synchronized修饰静态方法,实际上是对该类对象加锁,俗称“类锁”。