Java基础做题记录

1.接口中的方法只能使用public 和abstract修饰


A:接口中不能有方法体

B:接口中方法只能用public和abstract修饰

总结:

接口中的方法默认public abstract 修饰

接口中的变量默认public final修饰

2.关于构造方法

  • 识别合法的构造方法;
    1:构造方法可以被重载,一个构造方法可以通过this关键字调用另一个构造方法,this语句必须位于构造方法的第一行;
    重载:方法的重载(overload):重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载。

    2 当一个类中没有定义任何构造方法,Java将自动提供一个缺省构造方法;
    3 子类通过super关键字调用父类的一个构造方法;
    4 当子类的某个构造方法没有通过super关键字调用父类的构造方法,通过这个构造方法创建子类对象时,会自动先调用父类的缺省构造方法
    5 构造方法 不能被static、final、synchronized、abstract、native修饰,但 可以被public、private、protected修饰
    6 构造方法不是类的成员方法;
    7 构造方法不能被继承。

3.关于原码反码和补码


首先源码,反码,和补码的关系

正数的反码和补码都是自身

负数的反码是符号位不变,别的位去反,负数的补码是符号位不变,源码取反加一

Java中使用补码表示一个数的。

short是2个字节,a = 00000 00000 10000 00000,现在转成byte,byte是一个字节,所以b = 1000 0000,此时b是一个负数的补码,先求其反码为1111 1111(符号位不变,别的位减一),再求其源码等于1000 0000(符号位不变,别的位取反),首先这是一个负数,其次这个数照理代表的是-0,这个数被规定为-128。

参考https://www.nowcoder.com/test/question/done?tid=16363503&qid=3459#summary

4.关于集合的总结

  • Collection
    -----List
        -----LinkedList 非同步
        ----ArrayList 非同步,实现了可变大小的元素数组
        ----Vector 同步
    ------Stack
    -----Set 不允许有相同的元素

    Map
    -----HashTable 同步,实现一个key--value映射的哈希表
    -----HashMap 非同步,
    -----WeakHashMap 改进的HashMap,实现了“弱引用”,如果一个key不被引用,则被GC回收 

5.Java中方法重写的规则

方法重写(override)两同两小一大原则:

方法名相同,参数类型相同

子类的返回类型小于等于父类方法返回类型(这里的大小指的是什么意思

子类抛出异常小于等于父类方法抛出异常

子类访问权限大于等于父类方法访问权限。

参考:https://www.nowcoder.com/test/question/done?tid=16363503&qid=44624#summary

6.


分析:A:final修饰的类不能被继承,而抽象类是必须要被继承才有意义的,因此,final是不能用来修饰抽象类的。

B:final修饰的方法不能被重写,而继承抽象类必须要重写其方法,所以final不能修饰抽象方法

C:抽象方法只做声明,并不实现。

总结:final可以用修饰类,变量和方法,final修饰的类不能被继承,final修饰方法不能别重写,final修饰的变量不能被修改,一旦获得初始值,改变量就不能被重新赋值。

7.关于final的进一步理解:


final修饰的方法不能被重写的,但是这里并没有错误,因为方法是private的,也就是子类没有继承父类的方法,因此子类的run方法根父类的run方法无关,并不是覆盖。所以输出的是"Car"。

疑问:priavte的变量是能被继承吗


8.关于静态方法的理解


非静态方法不能被静态方法引用,这里静态方法是在什么时候加载的(深入理解Java虚拟机中只提到到了静态代码块和静态变量,并没有提到静态方法)?当类加载的时候,static静态方法随着类的加载而初始化,此时实例对象还没有被创建,非静态变量要等到实例对象创建后才会被初始化,所以无法被引用。

9.创建非静态内部类对象

非静态内部类可以看成外部类的成员

静态内部类可以看成是外部类的静态成员


首先要创建外部类的实例

Enclosingone.InsideOne ei = eo.new InsideOne();

InsideOne ei = eo.new InsideOne();    //注意使用这种方式,要导入类名,因为编译器找不到class InsideOne


猜你喜欢

转载自blog.csdn.net/chenkaibsw/article/details/80780804