zoukankan      html  css  js  c++  java
  • java--反射和注解

    一、java.lang.reflect类   Class类

    1、反射机制(Reflection):通过类创建对象,

    2、反射机制提供了如下功能:

         在运行时,判断任意一个对象所属的类

                  构造任意一个类的对象

                  判断任意一个类所具有的成员变量和方法

                  调用任意一个对象的方法

                  生成动态代理 例如连接数据库时数据处理

    动态获取数据类型的方式:getResource( )  toURI( )  getPath( )

         1)、getClass( ),用到Object类,  

    1 Dog dog = new Dog( );  
    2 Class aa = dog.getClass( );  
    3 System.out.print(aa.toString()); //获取class com.icss.ref.biz.Dog

         2)、 运用 .class语法:寻找指定相对路径时候,   

    1 Class aa = Dog.class; 
    2 System.out.print(aa.toString()); //获取class com.icss.ref.biz.Dog 

         3)、 运用static method ,Class.forName( ):    

    1  Class aa = Class.forName("com.icss.ref.biz.Dog");     //通过配置文件,动态配置要创建的对象
    2  System.out.print(aa.toString());  //获取class com.icss.ref.biz.Dog

    JDBC中  Class.forName("jdbc:  ")  //作用是类库的检查

    扩展: 运行时类型识别 RTTI

    java.lang.Class<T>类 也被称为元类

    forName()方法用来加载一个对象,使用它,可以不必使用new关键字来创建对象,它是一个静态方法 Class.forName("类名")

    使用forName()和使用new来创建对象的区别:用new创建对象要通过编译器静态检查
                                                               forName()方法是动态加载,即便编译时类不存在,编译也可以通过,只是在运行时会抛出异常
                                                               forName()方法返回的是一个Class类型,而不是加载的那个类的类型,

    例如:Candy candy = Class.forName("Candy");    错误
            Class candy = Class.forName("Candy");      正确

    3、通过反射机制得到某个类的某个方法,然后调用对应这个类的某个实例的该方法

    4、通过反射机制创建新类的实例,有几个方法可以创建:

    1)、

    1 Class aa = Dog.class;
    2 
    3 Object obj = aa.newInstance( );   //在runtime期间,用反射机制动态创建对象
    4 
    5 Dog dog = (Dog) obj;
    6 
    7 dog.setName("旺财");

    2)、有参构造

    1 Object obj=Dog.class.getDeclaredConstructor(String.class).newInstance("欢欢");
    2 Dog dog = (Dog) obj;

    5、通过反射获取类Method对象,调用Field的Invoke方法调用函数。

    二、注解( annotation )

    1、元数据:就是描述代码间的关系,或者代码与其他资源之间内在联系的数据。
    ---元数据可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查
    注解:所有的注解都只有成员方法,而且不需要提供这些方法的实现,java会实现这些方法
    注解不能包括extends关键字,但所有的注解类型都会自动从Annotation接口派生出来

     1 //声明一个名称为MyAnno的注解 MyAnno.java
     2 @interface MyAnno{
     3      String str( );
     4      int val( );
     5 }
     6 
     7 //使用MyAnno注解 demoAnno.java
     8 public void demoAnno{
     9      @MyAnno(str = "simple example", val = 10)
    10      public static void doSomething( ){
    11            System.out.println("do something");
    12      }
    13 }

    注解的保留策略:SOURCE,CLASS,RUNTIME
    //通过一个java内置注解@Retention来指定注解,@Retention(保留策略)
    注解的应用:标记注解的应用
    单成员注解的应用
    内置注解的应用:1、java.lang.annotation引入的有4个 @Retention @Documented @Target @Inherited
                          2、java.lang 引入3个 @Override @Deprecated @SuppressWarnings
    使用注解的一些限制:

          1、注解不能继承另一个注解

          2、注解声明的方法一定不能带参数

          3、它必须返回下面的结果之一 :基本类型,String或者Class类型的对象,枚举类型,其他注解类型,前面类型之一的一个数组

          4、不能被定义为泛型,也就是说不能带类型参数

          5、不能使用throws子句

  • 相关阅读:
    如何使Linux系统上的程序开机后自动运行 (转)
    Makefile详解 (转--不错就是有点长)
    ./configure && make && make install详解 (转)
    从程序员角度看ELF | Linux-Programming (转)
    动态符号链接的细节 (转)
    GCC编译动态和静态链接库例子
    gcc编译静态库和动态库
    udhcp源码详解(五) 之DHCP包--options字段
    一个炒鸡好用的pdf阅读器
    Linux 创建用户 用户组 用户权限
  • 原文地址:https://www.cnblogs.com/wangwanchao/p/5051974.html
Copyright © 2011-2022 走看看