java 1.5 annotation-2

本文深入探讨Java 1.5中的注解特性,包括注解的基本概念、使用方式及其生命周期。通过实例讲解如何定义注解、应用注解,并进行反射操作。此外,还介绍了不同类型的元注解及其应用场景。
java 1.5 注解-2[非常重要 比每举重要]

刚刚只是说了什么是 注解 ,皮毛都不是

现在要自己弄注解了

就是要 @hubin


注解就相当于一个特殊的类,要用注解
得有人先开发好这个类


要用自己写的 注解 需要写三个类

注解类:
@interface A
{
}

应用了"注解类"的类
@A
class B
{
}

对用了注解类的类 进行反射操作的类
class C{
B.class.isAnnotionPresent(A.class);
A a = B.class.getAnnotion(A.class);
}

----------------------------
package com.ncs.annotation;

public @interface MyAnnotationDemo {
//就把这个注解 用到 AnnotationDemo上看看再说吧
}

------------------------
package com.ncs.annotation;

@MyAnnotationDemo
public class AnnotationDemo {

@SuppressWarnings("deprecation")
public static void main(String[] args) {
System.runFinalizersOnExit(true);
//在ECLIPSE里会画删除线,提示方法过时
//其实在是告诉javac

//写了@SuppressWarnings("deprecation")
//就不警告了
}

@Deprecated
public static void sayHi() {
//总有一天这个方法要过时,
//但是你不敢删除,
//因为N多人在用,你一删人家怎么 compile 呢?
//但是你又想告诉人家 ,这方法过时了,怎么办??
//注解,
System.out.println("hello,zxx");
}
}

-------------------------
package com.ncs.annotation;

public class MyAnnoTest {

public static void main(String[] args) {
//先判断 某个类 有没有 某个 注解
if(AnnotationDemo.class.isAnnotationPresent(MyAnnotationDemo.class)) {
//cun zai de
MyAnnotationDemo myAnnotationDemo = (MyAnnotationDemo)AnnotationDemo.class.getAnnotation(MyAnnotationDemo.class);
System.out.println(myAnnotationDemo);
}
}

}

------------------------------------------
运行后 什么都没有
那肯定是 if 没有成立
修改:
-------------------
package com.ncs.annotation;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotationDemo {
//就把这个注解 用到 AnnotationDemo上看看再说吧
}


------------------------
现在有了
@com.ncs.annotation.MyAnnotationDemo()

要在 注解 类上加 注解 告诉注解 ,你要保持到 运行时哦
注解的注解,元注解
数据的数据,元数据
信息的信息,元信息


@Retention(RetentionPolicy.RUNTIME)
要好好解释上面的一行
我现在是在*.java里写的这行
然后javac把这个compile为 *.class
compile时,会把*.java里的一些东西去了,比如// /**/ comments
@注解也可能会去掉,
所以我们还要告诉 javac ,这个注解要保持到什么时候
如果说不要了,那么等你拿到*.class 就看不到注解了
★即使compile到了*.class 文件
等我们用这个*.class的时候
还需要 classloader 去load 这堆字节码
此时,也会 放弃 一些 东西,不是统统load上来的
load时还会 做些处理,安全检查等....
不是你写个 二进制东西 就可以让 classloader 给你load的

[color=brown]所以注解有三个生命周期

RetetionPolicy.SOURCE ->java 源文件
RetetionPolicy.CLASS ->class文件
RetetionPolicy.RUNTIME ->内存里的字节码

默认值是在class 阶段
所以 刚刚第一次 没有出来什么
是因为 虽然在 *.class里是有的,但是classloader没有加载上来
后来我把它设置为@Retention(RetentionPolicy.RUNTIME)
就加载上来了[/color]

[color=red]---再来看
@Override的生命周期是什么??
应该是 source
只是提示你有没有覆盖,变成class文件以后,这个就没有用了

@SuppressWarning
也是在 source

@Deprecated
要在runtime阶段
--------好好想想[/color]

-------------
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
上面行表示这可以加在 方法前,你写在类前 compiler都反对

如果希望可以出现在 类 , 方法 上
可以这样写:
@Target({ElementType.METHOD,ElementType.TYPE})
现在都可以,看清楚是TYPE,而不是CLASS
为什么呢??

Type 是 class的爸爸,
1.5后,有每举,有注释,有接口...都是 类
他们和类都是兄弟关系,类不大了,
最大的是type了
Interface Type 也是1.5 新出的
【评估多目标跟踪方法】9个高度敏捷目标在编队中的轨迹和测量研究(Matlab代码实现)内容概要:本文围绕“评估多目标跟踪方法”,重点研究9个高度敏捷目标在编队飞行中的轨迹生成与测量过程,并提供完整的Matlab代码实现。文中详细模拟了目标的动态行为、运动约束及编队结构,通过仿真获取目标的状态信息与观测数据,用于验证和比较不同多目标跟踪算法的性能。研究内容涵盖轨迹建模、噪声处理、传感器测量模拟以及数据可视化等关键技术环节,旨在为雷达、无人机编队、自动驾驶等领域的多目标跟踪系统提供可复现的测试基准。; 适合人群:具备一定Matlab编程基础,从事控制工程、自动化、航空航天、智能交通或人工智能等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于多目标跟踪算法(如卡尔曼滤波、粒子滤波、GM-CPHD等)的性能评估与对比实验;②作为无人机编队、空中交通监控等应用场景下的轨迹仿真与传感器数据分析的教学与研究平台;③支持对高度机动目标在复杂编队下的可观测性与跟踪精度进行深入分析。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注轨迹生成逻辑与测量模型构建部分,可通过修改目标数量、运动参数或噪声水平来拓展实验场景,进一步提升对多目标跟踪系统设计与评估的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值