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);
通过注解与反射可以去方便的实现一些功能的强大。