java方向每日一题(错题)1

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'
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值