2019年11月8日 java2

考点1

Which is the return type of the method main()?

  • A int
  • B void
  • C Boolean
  • D static

正确答案: B

解析

1
2
public static void main(String[] args){
}

考点2

子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是?

  • A 父类B静态代码块->父类B构造函数->子类A静态代码块->父类B非静态代码块->子类A构造函数->子类A非静态代码块
  • B 父类B静态代码块->父类B构造函数->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块
  • C 父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数
  • D 父类B构造函数->父类B静态代码块->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块

正确答案: C

解析

当实例化子类对象时,

  • 首先要加载父类的class文件进内存,静态代码块是随着类的创建而执行,所以父类静态代码块最先被执行,
  • 子类class文件再被加载,同理静态代码块被先执行;
  • 实例化子类对象要先调用父类的构造方法,而调用父类构造方法前会先执行父类的非静态代码块

考点3

有如下代码:请写出程序的输出结果。

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)
{
int x = 0;
int y = 0;
int k = 0;
for (int z = 0; z < 5; z++) {
if ((++x > 2) && (++y > 2) && (k++ > 2))
{
x++;
++y;
k++;
}
}
System.out.println(x + ”” +y + ”” +k);
}
}
  • A 432
  • B 531
  • C 421
  • D 523

正确答案: B

解析

每次循环z,x,y,k对应数值为:
0,1,0,0
1,2,0,0
2,3,1,0
3,4,2,0
4,5,3,1
执行完这次以后,z++为5,不再进入for循环。

考点4

现有如下代码段:

1
2
3
x = 2;
while(x<n/2)
x = 2*x;

假设n>=0,则其时间复杂度应为( )

  • A O(log2(n))
  • B O(nlog2(n))
  • C O(n)
  • D O(n^2)

正确答案: A

解析

1
2
3
x = 2;       //①
while(x<n/2)
x = 2*x; // ②

语句①的频度是1,设语句2的频度是f(n),则2^f(n)<=n/2;f(n)<=log2(n/2)近似等于f(n)<=log2(n),取最大值f(n)=log2(n),T(n)=O(log2(n))

考点5

下面关于垃圾收集的说法正确的是

  • A 一旦一个对象成为垃圾,就立刻被收集掉。
  • B 对象空间被收集掉之后,会执行该对象的finalize方法
  • C finalize方法和C++的析构函数是完全一回事情
  • D 一个对象成为垃圾是因为不再有引用指着它,但是线程并非如此

正确答案: D

解析

对象空间被收集之前执行finalize()方法,而不是对象空间被收集之后再执行

考点6

1
2
3
4
public void test() {
int a = 10;
System.out.println(a++ + a--);
}

最后输出什么?

  • A 19
  • B 20
  • C 21
  • D 22

正确答案: C

解析

  • 先取值,后加一
  • 先取值,后减一

考点7

哪个正确

  • A abstract类只能用来派生子类,不能用来创建abstract类的对象。
  • B final类不但可以用来派生子类,也可以用来创建final类的对象。
  • C abstract不能与final同时修饰一个类。
  • D abstract类定义中可以没有abstract方法。

正确答案: ACD

解析

1、abstract类不能用来创建abstract类的对象;
2、final类不能用来派生子类,因为用final修饰的类不能被继承;
3、如2所述,final不能与abstract同时修饰一个类,abstract类就是被用来继承的;
4、类中有abstract方法必须用abstract修饰,但abstract类中可以没有抽象方法,接口中也可以有abstract方法。

考点8

关于equals和hashCode描述正确的是 ()

  • A 两个obj,如果equals()相等,hashCode()一定相等(符合代码规范的情况下)
  • B 两个obj,如果hashCode()相等,equals()不一定相等
  • C 两个不同的obj, hashCode()可能相等
  • D 其他都不对

正确答案: ABC

解析

考点9

运用下列哪个命令能够获取JVM的内存映像

  • A jinfo
  • B jmap
  • C jhat
  • D jstat

正确答案: B

解析

1、jps:查看本机java进程信息。
2、jstack:打印线程的栈信息,制作线程dump文件。
3、jmap:打印内存映射,制作堆dump文件
4、jstat:性能监控工具
5、jhat:内存分析工具
6、jconsole:简易的可视化控制台
7、jvisualvm:功能强大的控制台

考点10

以下哪一个不是赋值符号?

  • A +=
  • B <<=
  • C <<<=
  • D >>>=

正确答案: C

解析

A.很明显是赋值符号
B.<<=左移赋值
C.不是
D.>>>= 右移赋值,左边空出的位以0填充

考点11

Java多线程有几种实现方法?

  • A 继承Thread类
  • B 实现Runnable接口
  • C 实现Thread接口
  • D 以上都不正确

正确答案: AB

解析

多线程一共有三种实现方式
方式1:继承Thread类,并重写run()方法
方式2:实现Runnable接口,实现run()方法
方式3:实现Callable接口,线程结束后可以有返回值,但是该方式是依赖于线程池的。

考点12

Java中的集合类包括ArrayList、LinkedList、HashMap等类,下列关于集合类描述正确的是()

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

正确答案: ABD

解析

ArrayList插入和现有项的删除开销很大,除非在末端
LinkedList插入和删除开销很小
ArrayList和LinkedList都是实现了List接口
HashMap可以用null值和空字符串作为K,不过只能有一个

考点13

下面的Java赋值语句哪些是有错误的 ()

  • A int i =1000;
  • B float f = 45.0;
  • C char s = ‘\u0639’
  • D Object o = ‘f’;
  • E String s = “hello,world\0”;
  • F Double d = 100;

正确答案: BF

解析

不同的数据类型不能自动装箱拆箱,只有对应类型的数据类型和包装类才能自动装箱拆箱。
double类型的才可以自动装箱为Double
Double d = 100;中100为int类型,只能自动装箱为Integer

考点14

true、false、null、sizeof、goto、synchronized 哪些是Java关键字?

  • A true
  • B false
  • C null
  • D sizeof
  • E goto
  • F synchronized

正确答案: EF

解析

  • true、false、null是字面量。
  • goto、const是java保留字和关键字。