2019年12月13日 java2

考点1 修饰符混用

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

  • A abstract不能与final并列修饰同一个类
  • B abstract类中不应该有private的成员
  • C abstract方法必须在abstract类或接口中
  • D static方法中能直接调用类里的非static的属性

解析

显示答案/隐藏答案正确答案: D

abstract类中的确不应该有private的成员,但是是可以有的

考点2 求余运算

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

1
2
3
4
5
6
7
public class Test {
public static void main(String args[]) {
int x = -5;
int y = -12;
System.out.println(y % x);
}
}
  • A -1
  • B 2
  • C 1
  • D -2

解析

显示答案/隐藏答案正确答案: D

Y(被除数) % X(除数) 当除数与被除数的符号相同时,取余和取模的结果是完全相同的; 当除数与被除数的符号不相同时,结果不同。具体说,取余结果的符号与%前面的数的符号(被除数)相同

考点3 java只有值传递

关于Java中参数传递的说法,哪个是错误的?

  • A 在方法中,修改一个基础类型的参数不会影响原始参数值
  • B 在方法中,改变一个对象参数的引用不会影响到原始引用
  • C 在方法中,修改一个对象的属性会影响原始对象参数
  • D 在方法中,修改集合和Maps的元素不会影响原始集合参数

解析

显示答案/隐藏答案正确答案: D

考点4 多态 编译看左边 运行看右边

下列代码输出结果为( )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Animal{
public void move(){
System.out.println("动物可以移动");
}
}
class Dog extends Animal{
public void move(){
System.out.println("狗可以跑和走");
}
public void bark(){
System.out.println("狗可以吠叫");
}
}
public class TestDog{
public static void main(String args[]){
Animal a = new Animal();
Animal b = new Dog();
a.move();
b.move();
b.bark();
}
}
  • A
    1
    2
    3
    动物可以移动
    狗可以跑和走
    狗可以吠叫
  • B
    1
    2
    3
    动物可以移动
    动物可以移动
    狗可以吠叫
  • C 运行错误
  • D 编译错误

解析

显示答案/隐藏答案正确答案: D

考点5

假设num已经被创建为一个ArrayList对象,并且最初包含以下整数值:[0,0,4,2,5,0,3,0]。 执行下面的方法numQuest(),最终的输出结果是什么?

1
2
3
4
5
6
7
8
9
10
11
12
private List<Integer> nums;
//precondition: nums.size() > 0
//nums contains Integer objects

public void numQuest() {
int k = 0;
Integer zero = new Integer(0);
while (k < nums.size()) {
if (nums.get(k).equals(zero))nums.remove(k);
k++;
}
}
  • A [3, 5, 2, 4, 0, 0, 0, 0]
  • B [0, 0, 0, 0, 4, 2, 5, 3]
  • C [0, 0, 4, 2, 5, 0, 3, 0]
  • D [0, 4, 2, 5, 3]

解析

显示答案/隐藏答案正确答案: D

List中的 get ( i )指的是获取下标(索引)为 i 的元素,也就是第 i+1 个元素
本题:
zero==0,如果get(k)==0,执行remove(k); ;
size==8 ; k==0 , 因此第一次remove(0) ,删除索引为0的元素也就是第一个元素0,然后k++, size()–;
此时集合元素为 :[0,4,2,5,0,3,0]
size==7; k==1,因此get(1)==4 !=0 , 不执行remove(); k++,因没有删除元素,size()不变,
此时集合元素为:[0,4,2,5,0,3,0]
size==7;k==2,k++;
size==7;k==3,k++;
size==7;k==4,get(4)==0,remove(4) ; k++, size()–;
此时集合元素为: [0,4,2,5,3,0]
size==6;k==5,get(5)==0,remove(5);k++, size()–;
此时集合元素为: [0,4,2,5,3]
size==5; k==6 ;退出循环;最终输出此时集合元素为 [0,4,2,5,3] ;
一般更改删除集合元素,使用iterator()迭代器,不推荐使用这种;

此方法的目地就是排除重复元素

考点6 Math.round四舍五入 舍变小入变大

Math.round(11.5) 等于多少 (). Math.round(-11.5) 等于多少 ( ).

  • A 11 ,-11
  • B 11 ,-12
  • C 12 ,-11
  • D 12 ,-12

解析

显示答案/隐藏答案正确答案: C

floor : 意为地板,指向下取整,返回不大于它的最大整数
ceil : 意为天花板,指向上取整,返回不小于它的最小整数
round: 意为大约,表示”四舍五入”,而四舍五入,入是往数值大数的方向入
Math.round(11.5)的结果为12,12>11.5
Math.round(-11.5)的结果为-11。-11>-11.5

考点7 Log4j

下列语句哪一个是不正确的()

  • A Log4j支持按分钟为间隔生成新的日志文件
  • B Log4j是一个打印日志用的组件
  • C Log4j支持按年为间隔生成新的日志文件
  • D Log4j的日志打印级别可以在运行时重新设置

解析

显示答案/隐藏答案正确答案: D

Log4j在运行期间不可重置

考点8 默认构造器

It is an important feature of the Java language that it always provides a default constructor to a class.

  • A FALSE
  • B TRUE

解析

显示答案/隐藏答案正确答案: A

只有在不显示声明构造方法时,系统才提供默认无参构造方法

考点9 线程安全集合

下面哪些具体实现类可以用于存储键,值对,并且方法调用提供了基本的多线程安全支持:()

  • A java.util.ConcurrentHashMap
  • B java.util.Map
  • C java.util.TreeMap
  • D java.util.SortMap
  • E java.util.Hashtable
  • F java.util.HashMap

解析

显示答案/隐藏答案正确答案: AE

线程安全的map

HashTable,
SynchronizedMap,
ConcurrentHashMap

考点10 java内存区域

关于Java内存区域下列说法不正确的有哪些

  • A 程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示器,每个线程都需要一个独立的程序计数器.
  • B Java虚拟机栈描述的是java方法执行的内存模型,每个方法被执行的时候都会创建一个栈帧,用于存储局部变量表、类信息、动态链接等信息
  • C Java堆是java虚拟机所管理的内存中最大的一块,每个线程都拥有一块内存区域,所有的对象实例以及数组都在这里分配内存。
  • D 方法区是各个线程共享的内存区域,它用于存储已经被虚拟机加载的常量、即时编译器编译后的代码、静态变量等数据。

解析

显示答案/隐藏答案正确答案: BC

B错误. java虚拟机栈没有类信息,类信息是在方法区
C错误. java堆线程共享,主要是存放对象实例和数组

考点11 编译原理 循环优化

下列哪些方法是针对循环优化进行的

  • A 强度削弱
  • B 删除归纳变量
  • C 删除多余运算
  • D 代码外提

解析

显示答案/隐藏答案正确答案: ABD

常见的代码优化技术有:复写传播,删除死代码, 强度削弱,归纳变量删除
有空了解一下