异常、反射、注解、内部类、泛型、序列化、拷贝...一网打尽!!

198 阅读2分钟

一、异常

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序列化接口即可