1.有以下类定义:
abstract class Animal {
abstract void say();
}
public class Cat extends Animal {
public Cat() {
System.out.printf("I am a cat");
}
public static void main(String[] args) {
Cat cat = new Cat();
}
}
运行后:
A.I am a cat
B.Animal能编译,Cat不能编译
C.Animal不能编译,Cat能编译
D.编译能通过,但是没有输出结果
答:B
析:一个实体类继承一个抽象类,必须实现抽象类中的抽象方法。
2.下列有关JVM内存,说法错误的是
A.程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的
B.虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
C.方法区用于存储JVM加载的类信息、常量、静态变量、以及编译器编译后的代码等数据,是线程隔离的
D.原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的
答:C
析:方法区是线程共享的。
3.下列程序段的输出结果是
public void complicatedexpression_r() {
int x=20, y=30;
boolean b;
b = x > 50 && y > 60 || x > 50 && y < -60 || x < -50 && y > 60 || x < -50 && y < -60;
System.out.println(b);
}
public class Print {
static boolean out(char c) {
System.out.print(c);
return true;
}
public static void main(String[] argv) {
int i = 0;
for(out('A'); out('B') && (i < 2); out('C')){
i++;
out('D');
}
}
}
A. ABDCBDCB
B. BCDABCD
C.编译错误
B:java源文件生成的是class文件,与系统无关。
C:字节码和机器码不是一回事,java运行时字节码才会被jvm翻译成机器码,所以说java是解释性语言。
D:jvm的版本是会影响的。
sleep方法阻塞一个线程并不会终止。
创建一个新的线程时也不会终止另一个线程。
当抛出一个异常后程序会结束,所以线程也会被终止。
阻塞:进入阻塞态的线程还可以再进入“就绪态”,等待下一次 CPU 时间
public static void main(String args[]) {
Thread t = new Thread() {
public void run() {
dianping();
}
};
t.run();
System.out.print("dazhong");
}
static void dianping() {
System.out.print("dianping");
}
A.dazhongdianping
B.dianpingdazhong
C.a和b都有可能
D.dianping循环输出,dazhong夹杂在中间
答:B
析:本题中,线程t并没有启动,只是调用了run()方法,程序中运行的线程依然只有一个,那么程序会按照顺序执行,即先运行run(),run()方法调用dianping()方法输出"dianping",程序继续向下执行输出"dazhong"。如果本题中t线程调用start()方法,就会出现C选项的情况。
9.public interface IService {String NAME = “default”;}默认类型等价表示是哪一项
A public String NAME=“default”;
B public static String NAME=“default”;
C public static final String NAME=“default”;
D private String NAME=“default”;
答:C
析:接口中的变量默认是public static final 的,方法默认是public abstract 的。
10.类Test1定义如下,将以下哪种方法插入行3是不合法的
public class Test1 { //1
public float aMethod(float a,float b) {} //2
//3
} //4