1.接口中的方法只能使用public 和abstract修饰
A:接口中不能有方法体
B:接口中方法只能用public和abstract修饰
总结:
接口中的方法默认public abstract 修饰
接口中的变量默认public final修饰
2.关于构造方法
-
识别合法的构造方法;1:构造方法可以被重载,一个构造方法可以通过this关键字调用另一个构造方法,this语句必须位于构造方法的第一行;2 当一个类中没有定义任何构造方法,Java将自动提供一个缺省构造方法;
重载:方法的重载(overload):重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载。
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。