1.以下关于 abstract 关键字的说法,正确的是(D)。
A.abstract 可以与 final 并列修饰同一个类。
B.abstract 类中不可以有 private 的成员。
C.abstract 类中必须全部是 abstract 方法。
D.abstract 方法必须在 abstract 类或接口中。
解析:
final的类不能被重写和继承;而abstract的类是抽象类,本身没有实现,只能通过子类来实现,也就是说必须被继承。所以说它们是没法同时做修饰符的。
abstract 类中可以有abstract 方法和非抽象方法,但abstract 方法必须在 abstract 类或接口中
2.以下方法,(B)不是对 add 方法的重载。
public class Test{
public void add(int x,int y,int z){
//todo
}
}
A.public int add(int x,int y,float z){return 0;}
B.public int add(int x,int y,int z){return 0;}
C.public void add(int x,int y){ }
D.以上都不是
解析:
比较项 | 位置 | 方法名 | 参数表 | 返回值 | 访问修饰符 |
---|---|---|---|---|---|
方法重写 | 子类 | 相同 | 相同 | 相同或是其子类 | 不能比父类更严格 |
方法重载 | 同类 | 相同 | 不相同 | 无关 | 无关 |
3.关于 Java 堆,下面说法错误的是(D)。
A.所有类的实例都是在堆上分配内存。
B.对象所占的堆内存是由自动内存管理系统回收。
C.堆内存由存活和死亡的对象,空闲碎片区组成。
D.数组是分配在栈中的。
解析:数组是对象,所有对象存储在堆内存中,而基本数据类型存储在栈内存中。
4.观察以下代码,输出结果是(C)。
public class MyClass{
int i = -1;
private void action(){
int i = 0;
i++;
}
public static void main(String[] args){
MyClass mc = new MyClass();
mc.action();
System.out.println(mc.i);
}
}
A.1 B. 0 C. -1 D.抛出异常
解析:输出结果为mc.i,这里的i是全局变量,不会被action里面的局部变量影响
5.观察下面的代码,正确的结果是(A)。
class Letter{
char c = ‘x’;
}
public class PassObject{
static void f(Letter y){
y.c = ‘z’;
}
public static void main(String[] args){
Letter x = new Letter();
x.c = ‘a’;
f(x);
System.out.println(x.c);
}
}
A.z B. a C. x D. null
6.观察如下代码,正确显示结果为(C)。
class A{
void callme(){
System.out.println(“Inside A’s callme()method”);
}
}
class B extends A{
void callme(){
System.out.println(“Inside B’s callme() method”);
}
}
class C extends B{
void callme(){
System.out.println(“Inside C’s callme() method”);
}
}
public class Dispatch{
public static void main(String args[]){
A a = new C();
a.callme();
}
}
A.Inside A’s callme()method
B.Inside B’s callme()method
C.Inside C’s callme()method
D.抛出异常
解析:
A a = new C();
a为C对象,虽然有继承,但callme()方法重写之后,调用C重写之后的方法【子类重写方法,声名一个子类的对象,调用的方法是子类的方法】
7.观察如下代码,正确的显示结果是(A)。
public class MyClass{
public static void main(String[] args){
String s1 = “hello”;
String s2 = “hello”;
String s3 = new String(“hello”);
String s4 = new String(“hello”);
System.out.println((s1 == s2) + “/” + (s3 == s4));
}
}
A.true/false
B.true/true
C.false/true
D.false/false
解析:
String s1 = "hello"时,数据存储在常量池中,值一样,地址也一样。 String s3 = new
String(“hello”)时,直接在堆中创建对象,地址会发生改变 “==”判断 地址是否一致 equals() 判断值是否相等
8.观察如下代码,正确的显示结果是(B)。
class MyException extends Exception{
public MyException(String msg){
super(msg);
}
}
public class MyClass {
public static void main(String[] args){
try{
if(true) throw new MyException(“bad”);
System.out.println(" OK");
}catch(MyException e){
System.out.print(e.getMessage());
}
System.out.print(" bye");
}
}
A. bad
B. bad bye
C. OK bad
D. OK bad bye
解析:if(true) throw new MyException(“bad”);抛出异常时,不执行try异常后面的语句,由于异常被捕获,打印异常信息。代码继续执行,打印bye
9.下列说法中,不正确的是(B)。
A.一个 Java 源程序经过编译后,得到的文件的扩展名一定是.class。
B.一个 Java 源程序经过编译后,得到的结果文件数也只有一个。
C.一个 Java 源程序只能有一个 public class 类定义,且源文件的名字与 public class 的类
名相同,扩展名必须是.java。
D.一个 Java 源程序可以包含多个 class 类。
解析:一个JAVA源文件里面可以有内部类,其他类(有且仅有一个类可以声明为public),所以,编译后,可以有多个.class文件
10.欲构造 ArrayList 类的一个实例,此类实现继承了 List 接口,下列方法正确的是(B)。
A.ArrayList myList = new Object();
B.List mylist = new ArrayList();
C.ArrayList myList = new List();
D.List myList = new List();
11.下列说法正确的是(AC)(多选)。
A.LinkedList 实现了继承自 List。
B.AbstractSet 继承自 Set。
C.HashSet 继承自 AbstractSet。
D.WeakMap 继承集成自 HashMap。
解析:
List有两个实现类:ArrayList和LinkedList
AbstractSet 继承于AbstractCollection并且实现了大部分Set接口。
12.Thread 类用来创建和控制线程,一个线程从下面(B)方法开始执行。
A.init()
B.start()
C.run()
D.notifyAll()
解析: 调用start()方法开启线程来执行任务(start()方法会调用run()以便执行任务)
13.下面关于 Java 语言实例方法和类方法的说法,正确的是(BC)(多选)。
A.实例方法可以直接通过类名调用。
B.类方法可以直接通过类名调用。
C.实例方法可以操作实例变量也可以操作类变量。
D.类方法可以操作实例变量也可以操作类变量。
解析:
类方法可以通过类名调用,实例方法不能通过类名调用,因为类方法在该类被加载到内存时,就分配了相应的入口地址。
类中的类方法不可以操作实例变量,也不可以调用实例方法,因为在类创建对象之前,实例成员变量还没有分配内存,而且实例方法也没有入口地址
14.在 Java 语言当中,(C)关键字用来实现同步。
A. native
B. Static
C. synchronized
D. abstract
15.以下关于 Java 的 List Set 和 Map 集合的描述,错误的是(BC)(多选)。
A) List 集合的元素是有序的,元素可以重复
B) HashSet 集合的元素是无序的,可以重复的;TreeSet 是有序的,基于 TreeMap 实现
的
C) HashMap 的 Key 必须唯一,Value 同样不可以重复
D) LinkedList 线程不安全,它是链表结构
E) List 集合具有以下几种常用的方法:add(E e) clear() hashCode() iterator()
toArray()
解析: HashSet 集合的元素不可重复的,HashMap的 Value可以重复
16.正则表达式“\d+.?\d”,在匹配下列字符串时结果失败的是(C)。*
A.12.5 B.1.25 C.以上都成功 D.以上都失败
解析:
\d数字字符匹配。等效于 [0-9]。
- 零次或多次匹配前面的字符或子表达式。
- 一次或多次匹配前面的字符或子表达式
\ 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。