注解和反射
注解
- override 重写
- Deprecated 不推荐使用
- SuppressWarnings 镇压警告
元注解
负责注解其他的注解
@Target 用于描述注解的使用范围
@Retention 表示需要在什么级别保存该注解信息
@Document 说明该注解江北包含在javadoc中
@Ubgerited 说明子类可以继承父类的该注解
定义一个注解
public class Tannotation {
}
//定义一个注解
//runtime > class > sources
@Target(value ={ ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
}
自定义注解
使用@interface自定义注解时,自动继承了java.long.annotation.Annotation接口.
反射
动态语言
- 是一类在运行时可以改变其结构的语言,例如新的函数 对象 甚至代码可以被引进.已有的函数可以被删除或是其他结构上的变化.通俗点说就是运行时代码可以根据某些条件改变自身结构.
- 主要的动态语言: Object-c c# JavaScript PHP Python
静态语言
- 与动态语言相反 如java c++ c
- java可以称为准动态语言,java具有一定的动态性,
Class类
Class本身也是一个类
Class对象只能由系统建立对象
一个加载的类在JVM中只会有一个Class实例
一个Class对象对应的是一个加载到JVM中的class文件
每个Class可以完整的得到一个类中的所有被加载的结构
Class类是Reflection的根源,针对任何你想动态加载 运行的类 唯有先获得相应的Class对象
类加载器
将class文件字节码内容加载到内存中 在堆中生成一个java.lang.Class对象
- 引导类加载器 用C++编写的 是jvm自带的类加载器 负责java平台的核心库
- 扩展类加载器 负责jre/lib/ext目录下的jar包或者指定目录下的jar包
- 系统类加载器 负责java-classpath或者指定目录下的ja的类与jar包装入工作是最常用的加载器
调用Class的newInstance()方法
1. 类必须有无参构造器
2. 类的构造器访问权限需要足够.
如果没有无参构造器 只要在操作时调用构造器并传入参数
1. getDeclaredConstructor(Class.....parameterTypes)
2. 向构造器的形参中传递一个对象数组进去 里面包含了构造器中所需的各种参数
3. 通过Constructor实例化对象
public class T03 {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
Class<?> c1 = Class.forName("com.Rain.refelction.User");
//通过构造器
// Constructor constructor = c1.getDeclaredConstructor(String.class, int.class);
// User user = (User)constructor.newInstance("尹泉润", 2019214859);
// String string = user.getName();
// System.out.println(string);
//通过反射使用普通方法
User user = (User) c1.newInstance();
Method setName = c1.getDeclaredMethod("setName",String.class);
setName.invoke(user,"尹泉润");
System.out.println(user.getName());
//通过反射操作属性
//不能直接操作私有属性 需要关闭安全检测.
}
}
反射操作泛型
ParameterizedType 表示一种参数化类型比如Collection
GenericArraryType 表示一种元素类型是参数化类型或者类型变量的数组类型
TypeVariable 是各种类型变量的公共父接口
WildcardType 代表一种通配符类型表达式
ORM
tion
GenericArraryType 表示一种元素类型是参数化类型或者类型变量的数组类型
TypeVariable 是各种类型变量的公共父接口
WildcardType 代表一种通配符类型表达式