基础题-day01

1.局部内部类

例题.png

局部内部类存在于方法块或者语句块中,不能有访问控制修饰符和static进行修饰


评论解答.png

2.接口

image.png
  • jdk1.8前的接口中只能有public abstarct类型的抽象方法和public static final类型的常量
  • jdk1.8之后,接口中可以有static和default方法,其中由于接口可以多继承,如果多继承的接口中存在相同的静态方法不会报错,但是如果存在相同的默认方法,那么必须重写,否则编译报错。因为静态方法直接由原接口.调用,但是默认方法是可以继承下去的,所以必须只能有一个,就不能存在二义性。
interface  A{
    static void b(){

    }
    default void c(){

    }
}
interface  A1{
    static void b(){

    }
    default void c(){

    }
}
interface C extends  A,A1{

    @Override
    default void c() {

    }
}

3.继承和多态

image.png

解析:
多态:在运行时表现子类特性,当代码在new Sub的时候需要先去初始化父类,在运行callName的时候会去执行子类的callName方法,此时由于子类的baseName还没有初始化,所以就输出null

3.2

image.png

解析:

  1. new B()-->super(5)-->子类.setValue(5)-->super.setValue(10)-->super.value=10
  2. 26行,getValue()-->super.value=11-->子类.setValue(11)-->super.value=22,第一次输出22
  3. 26行value返回是11,子类.setValue(8)-->super.value=16
  4. 3行,getValue-->return 17,finally中setValue(17)-->super.setValue(34)-->super.value=34,第二次输出34
  5. 第3行,返回17,第三次输出17

4.ClassLoader

image.png

解析:
这题就比较坑了,Java中的ClassLoader共有四种,从底到顶分别为Custom、AppClassLoader、ExtClassLoader、BootStrap,但是需要注意的是,AppClassLoader的别名可以叫SystemAppClass,所以A是对的。
双亲委派其实就是:现在需要Load A.class,那么就会按照这个顺序Custom->Application->ExtClassLoader->BootStrap进行loadClass,看看之前有没有Load进来过。没有Load过呢,就会按照这个顺序进行findClass, ExtClassLoader->Application->Custom,比如说问你如何打破双亲委派,很显然,双亲委派是通过loadClass方法中不断使用parent.loadClass实现的,所以直接重写loadClass方法就可以打破了。

5.二进制运算

image.png

解析:这道题也是略有点坑,总觉得题目没有说清楚,首先明确一点,这里的a,b已经都是补码的状态了。其次需要知道-b=(~b)+1
开始运算:

-b = ~b+1 = "1000,0000,....,0000,0001";
a =         "1111,0000,....,0000,0000";
a-b=0111,0000,....,0000,0001//这里是最高位产生了溢出,最终变成了正数,选C

6.编译几个class文件

image.png

解析:
一个Java文件中只能有一个主类,但是里面有几个类声明就会编译出几个class文件

你可能感兴趣的:(基础题-day01)