2019年11月13日 java1

考点1

以下()不是合法的标识符?

  • A STRING
  • B x3x
  • C void
  • D deSf

解析

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

void属于java中的关键字

  • Java标识符只能由数字、字母、下划线”_”或”$”符号以及Unicode字符集组成
  • Java标识符必须以字母、下划线”_”或”$”符号以及Unicode字符集开头
  • Java标识符不可以是Java关键字、保留字(constgoto)和字面量(truefalsenull)
  • Java标识符区分大小写,是大小写敏感的

考点2

Java中,关于HashMap类的描述,以下错误的是()?

  • A HashMap能够保证其中元素的顺序
  • B HashMap允许将null用作值
  • C HashMap允许将null用作键
  • D HashMap使用键/值得形式保存数据

解析

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

HashMap的底层是由数组加链表实现的,对于每一个key值,都需要计算哈希值,然后通过哈希值来确定顺序,并不是按照加入顺序来存放的,因此可以认为是无序的,但不管是有序还是无序,它都一个自己的顺序。故A错。
最开始有HashtableHashtable是不允许keyvalue的值为空的

A.HashMap不能保证元素的顺序,而LinkedHashMap可以保持数据的插入顺序,TreeMap可以按照键值进行排序(可自定比较器)
B.HashMap允许存在多条null值
C.HashMap允许且仅允许一条null键
D.Map就是通过键/值形式保存数据的
可能有误,仅供参考,欢迎大佬批评指正。
HashMap

HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。
HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。
HashTable是Java中的遗留类,现在不怎么用了,也许HashTable类的设计者当时认为null作为key 和value 是没有什么用的。

HashMap是之后的版本引进的类,它的接口Map表达的意义更为广泛,也许HashMap的设计者认为null作为key和value是有实际意义的,所以才允许为null.

当然实际项目中,真的是有value为null的情况的。key为null的情况比较少见,但不代表没有。HashMap允许null为key和value应当是类的设计者思考让这个类更有用的设计吧。

考点3

以下代码结果是什么?
public class foo {
public static void main(String sgf[]) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println(a+"."+b);
}
static void operate(StringBuffer x,StringBuffer y) {
x.append(y);
y=x;
}
}

  • A 代码可以编译运行,输出”AB.AB“。
  • B 代码可以编译运行,输出”A.A“。
  • C 代码可以编译运行,输出”AB.B“。
  • D 代码可以编译运行,输出”A.B“。

解析

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

考点4

构造方法用于创建类的实例对象,构造方法名应与类名相同,返回类型为void。

  • A 正确
  • B 错误

解析

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

构造函数,名称与类相同,没有返回类型的
如果”构造器”有返回值,那就说普通方法,而不是构造器

考点5

以下程序的执行结果是:

1
2
3
4
5
6
7
8
9
10
11
static boolean foo(char c){
System.out.print(c);
return true;
}
public static void main(String[] args) {
int i =0;
for(foo('A');foo('B')&&(i<2);foo('C')){
i++;
foo('D');
}
}
  • A ABDCBDCB
  • B ABCDABCD
  • C 编译时出错
  • D 运行时抛出异常

解析

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

考点

  • for循环的执行顺序
  • 短路与运算符

for循环格式

1
2
3
for(初始化语句; 布尔表达式; 更新语句) {
循环体;
}

for循环执行顺序

  1. 初始化语句, 仅在循环开始前执行一次;
  2. 布尔表达式, 用于决定是否继续执行正文过程, 表达式中异常则结束循环;
  3. 循环体, 如果过程中存在break, return或者异常, 循环结束(不会执行更新语句), 如果遇到continue, 则会执行更新语句后进入下一轮循环;
  4. 更新语句, 注意更新语句不做逻辑真假判断, 到这里一轮循环结束;

考点6

下列说法正确的是( )

  • A volatile,synchronized 都可以修改变量,方法以及代码块
  • B volatile,synchronized 在多线程中都会存在阻塞问题
  • C volatile能保证数据的可见性,但不能完全保证数据的原子性,synchronized即保证了数据的可见性也保证了原子性
  • D volatile解决的是变量在多个线程之间的可见性、原子性,而sychroized解决的是多个线程之间访问资源的同步性

解析

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

synchronized关键字和volatile关键字比较

  • volatile关键字是线程同步的轻量级实现,所以volatile性能肯定比synchronized关键字要好
  • 但是volatile关键字只能用于变量synchronized关键字可以修饰方法以及代码块
  • synchronized关键字在JavaSE1.6之后进行了主要包括为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁以及其它各种优化之后执行效率有了显著提升,实际开发中使用 synchronized 关键字的场景还是更多一些。
  • 多线程访问volatile关键字不会发生阻塞,而synchronized关键字可能会发生阻塞
  • volatile关键字能保证数据的可见性,但不能保证数据的原子性。synchronized关键字两者都能保证。
  • volatile关键字主要用于解决变量在多个线程之间的可见性,而 synchronized关键字解决的是多个线程之间访问资源的同步性。

synchronized: 具有原子性,有序性和可见性;(三个都有)
volatile:具有有序性和可见性(缺一个原子性)

考点7

经过强制类型转换以后,变量a, b的值分别为( )short a = 128; byte b = (byte) a;

  • A 128 127
  • B 128 -128
  • C 128 128
  • D 编译错误

解析

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

byte在内存中占一个字节,范围是 -128到127之间。
java中short占用2bytes,强转short类型为byte,会将多出的高8位进行截断,short类型的 128的补码:0000 0000 1000 0000,强转为byte后的补码:1000 0000,最高位是符号位,

这样就表示-0,但是注意,没有-0,只有0,为了充分利用资源,java就将原来本应该表示“-0”的原码规定为-128,故结果为-128,类型也就能够表示的范围是-128。

考点8

以下JAVA程序代码的输出是

1
2
3
public static void main(String args[]) {
System.out.println(14^3);
}
  • A 2744
  • B 13
  • C 17
  • D 11

解析

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

异或

^表示异或 就是相同是0 不同是1
14是1110
3是0011
所以14^3=1101,即13

考点9

下面这条语句一共创建了多少个对象:String s=”welcome”+”to”+360;

  • A 1
  • B 2
  • C 3
  • D 4

解析

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

编译器对直接量的优化

“welcome”,”to”,360这三个都是直接量,直接量的连接在编译阶段就可以确定下来。编译器会将其优化成”welcometo360”,也就是只有一个对象。
字符串直接量的连接只生成一个对象

考点10

Java 提供的事件处理模型是一种人机交互模型。它有三个基本要素

  • A 事件源
  • B 事件对象
  • C 事件过程
  • D 事件监听器

解析

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

Java提供的事件处理模型是一种人机交互模型。它有三个基本要素:

  1. 事件源(Event Source):即事件发生的场所,就是指各个组件,如按钮等,点击按钮其实就是组件上发生的一个事件;

2)事件(Event):事件封装了组件上发生的事情,比如按钮单击、按钮松开等等;
3) 事件监听器(Event Listener):负责监听事件源上发生的特定类型的事件,当事件到来时还必须负责处理相应的事件;

考点11

常用的servlet包的名称是?

  • A java.servlet
  • B javax.servlet
  • C servlet.http
  • D javax.servlet.http

解析

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

JEE5.0中的Servlet相关的就下面这几个包:

  • javax.servlet
  • javax.servlet.jsp
  • java.servlet.jsp.el
  • java.servlet.jsp.tagext

而最用得多的就是
javax.servlet
javax.servlet.http
这两个包了.