Java题集

来源:互联网 发布:金融网络聊天技巧 编辑:程序博客网 时间:2024/06/07 08:48

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
原创粉丝点击