选择习题集2
一、
1、以下描述正确的是 B
A:CallableStatement是PreparedStatement的父接口
B:PreparedStatement是CallableStatement的父接口
C:CallableStatement是Statement的父接口
D:PreparedStatement是Statement的父接口
CallableStatement继承自PreparedStatement
PreparedStatement继承自statement
2、下列程序的运行结果B
public static void main(String args[]) {
Thread t = new Thread() {
public void run() {
pong();
}
};
t.run();
System.out.print("ping");
}
static void pong() {
System.out.print("pong");
}
hheA:pingpong
B:pongping
C:pingpong和pongping都有可能
D:都不输出
在main方法中并没有创建一个新的线程,只是一个简单的方法调用。想要创建线程,需要t.start()。
3、下列关于容器集合类的说法正确的是 C
A:LinkedList继承自List
B:AbstractSet继承自Set
C:HashSet继承自AbstractSet
D:WeakMap继承自HashMap
LinkedList继承自AbstractSequentialList,实现了List接口
AbstractSet是实现了Set接口,本身是一个抽象类。继承自AbstractCollection(抽象类,实现了Collection接口)
HashSet继承自AbstractSet,实现了Set接口
WeakMap不存在于java集合框架的。只有一个叫做WeakHashMap(继承自AbstractMap)。
4、ArrayList list = new ArrayList(20);中的list扩充几次 A
A:0
B:1
C:2
D:3
ArrayList默认的长度是10,但是这里指明了需要多少空间,一次性就可以分配这么多的空间,就不需要扩充了
5、
以下程序的输出结果是? B
public class Example {
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
public static void main(String args[]) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}
public static void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'g';
}
}
A:good and abc
B:good and gbc
C:test ok and abc
D:test ok and gbc
6、下面的方法,当输入为2的时候返回值是多少?D
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
switch case中如果没有break,匹配完之后不会立刻跳出,而是会继续向下执行。
二、
1、 java接口的方法修饰符可以为?(忽略内部接口)D
A:private
B:protected
C:final
D:abstract
接口的方法默认是public abstract
接口的属性默认是 public static final
2、下列程序的运行结果A
public void getCustomerInfo() {
try {
// do something that may cause an Exception
} catch (java.io.FileNotFoundException ex) {
System.out.print("FileNotFoundException!");
} catch (java.io.IOException ex) {
System.out.print("IOException!");
} catch (java.lang.Exception ex) {
System.out.print("Exception!");
}
}
A:IOException!
B:IOException!Exception!
C:FileNotFoundException!IOException!
D:FileNotFoundException!IOException!Exception!
题目中只说会抛出异常,但是没有具体会抛出什么异常
如果抛出一个FileNotFoundException(或其子类),那么最终结果就打印FileNotFoundException
如果抛出一个IOException,或者IOException的子类(不包含FileNotFoundException及其子类),那么最终结果就打印IOException
如果抛出一个Exception(不包含IOException及其子类),那么最终结果就打印Exception.
但是三种情况都有可能,但是无论什么情况都是会输出其中一个不会组合输出。
3、下列哪种异常是检查型异常,需要在编写程序时声明?
A:NullPointerException
B:ClassCastException
C:FileNotFoundException
D:IndexOutOfBoundsException
java中的异常通常分为编译时异常(受查异常、检查型异常)和运行时异常(非受查异常)。
编译时异常(受查异常)需要被try…catch块破获或者通过throws子句声明
运行时异常(非受查异常)需要程序员自己分析代码决定是否处理,如空指针,被0除等
三、
1、下面有关JVM内存,说法错误的是?C
A:程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的
B:Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
C:方法区用于存储JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,是线程隔离的
D:原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的
方法区在JVM中和堆是相同的,是线程共享的,不是隔离的。在方法区中存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。
2、 下面关于程序编译说法正确的是C
A:java语言是编译型语言,会把java程序编译成二进制机器指令直接运行
B:java编译出来的目标文件与具体操作系统有关
C:java在运行时才进行翻译指令
D:java编译出来的目标文件,可以运行在任意jvm上
java编译成的是字节码,再被各系统的jvm翻译成本系统可以识别的机器码,这就是java一次编译多平台应用的跨平台行
java源文件生成的是class文件,和系统无关
字节码不等于机器码,Java程序在运行时字节码才会被jvm翻译成机器码,所以java是解释型语言
java编译时需要注意jvm的版本。
四、
1、下列语句正确的是:
A:形式参数可被字段修饰符修饰
B:形式参数不可以是对象
C:形式参数为方法被调用时真正被传递的参数
D:形式参数可被视为local variable
形式参数可以被视为local variable。形参和局部变量一样不可以离开方法,需要在方法内部使用。
形参只能用final修饰符,其他会引起编译器错误,但是使用这个参数也是有一定的限制,不可以在方法中对参数进行任何的修改,只有在方法内部类中可能会使用。
形参的值在调用时根据调用者更改,实参则用自身的值更改形参的值,也就是说真正被传递的是实参。
2、在java7中,下列哪个说法是正确的:
A:ConcurrentHashMap使用synchronized关键字保证线程安全
B:HashMap实现了Collection接口
C:Arrays.asList方法返回java.util.ArrayList对象
D:SimpleDateFormat对象是线程不安全的
HashMap在单线程中使用效率更高,在多线程中可以使用HashTable来保证线程安全。
HashTable中使用synchronized来保证线程安全,是对整张表进行加锁。
concurrentHashMap采用分段加锁的机制来确保安全
3、给定代码,第三行将输出什么 B
public class SwitchTest{//1
public static void main(String[] args) {//2
System.out.println("value="+switchit(4));//3
}//4
public static int switchit(int x) {
int j=1;
switch (x) {
case 1:j++;
case 2:j++;
case 3:j++;
case 4:j++;
case 5:j++;
default:j++;
}
return j+x;
}
}
A:value=6
B:value=8
C:value=3
D:value=5
E:value=4
case中没有break,就会一直向下执行,这段代码会从case4一直向下执行,j=4,最后返回8
五、
1、 下列说法正确的是
A:在类方法中可用this来调用本类的类方法
B:在类方法中调用本类的类方法可直接调用
C:在类方法中只能调用本类的类方法
D:在类方法中绝对不能调用实例方法
在类方法中调用本类的类方法可以直接调用。
实例方法也叫做对象方法。类方法是属于整个类的,实例方法是属于类的某个对象的。
所以类方法是有权限的:类方法中不能引用对象变量。类方法中不能调用类的对象方法。在类方法中不能调用super、this关键字。类方法不能被覆盖。
相比于类方法,对象方法几乎没有限制。