一、异常
1、分类:
- Error内存异常。处理不了
- Exception编译器报错
- RuntimeException运行时报错:空指针呀...
- CheckedException检查异常:IO异常呀、SQL异常呀...
2、处理方式
- throws用在函数上,仅声明,让用户知道
- throw用在函数内,真就异常,下面的不执行了
二、反射
前面学JVM时应该知道类加载器会将类先加载到方法区,作为模板,这块区域是共享的,以后创建对象其实都是照着模板在堆里创建对象。反射就是直接拿到方法区里这个模板
1、获取Class对象
- Class clazz=p.getClass();
- Class clazz=Person.getClass();
- Class clazz=Class.forName("类的全路径");最常用
2、 利用Class对象创建实例
- 使用.newInstane 方法创建对象Person p=(Person) clazz.newInstance();
- 获取构造方法并创建对象Constructor c= clazz.getDeclaredConstructor(String.class,String.class,int.class);
- Person p1=(Person) c.newInstance("李四","男",20);
3、 利用class对象调用实例方法/属性
- 获取 Person 类的所有方法信息Method[] method=clazz.getDeclaredMethods();
- 获取 Person 类的所有成员属性信息Field[] field=clazz.getDeclaredFields();
- 获取 Person 类的所有构造方法信息Constructor[] constructor = clazz.getDeclaredConstructors();
三、注解
略,不重要,不如看看Spring里的注解内涵
四、内部类
- 静态内部类public static class Inner {} 能访问外部类所有静态
- 成员内部类/非静态内部类public class Inner {}
- 局部内部类class Inner {} 只在本类中使用此方法
- 匿名内部类public abstract class Bird {} 以后调用必须new,即test(new Bird(){实现方法})
五、泛型
- 泛型方法public static < E > void printArray( E[] inputArray )
- 泛型类public class Box {private T t;构造}
<? extends T> 表示该通配符所代表的类型是T类型的子类。
<? super T> 表示该通配符所代表的类型是 T 类型的父类。
六、序列化
类实现Serializable接口即可
七、拷贝
what:克隆是基于object类的clone()方法的,要想对一个对象进行拷贝,需要实现Clonenable接口并覆盖clone()方法
why:直接new的是初始化的对象,而克隆的对象是经过属性修改后的对象
- 直接赋值:A a1 = a2,a2变a1也变
- 浅拷贝:clone(){Student stu=(Student)super.clone();}
- 深拷贝:
- 方法一:clone(){Student stu=(Student)super.clone();stu.addr = (Address)addr.clone();}即类的引用类也要clone;
- 方法二:直接实现Serializable序列化接口即可