Java_注解入门介绍
2021/10/21 20:09:49
本文主要是介绍Java_注解入门介绍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
纲要
- Java_注解入门介绍
- 一.注解的长什么样
- 二.注解的概念
- 三.注解的作用
- 四.JDK中自带的一些注解
- @Override
- @Deprecated
- @SuppressWarnings
- 五.自定义注解
- 格式
- 本质
- 属性
- 要求
- 元注解
- @Target
- @Retention
- @Document
- @Inherited
- 六.如何在程序中使用注解
Java_注解入门介绍
一.注解的长什么样
打个比方,在类或方法上上有这么个东西@Override
二.注解的概念
概念:说明程序的,给计算机看的
注意:
1)JDK1.5之后的新特性
2)说明程序的作用
3)使用注解:@注解名称
4)要和注释相区分,注释是给程序员看的
三.注解的作用
①编写文档
②代码分析
③编译检查
四.JDK中自带的一些注解
@Override
作用:检测被该注解标注的方法是不是继承自父类(接口)的
@Deprecated
作用:告诉计算机,这段代码已经过时
@SuppressWarnings
作用:压制警告,消除所有警告
注意:一般传递参数“all”
比如: @SuppressWarnings(“all”)
五.自定义注解
格式
@Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override { }
元注解
public @interface Override {
}
本质
public interface MyAnno extends java.lang.annotation.Annotation {
}
注解本质就是一个接口,该接口默认继承Annotation接口
属性
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Pro { String className(); String methodName(); }
说的直白一点,其实是里面的方法,属于叫做属性。
要求
1.属性的返回值类型只允许是如下的几类
①基本数据类型
②String
③枚举
④注解
⑤以上类型的数组
2.定义的属性,使用时需要给属性赋值,如下代码:
@Pro(className = "cn.itcast.annotation.Demo1",methodName = "show") public class ReflectTest {
几种特殊状况:
①如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性赋值。
②如果只有一个属性要赋值,并且属性的名称是value,则value可以省略,直接定义即可
③数组赋值时,要用大括号赋值(只有一个值得话,大括号可以省略)
元注解
概念:用于描述注解的注解
@Target
作用:描述注解作用的位置
参数:ElemenType取值
TYPE:可以作用在类上
METHOD:可以作用在方法上
FIELD:可以作用在成员变量上
@Retention
作用:描述注解被保留的阶段
举例
*@Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
@Document
作用:描述注解是否被抽取到api文档中
@Inherited
作用:描述注解是否可以被子类继承
六.如何在程序中使用注解
功能一:获取注解中定义的属性值
下面展示一些 直接上代码:
。
@Pro(className = "cn.itcast.annotation.Demo1",methodName = "show") public class ReflectTest { public static void main(String[] args) throws Exception { //可以创建任意类的对象,执行任意方法 /* * 前提:不改变该类的任何代码,可以创建任意类的对象,可以执行任意方法 * */ //1.解析注解 //1.1获取该类的字节码文件对象 Class<ReflectTest> reflectTestClass = ReflectTest.class; //2.获取上边的注解对象 /* * public class ProImpl implements Pro * { * public String className() * { * return "cn.itcast.annotation.Demo1"; * } * public String methodName() * { * return "show"; * } * */ //其实就是在内存中生成了一个该注解接口的子类实现对象 Pro an = reflectTestClass.getAnnotation(Pro.class); //3.调用注解对象中定义的抽象方法,获取返回值 String className = an.className(); String methodName = an.methodName(); System.out.println(className); System.out.println(methodName); //3.加载该类进内存 Class cls = Class.forName(className); //返回一个cls对象 //4.创建对象 Object obj = cls.newInstance(); //5.获取方法对象 Method method = cls.getMethod(methodName); //6.执行方法 method.invoke(obj); } }
步骤:
1.获取注解定义位置的对象(Class)
2.获取指定的注解
- getAnnotation(Class)
- 其实内部代码就是如下这样的
public class ProImpl implements Pro { public String className() { return "cn.itcast.annotation.Demo1"; } public String methodName() { return "show"; } //其实就是在内存中生成了一个该注解接口的子类实现对象
3.调用注解中的抽象方法获取配置的属性
这篇关于Java_注解入门介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)