1、抽象类与抽象方法
具有抽象方法的类必然是抽象类
抽象类不一定具有抽象方法
2、抽象类、接口、抽象方法
抽象类中可以有抽象方法,但是接口中不能有抽象方法
3、类初始化顺序
父类静态块 静态属性 子类静态块 静态属性 父类初始化块 或者 父类属性 父类构造函数
子类初始化块 或者 子类属性 子类构造函数
父类构造函数中可以使用子类静态属性,所以静态的东西一般都会先初始化
4 java中的集合
Collection—>Quene
Collection—>List=>ArrayList LinkedList
Collection->Set->sortedSet=>TreeSet
=>HashSet<---(继承)LinkedHashSet
Map->SortedMap=>TreeMap
=>HashMap
HashMap的数据结构是数组(Entry)加链表(key相同,那么value将被上一个value引用)
HashSet的数据结构是HashMap
ArrayList的数据结构本质上是数组
LinkedList为双向链表并非继承于ArrayList
Set是一个集合,不含有重复元素,也是因为其本质上是HashMap通过Equals来判断是否重复
Collection接口通用的接口方法比如说size、interator
WeakHashMap 是为了解决键值已经死亡,而value无法取出这个问题,如果键值死亡,那么value值也随之不会引用到,而放入到垃圾对列中
5、ClassLoader
classloader bootstrapclassloader extclassloader appclassloader(systemclassloader) customerclassloader
bootstrapclassloader 是加载jdk/lib下的jar包中的class,本地代码进行编写的
extclassloader 是加载jdk/ext javax下扩展class
appclassloader是加载应用下的class classpath下的class
cutomerclassloader是自定义classloader
先从parent classloader进行加载,如果父无法加载那么就用子加载
6、接口和抽象类
类可以实现多个接口,但是不能继承多个类
接口是like -a 侧重于行为的相似,而抽象类侧重于is-a。
使用抽象类一般是在继承的时候使用抽象类,但是不恰当的引入继承会造成一些问题。
继承可以既继承属性又继承行为。另外继承是一种紧耦合,继承的滥用可以造成继承层次过多。另外,有些设计模式比如模版和策略,模版使用继承而策略使用接口,使用接口更容易进行算法的替换。
优先使用聚合而非继承。就是因为继承是一种紧耦合,往往导致继承了不该继承的方法,或者导致继承的层次过多。
7、面向对象设计的几个原则
开闭原则 对修改是封闭的,对扩展是开放的
单一职责原则 类的职责应该只有一个,应该只有一个修改它的原因。
迪米特替换原则 子类可以完全替换父类,客户端并不知道调用对象被替换了。
依赖倒置原则 依赖抽象而不是依赖实现
接口隔离原则 依赖一个接口,应该只是依赖其需要的接口
8、默认可见性为包可见性,相当于friendly 友元
9、JVM与JDK的区别
JDK包含JVM,JVM是运行时环境,但是JDK包括了开发环境,对源代码进行编译、然后调用与java类库运行在jvm上。
10、动态绑定就是方法调用的类的类型是动态确定的而不是编译时就确定的