1.多态/反射工厂
多态
- 父类类型指向子类对象
- 接口指向实现类
反射工厂
public Object getObj() throws IOException, ClassNotFoundException {
Properties properties = new Properties();
properties.load(Factory.class.getClassLoader().getResourceAsStream("com/company/test.properties"));
String type = properties.getProperty("type");
Class<?> clz = Class.forName(type);
System.out.println(clz);
return clz;
}
##分支工厂
public Object getObj2() throws IOException, ClassNotFoundException {
Properties properties = new Properties();
properties.load(Factory.class.getClassLoader().getResourceAsStream("com/company/test.properties"));
String type = properties.getProperty("type");
if("person".equals(type)){
return new Person();
}else if...
return null;
}
分支工厂如果要返回新的类型,需要修改代码增加if判断
classloader
读取文件(双亲委派)
双亲委派
classpath
.class文件所在的路径
2.==/equals/hashcode
==
比较地址(基本数据类型比较值)
equals
object类中直接调用==比较,写成方法是为了方便重写
hashcode
根据key?通过散列算法得到hash值,由于压缩输入了空间,会产生hash碰撞("Aa"和"BB"的hashcode相同)
3.static
唯一,共享,依附于类
4.堆/栈/常量池
5.形参的改变能否影响实参
- 改变引用,则无法影响实参。
- 改变内容[堆区的对象部分],则可以影响实参。
6.final
- final修饰类:不能被继承
- final修饰方法:不能被重写
- final修饰变量:引用不可变/内容可变