注解

本文详细介绍了Java注解的概念、作用分类,包括JDK预留给开发者使用的注解,如@Override、@Deprecated、@SuppressWarnings等。同时,文章深入探讨了自定义注解的格式、元注解(如@Retention、@Target)及其用法,以及注解在程序中的使用,如获取注解属性值的方法。

注解

概念

从JDK5开始,Java增加对元数据的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。

作用分类

  1. 编写文档:生成文档(doc文档)
  2. 代码分析:对代码进行分析(使用反射)
  3. 编译检查:让编译器能够实现基本的编译检查(Override)

JDK中预留的一些注解

  1. @Override:检查被标记的方法是否继承自父类(接口)的

    @Override
    public String toString() {
            return super.toString();
    }
  2. @Deprecated:表示已过时

    @Deprecated
    public void show(){
        //有缺陷
    }
    
    public void show1(){
        //替代show()方法
    }
  3. @SuppressWarnings :压制警告(一般传参“all”表示所有)

    @SuppressWarnings("all")
    public void show(){
        //原本可能会有类似never used的警告,添加后就看不到了
    }

自定义注解

格式

元注解
public @interface 注解名{
}

元注解

元注解顾名思义我们可以理解为注解的注解。

它是作用在注解中,方便我们使用注解实现想要的功能。

元注解分别有@Retention、 @Target、 @Documented、 @Inherited和@Repeatable(JDK1.8加入)五种。

  1. @Target

    • Target的英文意思是目标,表示注解的作用范围
    • @Target(ElementType.TYPE) 作用接口、类、枚举、注解
    • @Target(ElementType.FIELD) 作用属性字段、枚举的常量
    • @Target(ElementType.METHOD) 作用方法
    • @Target(ElementType.PARAMETER) 作用方法参数
    • @Target(ElementType.CONSTRUCTOR) 作用构造函数
    • @Target(ElementType.LOCAL_VARIABLE)作用局部变量
    • @Target(ElementType.ANNOTATION_TYPE)作用于注解(@Retention注解中就使用该属性)
    • @Target(ElementType.PACKAGE) 作用于包
    • @Target(ElementType.TYPE_PARAMETER) 作用于类型泛型,即泛型方法、泛型类、泛型接口 (jdk1.8加入)
    • @Target(ElementType.TYPE_USE) 类型使用.可以用于标注任意类型除了 class (jdk1.8加入)
    • 一般比较常用的是ElementType.TYPE类型
  2. @Retention

    • Retention英文意思有保留、保持的意思,它表示注解存在阶段是保留在源码(编译期),字节码(类加载)或者运行期(JVM中运行)。在@Retention注解中使用枚举RetentionPolicy来表示注解保留时期

    • @Retention(RetentionPolicy.SOURCE),注解仅存在于源码中,在class字节码文件中不包含

    • @Retention(RetentionPolicy.CLASS), 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得

    • @Retention(RetentionPolicy.RUNTIME), 注解会在class字节码文件中存在,在运行时可以通过反射获取到

    • 如果是自定义注解,如果注解只存着源码中或者字节码文件中就无法发挥作用,而在运行期间能获取到注解才能实现目的,所以自定义注解中肯定是使用 @Retention(RetentionPolicy.RUNTIME)

  3. @Documented

    • Document的英文意思是文档。它的作用是能够将注解中的元素包含到 Javadoc 中去。
  4. @Inherited

    • Inherited的英文意思是继承,但是这个继承和平时理解的继承大同小异,一个被@Inherited注解了的注解修饰了一个父类,如果他的子类没有被其他注解修饰,则它的子类也继承了父类的注解。
  5. @Repeatable

    • Repeatable的英文意思是可重复的。顾名思义说明被这个元注解修饰的注解可以同时作用一个对象多次,但是每次作用注解又可以代表不同的含义。

注解的本质

  • 注解的本质就是一个Annotation接口

属性(接口中的抽象方法)

要求

  • 属性的返回值类型只能是以下类型
    • 基本数据类型
    • String
    • 枚举
    • 注解
    • Class类型
    • 以上类型的数组
  • 定义了属性,在使用时,要给属性赋值
    • 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。
    • 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnno{
    int age();
    int length();
    String name() default "张三";
}


@MyAnno(age=18,length=20)
public class Worker{
    
}

在程序使用(解析)注解

获取注解中的属性值

//1.获取被注解标记的类的字节码文件对象
Class cl = 类名.class;
//2.获取上面的注释对象(其实就是在内存中生成了一个该注解接口的子类实现对象)
注解名 t = cl.getAnnotation(注解名.class);
//3.调用注解对象中定义的抽象方法,获取返回值
Object obj = t.方法名();
计及风电并网运行的微电网及集群电动汽车综合需求侧响应的优化调度策略研究(Matlab代码实现)内容概要:本文研究了计及风电并网运行的微电网及集群电动汽车综合需求侧响应的优化调度策略,并提供了基于Matlab的代码实现。研究聚焦于在高渗透率可再生能源接入背景下,如何协调微电网内部分布式电源、储能系统与大规模电动汽车充电负荷之间的互动关系,通过引入需求侧响应机制,建立多目标优化调度模型,实现系统运行成本最小化、可再生能源消纳最大化以及电网负荷曲线的削峰填谷。文中详细阐述了风电出力不确定性处理、电动汽车集群充放电行为建模、电价型与激励型需求响应机制设计以及优化求解算法的应用。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源、微电网、电动汽车等领域技术研发的工程师。; 使用场景及目标:①用于复现相关硕士论文研究成果,深入理解含高比例风电的微电网优化调度建模方法;②为开展电动汽车参与电网互动(V2G)、需求侧响应等课题提供仿真平台和技术参考;③适用于电力系统优化、能源互联网、综合能源系统等相关领域的教学与科研项目开发。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注模型构建逻辑与算法实现细节,同时可参考文档中提及的其他相关案例(如储能优化、负荷预测等),以拓宽研究视野并促进交叉创新。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值