Java题集

Java题集

第一题

以下代码的输出结果

public class Base {

    private String basename = "base";
    public Base() {
        callName();
    }
    public void callName() {
        System.out.println(basename);
    }

    static class Sub extends Base {
        private String basename = "sub";
        public void callName() {
            System.out.println(basename);
        }
    }

    public static void main(String[] args) {
        Base b = new Sub();
        System.out.println(b);
    }
}

解析:
+ Base b = new Sub();
+ Base b =直接忽略,从 new Sub();开始
+ 类加载器加载 Base,Sub 类到jvm;
+ 为Base,Sub 类中的两个属性baseName 分配存储空间,但是不初始化;注意:属性的初始化时放在构造器中,按照代码顺序执行的。
+ new Sub()会调用Sub的无参构造器,而在这个构造器中会隐式调用父类Base的无参构造器;
+ 父类Base的构造器中代码本质是
public Base() {
baseName = “base”;
callName();
}
即父类的属性baseName 的值为base。但为何输出null?
+ 因为父类构造器方法是在子类中调用的,即大环境是子类。此时,调用的方法callName()当然是指子类的方法。而这个方法打印的属性baseName 当然也是子类的。那现在子类的属性baseName的值是多少呢?答案是null.因为此时子类Sub的构造器内代码本质是:
super();
baseName=”sub”;
此时baseName="sub"还没执行。因此,最后的值当然是null。

第二题

编写一段代码,将一个正整数N用二进制表示并转换为一个String类型的值s

public class Base {

    /**
     * 十进制转二进制:
     * ①整数值除以2取余,逆向排序
     * ②小数值乘以2取整,顺向排序
     */
    public static String toBinaryString(long n) {
        String s = "";
        for(long i = n; i > 0; i /= 2) {
            s = (i % 2) + s;
        }
        return s;
    }
    public static void main(String[] args) {
        System.out.println(toBinaryString(4));
        //等同于
        System.out.println(Long.toBinaryString(4));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值