选择习题集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关键字。类方法不能被覆盖。
相比于类方法,对象方法几乎没有限制。