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. Animal不能编译,Cat能编译
B. Animal能编译,Cat不能编译
C. I am a cat
D. 编译能通过,但是没有输出结果
答案:B。 一个实体类继承一个抽象类,必须实现抽象类中的抽象方法。
2.下面程序的运行结果:( )
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. a和b都有可能
B. dianpingdazhong
C. dazhongdianping
D. dianping循环输出,dazhong夹杂在中间
答案:B。 如果调用run(),选用B;如果调用start(),选C。
因为在main()方法中,没有创建一个新的线程,仅仅是调用了run()方法,程序就只能顺序执行;开启线程是调用start()方法,这样才能并发执行。
3.下列语句正确的是:
A:形式参数可被视为local variable(局部变量)。
B:形式参数可被字段修饰符修饰。
C:形式参数为方法调用时,真正被传递的参数。
D:形式参数不可以是对象。
答案:A
解析:
A:形式参数和局部变量一样,生命周期随着方法的结束而终结,离不开方法。在Java中形式参数都是值传递的,所以可以视为一个局部变量。
B:Java中字段修饰符有:public、protected、default、private、final、static。在形式参数中,如果要使用字段修饰符,只能使用final修饰符。其他任何修饰符都能引起编译器错误。
C:java中方法没有引用调用,调用的形参都是拷贝的。
D:形式参数可以是值或者对象。
4.给定代码:
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
答案:B。 因为没有break,到case 4之后就顺序执行j++3次后为4,4+4=8.
5.指出下列程序运行的结果()
指出下列程序运行的结果()
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 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
答案:B (而我选的答案是D)
解析:
public void change(String str,char ch[]){
//这里的str 不同于外面的 str ,
// 这里的意思是, String str 在栈空间 '新建' 一个str , 其实那里已有一个 str ,就是上面那个
// 他们两个并不一样 ,这个str 是局部变量,依赖于方法 , 只要方法结束,它就自动消亡,而外面那个还在,
// 所以这里就是 ,把外面的 str 传进来,把值赋给 这个 str ,此时两个都是 ''good''
// 而char [] 分析则不同 ,
// 请先 记住 ,ch [0],ch[1] ,ch[2] ...都是存在堆空间的 ,即是他们的地址空间,
// 对于这种引用类型的变量(例如数组,对象),他们其实是把传进来的值直接放在引用地址.
// 即 ch[0] 始终只有一 个,并且指向堆空间,参数传进来也是在堆空间里面。
str="test ok";
// 然后执行这一步时 , 这里面的str值就变化了 ,即变为 test ok , 请记住此时在栈空间是有两个 str 哦
// 外面依然是 good , 可里面的 变成 test ok , 好的 ,继续 ...
ch[0]='g';
// 据上面分析,很显然 , ch[0] 始终是一个 ,并且存放和修改都是直接在堆空间, 所以这里ch[0]变成 'g'
}