java专项训练第二天

问题1:下面代码的打印结果为?

package day01;

public class Text02 {
    public static void main(String[] args) {
        Text02 t=new Text02();
        t.first();
    }

    public void first()
    {
        int i=5;
        Value v=new Value();
        v.i=25;
        second(v,i);
        System.out.print(" "+v.i);
    }

    public void second(Value v,int i)
    {
        i=0;
        v.i=20;
        Value val=new Value();
        v=val;
        System.out.print(v.i+" "+i);
    }

}
class Value{
    public int i=15;
}


我的解题思路:

1.首先快速浏览一遍,确定此段程序的基本内容:
两个类:
主类Text02 :一个主方法。 两个动作方法
其他类Value:只声明了一个public的变量i=15

2.然后看主类的两个动作方法:

/*
此方法主要内容为:
用Value类创建实例并进行相关操作
*/
 public void first()
    {
        int i=5;//声明一个i=5
        Value v=new Value();//创建Value实例v
        v.i=25;//令对象v里的变量i=25
        second(v,i);//将对象v的“复印”和i=5传入second中
        System.out.print(""+v.i);//上一句是将v的复印传入,这里的v的地址还是原来的,故此处输出为20
    }
    
    /*
   此方法主要内容为:
   对first里创建的对象进行新的操作
  */
    public void second(Value v,int i)
    {
        i=0;//令i=0
        v.i=20;//令对象v里的变量i=20
        Value val=new Value();//创建新实例val
        v=val;//将v的地址引用改为val,此时v就和val一样了,即v.i=15
        System.out.print(v.i+" "+i);//所以此处的输出为15  0
    }

所以最后的运行结果为:15 0 20

总结:此题涉及的有java的传值机制和对象的区分,我个人觉得关键在于是否真正理解对象实例。

问题2:下面代码是否可以编译通过,如果编译通过,则执行结果为?

package day01;
public class Text03 {
    static int x=10;
    static{
        x+=5;
    }
    public static void main(String[] args) {
        System.out.println("x="+x);
    }
    static{
        x/=3;
    }
}

我的答案是:可以编译,结果为x=5

下面是思路:

首先我得理解static的作用是什么?
用static修饰的变量,方法,类都在编译期会优先被实例化(执行),执行顺序是按代码由前到后的。

所以我们看上面代码就可以很简单的得到答案。(主方法最后执行)

总结:要理解静态static的工作原理。

问题3:下面代码的运行结果为?

public class Text04 {
    public static void main(String[] args) {
        char s[]={'1','3','1','4','5','2','0'};
        int v1=0,v2=0,v3=0,v4=0;
        for(int i=0;i<7; i++)
        {
            switch (s[i]){
                default: v4++;
                case '1': v1++;
                case '2': v2++;
                case '3': v3++;
            }
        }
        System.out.println(v4+" "+v1+" "+v2+" "+v3);
    }


}

本题的关键是对default的理解和对case执行原则的理解:

defalut的执行原则是当case中找不到对应的情况时执行,如果没有break,则将继续执行下去,直到执行完后面所有语句。

case中如果没有break,则将继续执行下去,直到执行完后面所有语句。

所以上面代码的运行结果为:
3,5,6,7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小牧之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值