美文网首页
Java题集

Java题集

作者: MVBin | 来源:发表于2017-05-23 11:09 被阅读31次

    第一题

    以下代码的输出结果

    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));
        }
    }

    相关文章

      网友评论

          本文标题: Java题集

          本文链接:https://www.haomeiwen.com/subject/nzmwxxtx.html