持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天
Java注解系列——注解概述
注解概述
注解(Annotation)是JAVA5(JDK5)的版本开始引入的技术,在一开始学习 的时候大家可能觉得不是很重要,在JavaSE中也不常使用到,但是负责的告诉您,在企业级(J2EE)开始非常重要
注解的作用
注解可以认为是对程序做出解释,它不是程序的本身,但是他能被其他程序所读取
语法格式
@符号开头字母大写,配合参数
@Xxxx(参数)
一些常见的内置注解(JavaSE)
| 注解 | 说明 |
|---|---|
| @Override | 用于声明对方法进行重写 |
| @Deprecated | 表示对当前(方法,属性,类等)进行废弃(不推荐使用但能使用) |
| @SuppressWarnings | 用于抑制编译时的警告⚠(需要配合参数:all,unchecked等) |
常用注解(Spring)
- @Bean
- @Component
- @Configuration
- @Test
- @Service
- @Value
- @Mapper
- @Controller
- 等
元注解
元注解是注解其他注解的注解,一共有4个标准的meta-annotation类型
- @Target:用于标识注解的使用范围
- @Retention:表示需要在什么级别保存该注释信息﹐用于描述注解的生命周期(SOURCE<CLASS < RUNTIME)
- @Document:说明该注解将被包含在javadoc中
- @Inherited:说明子类可以继承父类中的该注解
如何读取注解
我们常通过反射来对注解进行读取
Java注解与反射系列——反射概述
前言
反射最重要的用途:与注解进行配合,实现 所以学注解必要反射
静态语言
运行时结构不可变的语言就是静态语言。如Java、C++等 虽然Java不是动态语言,但Java可以称之为“准动态语言”。 Java有一定的动态性,我们可以利用反射机制获得类似动态语言的特性
Java的动态性让编程的时候更加灵活!
动态语言
指的是运行的时候开源改变其自身结构的语言,如C#,JavaScript,PHP等 例如可以引入新的函数,对象,新的代码
特点:没有强制的数据结构,javaScript 中的 var ,python的无需指明变量类型
即允许在运行时,代码可以根据某些条件改变自身结构!
反射
概述
Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。
例如:
Class classdemo1 = Class.forName("java.lang.String")
加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射
反射流程
反射机制提供的功能
- 在运行时判断任意一个对象所属的类
- 在运行时构造任意一个类的对象
- 在运行时判断任意一个类所具有的成员变量和方法
- 在运行时获取泛型信息
- 在运行时调用任意一个对象的成员变量和方法
- 在运行时处理注解
- 生成动态代理(AOP)
反射的优点与缺点
优点
动态创建对象和编译,提高程序灵活性
缺点
影响性能
反射主要的API
- java.lang.Class:代表一个类(其实在Object中)
- java.lang.reflect.Method:代表类的方法
- java.lang.reflect.Field:代表类的成员变量
- java.lang.reflect.Constructor:代表类的构造器
获取反射对象
一个类在内存中只有一个class对象,所以你怎么获取都是相同的 类被加载后,类的整个结构都会被封装在Class对象中
代码示例
package example.reflect;
public class demo1 {
public static void main(String[] args) throws ClassNotFoundException {
//一个类只有一个class对象
Class stu = Class.forName("example.reflect.entity.Stu");
System.out.println(stu);
}
}
结果截图
该方法返回类型为Class类,是Java反射的源头!