框架基于注解和反射
(反射是框架的基础,但是纯听反射越听越迷,尽量听,实在不行学框架的时候再回来听一遍)
注解:
1.@Override :重写
2.@FunctionalInterface :函数式接口
3.@Deprecated :废弃,不推荐使用
4.@SuppressWarn :镇压警告(防止报“警告”)
注解格式:@注释名(参数)
可以通过反射机制对这些注解进行访问
内置注解:
1.@Override :重写
2.@Deprecated :废弃,不推荐使用
3.@SuppressWarn :镇压警告(防止报“警告”)
元注解:(注解的注解)
1.@Target :描述注解的使用范围
2.@Retention :表示要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE<CLASS<RUNTIME)
3.@Documented :说明该注解被包含在javadoc中
4.@Inherited :说明子类可以继承父类中的该注解
1 | 定义一个注解 |
自定义注解:
@interface
1 | @Targe(value={ElementType.METGOD,ElementType.TYPE}) |
反射:
Reflection
(取得类的任何内部信息)
1 | package com.kuang.lesson01; |
可以用来找类的各种信息(如父类):虽然不如编辑器好用
1 | package com.kuang.lesson01; |
测试各种类型的class是什么
1 | package com.kuang.lesson01; |
java内存(讲的不是很清楚):
栈
Main()
堆
java.lang.Class类
new A()
……
方法区(特殊的堆)
1.静态变量
2.静态方法
3.常量池
4.代码
……
获得类的属性:
1 | Field[] field=c1.getDeclaredFields(); |
获得类的方法:
1 | Method[] nethod=c1.getDeclaredMethods(); |
获得构造器:
1 | Constructor constructor=c1.getDeclaredConstructors(); |
动态创建对象:
1 | package com.kuang.lesson01; |
invoke方法:激活
set方法:操作属性
若原方法为private,需要先调用setAccessible(true)方法(开启访问权限),然后就可以访问private(取消权限检测)
性能分析:
时间:普通方式<关闭检测的反射方式<反射方式
获取泛型信息:
(一脸懵逼)
获取注解信息
获得注解
.getAnnotations()
获得注解value的值
.getAnnotations(xxx.class).value
获得类指定的注解
.getFecaresField(“xxx”).getAnnotations(xxx.class)
说实话学完了之后对注解还是一头雾水,如果以后学框架需要的话再回来补吧