方法重写
- 指子类重写父类方法,实例变量和静态方法跟随左边,非静态类方法跟随右边;
- 方法名和参数必须相同
- A a = new A();
- B b = new A();
- 如果子类重写了相同的方法,调用时会调用子类方法。
- 构造方法是与类同名的函数方法,子类重写时,拥有的构造方法父类必须拥有。
重载
- 同类中参数不同函数名相同,调用时会自动调用对应的。
杂项记录
- instanceof(A,B) A是否时B的子类 A指代的是实际类而不是引用类
- hashmap底层实现 数组链表+红黑树
多线程
- 实现一个类 继承thread方法,实现run方法,然后new出对象,对象.start()运行线程 属于继承
- 实现runnable接口,实现run方法 然后使用 new thread(类).start实现运行,属于实现接口
- 实现callable接口,实现call方法,创建ExecutorService服务对象se 使用se.submit提交方法 有返回值
- yeild 让线程重回就绪态,cpu调度哪个还是看自生调度 Thread.yeild();
- join 让线程强制执行 Thread.join();
静态代理模式
- 真实对象和真实对象都要实现同一个方法
注解:
- @target 表示在哪些位置有效 ElementType.type 类 methon 方法 field 变量等
- @Retention 表示在什么阶段有效 RetentionPolicy.source 源码有效 Runtime 运行时有效 class 编译时有效
初始化:
- 主动引用一定会发生初始化:
- 虚拟机启动时,初始化main方法所在的类
- new新对象时
- 调用类的静态成员和静态方法
- 使用反射
- 初始化一个类,如果父类没被初始化,则会先初始化父类
- 被动引用(不会初始化):
- 当访问静态域,只有真正声明这个域的类才会被初始化(比如子类引用父类的静态变量只会让父类初始化)
- 通过数组定义引用不会初始化
- 常量引用不会发生初始化(已存在常量池)
类加载到内存过程:
- 先加载到常量区,各个类和静态方法,变量
- 然后堆中加载,产生对应对象,链接
- 每个对象堆中的class都只会有一个,代表该类的结构和方法
- 初始化:实现才会赋值
- 加载器:
- 引导类加载器:用C++编写,无法获取在jre/rt.jar下
- 扩展类加载器:jre/lib/ext下的jar包
- 系统类加载器:常用
- spring框架扫描Service
- SpringMVC扫描controller
- mybatis扫描Dao