2019年10月30日_java_4

考点1

下面的方法,当输入为2的时候返回值是多少?

1
2
3
4
5
6
7
8
9
10
11
12
public static int getValue(int i) {
int result = 0;
switch (i) {
case 1:
result = result + i;
case 2:
result = result + i * 2;
case 3:
result = result + i * 3;
}
return result;
}
  • A 0
  • B 2
  • C 4
  • D 10

正确答案: D

解析

没有break,发生case穿透现象,程序会继续向下执行,直到遇到break或者结束switch语句的大括号为止。

考点2

下面那些情况可以终止当前线程的运行?

  • A 当一个优先级高的线程进入就绪状态时
  • B 抛出一个异常时
  • C 当该线程调用sleep()方法时
  • D 当创建一个新线程时

正确答案: B

解析

  • 当一个优先级高的线程进入就绪状态时,它只是有较高的概率能够抢到CPU的执行权,不是一定就能抢到执行权,所以A错
  • 抛出一个例外时,该线程就终止了,所以B正确
  • 当前线程调用sleep()方法或者wait()方法时,只是暂时停止了该线程的运行,不是终止线程,注意题目说的是“终止”,就是完全停止,所以C错误
  • 当创建一个新的线程时,该线程也加入到了抢占CPU执行权的队伍中,但是是否能抢到,并不清楚,和A的思想一样,所以D错误

线程结束的三个原因:

  • run方法执行完成,线程正常结束
  • 线程抛出一个未捕获的Exception或者Error
  • 直接调用该线程的Stop方法结束线程(不建议使用,容易导致死锁)

考点3

下列关于java 中的 wait()方法和 sleep()方法的区别描述错误的是?

  • A wait()方法属于Object类,sleep()属于Thread
  • B 调用wait()方法的时候,线程会放弃对象锁
  • C 调用sleep()方法的过程中,线程不会释放对象锁
  • D sleep()方法导致了程序暂停执行指定的时间,让出cpu给其他线程

正确答案: D

解析

sleep和wait的区别有:

  1. 这两个方法来自不同的类分别是ThreadObject
  2. 最主要是**sleep方法没有释放锁,而wait方法释放了锁**,使得敏感词线程可以使用同步控制块或者方法。
  3. waitnotifynotifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
    1
    2
    3
    4
    synchronized(x){
    x.notify()
    //或者wait()
    }
  4. sleep必须捕获异常,而waitnotifynotifyAll不需要捕获异常

D是线程暂停执行指定时间而不是程序暂停执行指定的时间。

考点4

执行以下程序后的输出结果是()

1
2
3
4
5
6
7
8
9
10
11
public class Test {
public static void main(String[] args) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
operator(a, b);
System.out.println(a + "," + b);
}
public static void operator(StringBuffer x, StringBuffer y) {
x.append(y); y = x;
}
}
  • A A,A
  • B A,B
  • C B,B
  • D AB,B

正确答案: D

解析

考点5

关于C++/JAVA类中static 成员和对象成员的说法正确的是?

  • A static 成员变量在对象构造时生成
  • B static 成员函数在对象成员函数中无法调用
  • C 虚成员函数不可能是static 成员函数
  • D static 成员函数不能访问static 成员变量

正确答案: C

解析

C++虚函数类似java语言中的抽象方法,抽象方法中不能用privatestaticsynchronizednative等修饰词修饰。

考点6

给出下面的代码段:

1
2
3
4
5
6
7
8
9
10
11
12
public class Base{
int w, x, y ,z;
public Base(int a,int b)
{
x=a; y=b;
}
public Base(int a, int b, int c, int d)
{
// assignment x=a, y=b
w=d;z=c;
}
}

在代码说明// assignment x=a, y=b处写入如下哪几个代码是正确的?()

  • A Base(a,b);
  • B x=a, y=b;
  • C x=a; y=b;
  • D this(a,b);

正确答案: CD

解析

考点7

下列哪些操作会使线程释放锁资源?

  • A sleep()
  • B wait()
  • C join()
  • D yield()

正确答案: BC

解析

考点8

往OuterClass类的代码段中插入内部类声明, 哪一个是错误的:

1
2
3
4
public class OuterClass{
private float f=1.0f;
//插入代码到这里
}
  • A class InnerClass{public static float func(){return f;} }
  • B abstract class InnerClass{ public abstract float func(){} }
  • C static class InnerClass{ protected static float func(){return f;} }
  • D public class InnerClass{ static float func(){return f;} }

正确答案: ABCD

解析

主要考核了这几个知识点:
1.静态内部类才可以声明静态方法,所以A错,D错
2.静态方法不可以使用非静态变量,所以C错误
3.抽象方法不可以有函数体,所以B错误