2019年11月23日 java1

考点1

下列程序执行后结果为( )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class A {
public int func1(int a, int b) {
return a - b;
}
}
class B extends A {
public int func1(int a, int b) {
return a + b;
}
}
public class ChildClass {
public static void main(String[] args) {
A a = new B();
B b = new B();
System.out.println("Result=" + a.func1(100, 50));
System.out.println("Result=" + b.func1(100, 50));
}
}
  • A Result=150Result=150
  • B Result=100Result=100
  • C Result=100Result=150
  • D Result=150Result=100

解析

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

编译看左边 运行看右边

编译时,看左边是否有这个方法。也就是父类引用只能调用父类中声明的方法
运行时,调用右边的方法,也就是调用的是new创建的实际对象的方法,

  • 如果重写了该方法,则调用子类重写的方法,
  • 如果没有重写该方法,则调用从父类继承来的方法。

静态方法编译看左,运行看左
成员方法编译看左,运行看右
成员变量编译看左,运行看左

考点2

有程序片段如下,以下表达式结果为 true 的是( )

1
2
3
Float  s=new  Float(0.1f);
Float t=new Float(0.1f);
Double u=new Double(0.1);
  • A s==t
  • B s.equals(t)
  • C u.equals(s)
  • D t.equals(u)

解析

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

Float类和Double类都重写对于的equals方法,在比较之前都会判断是否同属于Float对象或Double对象,如果不是直接返回false,如果是再继续比较对应的数值大小。
JDK1.8的源码如下:
1.Float类重写了equals方法:

1
2
3
4
public boolean equals(Object obj) { 
return (obj instanceof Float)
&& (floatToIntBits(((Float)obj).value) == floatToIntBits(value));
}

2.Double类重写了equals方法:

1
2
3
4
public boolean equals(Object obj) { 
return (obj instanceof Double)
&& (doubleToLongBits(((Double)obj).value) == doubleToLongBits(value));
}

考点1

Math.floor(-8.5)=( )

  • A (float)-8.0
  • B (long)-9
  • C (long)-8
  • D (double)-9.0

解析

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

考点3

Math.floor(-8.5)=( )

  • A (float)-8.0
  • B (long)-9
  • C (long)-8
  • D (double)-9.0

解析

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

Math.floor() 表示向下取整,返回double类型 (floor—地板)
Math.ceil() 表示向上取整,返回double类型 (ceil—天花板)
Math.round() 四舍五入,返回int类型

考点4

下面关于volatile的功能说法正确的是哪个

  • A 原子性
  • B 有序性
  • C 可见性
  • D 持久性

解析

显示答案/隐藏答案正确答案: BC
  • synchronized保证三大性,原子性,有序性,可见性,
  • volatile保证有序性,可见性,不能保证原子性。

考点5

以下哪几种方式可用来实现线程间通知和唤醒:( )

  • A Object.wait/notify/notifyAll
  • B ReentrantLock.wait/notify/notifyAll
  • C Condition.await/signal/signalAll
  • D Thread.wait/notify/notifyAll

解析

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

wait()、notify()和notifyAll()是Object类中的方法;
Condition是在java1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、 notify(),使用Condition1的await()、signal()这种方式实现线程间协作更加安全和高效。

考点6

JavaWEB中有一个类,当会话种邦定了属性或者删除了属性时,他会得到通知,这个类是:( )

  • A HttpSessionAttributeListener
  • B HttpSessionBindingListener
  • C HttpSessionObjectListener
  • D HttpSessionListener;
  • E HttpSession
  • F HttpSessionActivationListener

解析

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

HttpSessionAttributeListener:可以实现此侦听器接口获取此web应用程序中会话属性列表更改的通知
HttpSessionBindingListener:当该对象从一个会话中被绑定或者解绑时通知该对象,这个对象由HttpSessionBindingEvent对象通知。这可能是servlet程序显式地从会话中解绑定属性的结果,可能是由于会话无效,也可能是由于会话超时;
HttpSessionObjectListener:没有该接口API;
HttpSessionListener:当web应用程序中的活动会话列表发生更改时通知该接口的实现类,为了接收该通知事件,必须在web应用程序的部署描述符中配置实现类;
HttpSessionActivationListener:绑定到会话的对象可以侦听容器事件,通知它们会话将被钝化,会话将被激活。需要一个在虚拟机之间迁移会话或持久会话的容器来通知所有绑定到实现该接口会话的属性。