一、注解(Annotation)
-
注解和注释的区别
定义不同:
注解:英名为Annotation,它是JDK5.0及以后版本引入的一个特性。 与类、接口、枚举是在同一个层次,可以成为java 的一个类型。用一个词描述注解------元数据,它是一种描述数据的数据。所以,可以说注解就是源代码的元数据。
这是注解的源码,用@interface来表示一个注解
注释:是对源代码作介绍、评议或说明的文字。
这是就是注释,用/* 说明 */表示,还有单行注释
-
注解的定义及类别
作用不同:
注解是Java 编译器可以理解的部分,是给编译器看的。通过标记包、类、字段、方法、局部变量、方法参数等元素据,告诉jvm这些元素据的信息。
上面这个图红线处表示注解的目标的value是METHOD(方法),就是说我们可以把自己自定义注解表示在方法上
注释是程序员对源代码做一些记忆或提示性描述,是给人来看的。它能告诉开发者这段代码的逻辑、说明、特点等内容,对代码起到解释、说明的作用。
使用范围不同:
注解 ,参与代码编译,以@开头的,与工具一起使用。对于位置、语法、内容有一定的限制。
注释 ,可以随意在任务位置填写内容,对代码任何没有影响。
-
内置注解
内置注解一般有
@Override(继承注解) @SuppressWarnings("all")(镇压警告注解) * @Deprecated(程序不推荐使用的一个注解)
-
元注解
元注解比内置注解高级,定义一个注解的注解,就是在内注解上使用的,借鉴内置注解的源码结构而生成我们想要的注解。
-
自定义注解
内置注解@Override(继承注解)的源码:
在继续深入@Targe里面看看:
意思是value是一个ElementType[]数组类型的,再进入这个数组里面看看:
可以看出,value值有class类,方法的构造器的,甚至是注解类型的,那么我们就可以根据这个底层原理来写写自己想要的注解:
红色框起来表示如果我们要写注解,就一般用这两个就好了。
-
注解参数解析
参数解析可以看看我上面的图片里面的注释、、、
二、反射(Reflection)
1.什么是反射?
反射**(Reflection)**被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。
反射机制提供的功能:
在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的成员变量和方法;生成动态代理。
我们这样理解:
/**
* 正常获得一个对象过程:导入包名--》new--》获得对象
* 反射机制:获得对象--》new--》得到包名及类名
* 反射可以获取一个类的所有属性,方法(包括私有和公有)、构造器甚至类名包名
* 获得反射一般是使用Class这个核心的API
*/
2.反射的核心API及如何获取反射
如何获取,看我的代码:
当然了,反射机制还不止我的这些分析,还有很多很多,后期我们要学的spring框架之类就用到了注解和反射的原理,学无止境,加油!!!