1.可将语句块或方法设为同步使用的语句是( A)
A synchronized
B static
C abstract
D final
解析:
synchronized 用于方法或者代码块前,使此方法或者代码块变成同步的
static 用于声明静态变量
abstract 用于定义抽象类或者方法
final 用于声明常量,即只能赋值一次的变量
2.下面代码的输出结果是什么?D
public class ZeroTest {
public static void main(String[] args) {
try{
int i = 100 / 0;
System.out.print(i);
}catch(Exception e){
System.out.print(1);
throw new RuntimeException();
}finally{
System.out.print(2);
}
System.out.print(3);
}
}
A.3
B.123
C.1
D.12
解析:
Try…catch…finally与直接throw的区别:try catch是直接处理,处理完成之后程序继续往下执行,throw则是将异常抛给它的上一级处理,程序便不往下执行了。本题的catch语句块里面,打印完1之后,又抛出了一个RuntimeException,程序并没有处理它,而是直接抛出,因此执行完finally语句块之后,程序终止了
3.能单独和finally语句一起使用的块是(A )
A.try
B.catch
C.throw
D.throws
解析:
使用try…catch块捕获时可以没有catch块,但当没用catch块的时候必须得有finally块.
4.java中下面哪个能创建并启动线程(C)
public class MyRunnable implements Runnable {
public void run() {
//some code here
}
}
A.new Runnable(MyRunnable).start()
B.new Thread(MyRunnable).run()
C.new Thread(new MyRunnable()).start()
D.new MyRunnable().start()
解析:
创建并启动线程的过程为:定义线程—》实例化线程—》启动线程。
一 、定义线程: 1、扩展java.lang.Thread类。 2、实现java.lang.Runnable接口。
二、实例化线程: 1、如果是扩展java.lang.Thread类的线程,则直接new即可。
2、如果是实现了java.lang.Runnable接口的类,则用Thread的构造方法:
Thread(Runnable target)
Thread(Runnable target, String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
所以A、D的实例化线程错误。
三、启动线程: 在线程的Thread对象上调用start()方法,而不是run()或者别的方法。
5.What is displayed when the following is executed; A
double d1=-0.5;
System.out.println("Ceil d1="+Math.ceil(d1));
System.out.println("floor d1="+Math.floor(d1));
A.Ceil d1=-0.0
floor d1=-1.0
B.Ceil d1=0.0
floor d1=-1.0
C.Ceil d1=-0.0
floor d1=-0.0
D.Ceil d1=0.0
floor d1=0.0
E.Ceil d1=0
floor d1=-1
解析:
ceil:大于等于 x,并且与它最接近的整数。
floor:小于等于 x,且与 x 最接近的整数。
6.(多选)关于Java中的数组,下面的一些描述,哪些描述是准确的:( ACE )
A.数组是一个对象,不同类型的数组具有不同的类
B.数组长度是可以动态调整的
C.数组是一个连续的存储结构
D.一个固定长度的数组可类似这样定义: int array[100]
E.两个数组用equals方法比较时,会逐个便利其中的元素,对每个元素进行比较
F.可以二维数组,且可以有多维数组,都是在Java中合法的
解析:
Java中没有多维数组,多维数组的本质还是一维数组
7.关于JAVA的垃圾回收机制,下面哪些结论是正确?B
A.程序可以任意指定释放内存的时间
B.JAVA程序不能依赖于垃圾回收的时间或者顺序
C.程序可明确地标识某个局部变量的引用不再被使用
D.程序可以显式地立即释放对象占有的内存
解析:
java提供了一个系统级的线程,即垃圾回收器线程。用来对每一个分配出去的内存空间进行跟踪。当JVM空闲时,自动回收每块可能被回收的内存,GC是完全自动的,不能被强制执行。程序员最多只能用System.gc()来建议执行垃圾回收器回收内存,但是具体的回收时间,是不可知的。当对象的引用变量被赋值为null,可能被当成垃圾。局部变量在栈上,必须用finalize()释放.
8.关于访问权限,说法正确的是? ( A)
A. 类A和类B在同一包中,类B有个protected的方法testB,类A不是类B的子类(或子类的子类),类A可以访问类B的方法testB
B. 类A和类B在同一包中,类B有个protected的方法testB,类A不是类B的子类(或子类的子类),类
A不可以访问类B的方法testB
C. 访问权限大小范围:public > 包权限 > protected > private
D. 访问权限大小范围:public > 包权限 > private > protecte
解析:
9.以下哪个类包含方法flush()?(B)
A. InputStream
B. OutputStream
C. A 和B 选项都包含
D. A 和B 选项都不包含
解析:
方法flush()刷新此输出流并强制写出所有缓冲的输出字节
10.关于 访问权限说法正确 的是 ? ( B )
A. 类定义前面可以修饰public,protected和private
B. 内部类前面可以修饰public,protected和private
C. 局部内部类前面可以修饰public,protected和private
D. 以上说法都不正确
解析:
局部内部类只能abstract或者final修饰
11.以下代码输出什么 B
public static void main(String[] args) {
Thread t = new Thread() {
public void run() {
360DW();
}
};
t.run();
System.out.print("DW");
}
static void 360DW() {
System.out.print("360");
}
A.DW
B.360
C.360DW
D.都不输出
解析:
不理解,留于以后解释
12.java8中,下面哪个类用到了解决哈希冲突的开放定址法 C
A.LinkedHashSet
B.HashMap
C.ThreadLocal
D.TreeMap
解析:
Threadlocal使用开放定址法解决hash冲突,Hashmap使用链地址法解决hash冲突
13.子类要调用继承自父类的方法,必须使用super关键字。B
A. 正确
B. 错误
解析:
1、子类构造函数调用父类构造函数用super
2、子类重写父类方法后,若想调用父类中被重写的方法,用super
3、未被重写的方法可以直接调用。
14.(多选)对Collection和Collections描述正确的是 BD
A.Collection是java.util下的类,它包含有各种有关集合操作的静态方法
B.Collection是java.util下的接口,它是各种集合结构的父接口
C.Collections是java.util下的接口,它是各种集合结构的父接口
D.Collections是java.util下的类,它包含有各种有关集合操作的静态方法
解析:
java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式;
java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全等操作
15.(多选)以下哪种方式实现的单例是线程安全的 ABCD
A.枚举
B.静态内部类
C.双检锁模式
D.饿汉式
解析:
1.饿汉式(线程安全,调用效率高,但是不能延时加载); 2.懒汉式(线程安全,调用效率不高,但是能延时加载); 3.Double CheckLock实现单例:DCL也就是双重锁判断机制(由于JVM底层模型原因,偶尔会出问题,不建议使用); 4.静态内部类实现模式(线程安全,调用效率高,可以延时加载); 5.枚举类(线程安全,调用效率高,不能延时加载,可以天然的防止反射和反序列化调用)。
16.以下代码将打印 B
System.out.println(10%3*2);
A.1
B.2
C.4
D.6
解析:
% 与 * 优先级一样
18.下面有关java实例变量,局部变量,类变量和final变量的说法,错误的是? B
A.实例变量指的是类中定义的变量,即成员变量,如果没有初始化,会有默认值。
B.局部变量指的是在方法中定义的变量,如果没有初始化,会有默认值
C.类变量指的是用static修饰的属性
D.final变量指的是用final 修饰的变量
解析:
实例变量: 定义在类中的变量是类的成员变量,可以不进行初始化, java 会自动进行初始化。(如果是引用类默认初始化为 null, 如果是基本类型,默认初始化为 0 )
局部变量 :定义在方法中的变量,必须进行初始化,否则不通过编译。
类变量 :(也叫作静态变量)是类中独立于方法之外的变量,用 static 修饰。
final 修饰的变量: 也称为常量。
19.java接口的方法修饰符可以为?(忽略内部接口) D
A.private
B.protected
C.final
D.abstract
解析:
接口所有方法全是抽象方法只能 public abstract修饰 (默认public abstract修饰 ),属性默认public static final修饰。
20.观察以下代码,下列哪些针对代码运行结果的描述是正确的 ? A
class Car extends Vehicle
{
public static void main (String[] args)
{
new Car(). run();
}
private final void run()
{
System. out. println ("Car");
}
}
class Vehicle
{
private final void run()
{
System. out. println("Vehicle");
}
}
A.Car
B.Vehicle
C.Compiler error at line 3
D.Compiler error at line 5
E.Exception thrown at runtime
解析:
首先final声明的方法是不能被覆盖的,但是这里并不错误,因为方法是private的,也就是子类没有继承父类的run方法,因此子类的run方法跟父类的run方法无关,并不是覆盖。new Car().run()也是调用子类的run方法。