注解:
Annotation是一种代码级别的说明..是JDK1.5及以后版本引入的一个特性.与类,接口,枚举是在同一个层次的
注释:注释是给开发人员阅读的,注解是给计算机提供相应信息的.
作用:
编译检查:通过代码里标识注解,让编译器能够实现基本的编译检查.如:@Override
代码分析:通过代码里标识注解,对代码进行分析,从而达到取代xml目的
编写文档:通过代码里标识注解,辅助生成帮助文档对应的内容.
JDK提供的注解:
@Deprecated表示被修饰的方法已经过时.过时的方法不建议使用,但仍可以使用.一般被标记为过时的方法都存在不同的缺陷:安全问题,新的API取代
@OverrideJDK1.5表示抑制警告,被修饰的类或方法如果存在编译警告,将被编译器忽略
deprecation 忽略过时
rawtypes 忽略类型安全
Unused 忽略 不使用
Unchecked 忽略安全检查
Null 忽略空指针
All 忽略所有
@Deprecated 方法过期
@Override 复写父类方法,实现接口方法
@SuperWaring 抑制警告
类加载器:
类加载器是负责加在类的对象.将class文件(硬盘)加载到内存生成Class对象.所有的类加载器都是java.lang.ClassLoader 的子类.
使用类class.getClassLoader()获得加载自己的类加载器.
类加载器加载机制:全盘负责委托机制
全盘负责:A类如果要使用B类(不存在),A类加载器C必须负责加载B类.
委托机制:A类加载器如果要加载资源B,必须询问父类加载是否加载,
如果加载,将直接使用,如果没有加载,自己再加载.
采用全盘负责委托机制 保证一个class文件只会被加载一次,形成一个Class对象.
注意:
如果一个class文件,被两个类加载器加载,将是两个对象.
自定义类加载,可以将一个class文件加载多次.
动态代理:
Java代理有jdk动态代理,cglib代理,jdk动态代理主要使用的是java反射机制(即java.lang.reflect包)
Proxy类:
动态代理:程序运行时,使用JDK提供工具类(Proxy),动态创建一个类,此类一般用于代理.
代理类: 目标类,被代理的
动态代理的使用前提:必须有接口.
Object proxyObj=Proxy.newProxyInstance(参数1,参数2,参数3);
参数1:ClassLoader,负责将动态创建类,加载到内存.当前类 class.getClassLoader();
参数2:Class[] interfaces,代理类需要实现的所有接口(确定方法),被代理类实例.getClass().getInterfaces();
参数3:InvocationHandler,请求处理类,代理类不具有任何功能,代理类的每一个方法执行时,调用处理类invoke方法.
Invoke(OBject proxy,Method,Object[] args)
参数1:代理实例
参数2:当前执行的方法
参数3:方法实际参数.
动态代理原理的通俗理解(歌手,经纪人):
建立一个公共的接口,如:歌手 public interface singer;
用具体的类实现接口,如张杰,是歌手所实现Singer类,class MySinger implements Singer.
建立代理类,也就是经纪人,需要实现InvocationHandler类,并重写invoke方法
这样当有事情时,要找张杰(具体类)的时候,就必须先到经纪人(代理类)那里处理,代理人在决定要不要与你见面(该方法要不要执行)