java注解与反射

发布于:2022-12-25 ⋅ 阅读:(404) ⋅ 点赞:(0)

1.注解

    1.1 概念:就是写给计算机的注释,能更加的快速地帮助计算机理解指令和简化代码流程。
    1.2 实现:
注解,可以自己定义的,同时还有官方定制的。
官方提供的:
在这里插入图片描述

自己写的:

package TestJava.com;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/*作用范围*/
@Target(ElementType.FIELD)
/*生命周期*/
@Retention(RetentionPolicy.RUNTIME)
public @interface Col {
    //字段名,用来搞表单
    String colName() default " ";
    String label() default " ";
}

首先先搞清楚具体的属性:

  • public @interface 注解名 类似于接口的创建。
  • @Target() 里面的这个注解能影响的范围,如图:
    在这里插入图片描述
  • @Retention() 何时销毁
    在这里插入图片描述
  • String value() defaultc " “; 就是给予相应的值,就是写与你如何去引用的模板,和抽象类类似,一个类中的注解例子如下。
@id(sid = "number")//其他的注解
    @Col(colName = "number",label = "学号")
    private Integer number;

2.反射

    2.1 概念:当我们创建一个对象的同构不同值个体,尽管我们可以创建100个不同的student ,但有会只有一个student.class文件,如果我们像获取不同的学生的信息,是去找这100个还是找这一个class文件去进行,这个文件包含着这个student类的所有结构信息(初始化的值需要进行操作才可以获取),且是动态的,java是先加载类在执行。

class类
  • Class类的对象包含了某个被加载类的结构。一个被加载的类对应一个Class对象。
  • 当一个class被加载,或当加载器(class loader)的defineClass()被 JVM调用,JVM 便自动产生一个Class

    2.2 具体实现:

  • 获取这个class类用class.forName(),里面写全类名,就是sml.reflect.User,就像这个,什么目录下的。
  • 也可以用getClass()来获取,Class clazz=student,getClass().
  • 就是获取信息
  for(Field i :fields){//fileds是获取的属性集合,学生的名字这种。
           /*获取用了@col注解的属性*/
           Col colAnnotation=i.getAnnotation(Col.class);
           /*获取值*/
           String colName= colAnnotation.colName();
       }
  • 同时也可以获取类的方法和构造器,
//获取该类的所有public方法,包括父类的
Method[] methods = aClass.getMethods();
//根据方法名获取该类的public方法
Method method = aClass.getMethod("getName");
Constructor[] constructors = aClass.getConstructors();
//根据构造器的参数类型来获取指定构造器,不写为无参构造器
Constructor constructor = aClass.getConstructor();
Constructor constructor1 = aClass.getConstructor(String.class,int.class);

通过注解与反射可以去方便的实现一些功能的强大。


网站公告

今日签到

点亮在社区的每一天
去签到