Java基础加强二注解、泛型、类加载器、代理类

来源:互联网 发布:payload c语言 编辑:程序博客网 时间:2024/06/05 10:24
Java基础加强二
 三、注解

1)  内省:主要用于对JavaBean进行操作,JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省

2)  JavaBean

                                     i.             JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则

                                   ii.             一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量

3)  Beanutils工具包:

                                     i.             加入beanutils包时,需要加入logging

                                   ii.             使用Beanutils包时,get属性时返回的结果为字符串,set属性时可以接受任意类型的对象,通常使用字符串

                                 iii.             PropertyUtils类,get属性时返回的结果为该属性本来的类型,set属性时只接受该属性本来的类型

4)  注解理解:

                                     i.             注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,标记可以加在包、类、字段、方法的参数以及局部变量上。

                                   ii.             @SuppressWarnings("deprecation”):javac编译多过时的方法,不会产生警告

                                 iii.             @Deprecated:被标记后,为过时的元素

                                  iv.             @Override:被标记后,表示覆盖父类的方法

四、泛型

                               1)             泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会去除掉类型,使程序运行不受影响。

                               2)             ArrayList<E>类定义和ArrayList<Integer>类中的术语:

                                                                 i.             整个称为ArrayList<E>泛型类型

                                                               ii.             ArrayList<E>中的E称为类型变量或类型参数

                                                             iii.             整个ArrayList<Integer>称为参数化类型

                                                              iv.             ArrayList<Integer>中的Integer称为类型参数的实例或实际类型参数

                                                                v.             ArrayList<Integer>中的<>念着typeof

                                                              vi.             Arraylist称为原始类型

                               3)             参数化类型与原始类型的兼容性:

                                                                 i.             参数化类型可以引用一个原始类型的对象,编译时报告警告

                                                               ii.             原始类型可以引用一个参数化类型的对象,编译时报告警告

                                                             iii.             参数化类型不考虑类型参数的继承关系

                                                              iv.             编译器不允许创建泛型变量的数组,即创建数组实例时,数组的元素不能使用参数化的类型

                               4)             ?通配符:可以引用其他各种参数化的类型,?通配符定义的变量主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法

                               5)             ?通配符的扩展:

                                                                 i.             上边界:<? extends Number>包括自己和Number的子类

                                                               ii.             下边界:<? super Integer>包括自己和Integer的父类

                                                             iii.             ?只能作用于引用,不能用它去给其他变量赋值

                                                              iv.             只有引用类型才能作为泛型方法的实际参数

                                                                v.             普通方法、构造方法和静态方法中都可以使用泛型

                                                              vi.             在泛型中可以同时有多个类型参数<K,V>

五、类加载器:

1)  默认的加载器:

                                     i.             BootStrap:管辖范围JRE/lib/rt.jar 子:ExtClassLoader

                                   ii.             ExtClassLoader:管辖范围:JRE/lib/ext/*.jar 子: AppClassLoader

                                 iii.             AppClassLoader:管辖范围:CLASSPATH指定的所有jar或目录 子:自定义的类加载器

2)  类加载器也是Java类,因为其他是java类的类加载器本省也要被类加载器加载,但是第一个BootStrap类加载器不是java

3)  委托机制:

                                     i.             java虚拟机要加载一个类时,首先当前线程的类加载器去加载线程中的第一个类;如果类A中引用了类Bjava虚拟机将使用加载类A的类装载器来加载类B;还可以直接调用ClassLoader.loadClass()方法来指定某个类加载器去加载某个类

                                   ii.             每个类加载器加载类时,先委托给其上级类加载器

4)  自定义类加载器:

                                     i.             自定义的类加载器必须继承ClassLoader

                                   ii.             类加载器不能加载非public的类

六、代理类

1)     代理类需要与目标类具有相同的接口,代理类的每个方法调用目标类的相同方法,并在调用方法时加上系统功能的代码

2)     AOP

                                     i.             系统中存在交叉业务,一个交叉业务就是要切入到系统中的一个方面,交叉业务的变成问题即为面向方面的编程(Aspect oriented program,简称AOP)

                                   ii.             AOP的目标就是要使交叉业务模块化,代理是实现AOP功能的核心和关键技术

1)  动态代理:

                                     i.             JVM可以在运行期动态生成出类的字节码,这种动态生成的类往往被用作代理类,即动态代理类

                                   ii.             JVM生成的动态类必须实现一个或多个接口,所以,JVM生成的动态类只能用作具有相同接口的目标类的代理

                                 iii.             CGLIB库可以动态生成一个类的子类,一个类的子类也可以用做该类的代理,所以,如果一个没有实现接口的类生成动态代理类,那么可以使用CGLIB