java注解学习笔记

今天看了下有关java注解的视频学习资料在。做点笔记:

学java注解的目的:

能看别人代码,特别是框架代码。由于肯定与注解有关。

编程更简洁,代码清晰。

java注解是java1.5引入的:注解概念是java提供的一种原程序中的元素关联不论什么信息和元数据的途径和方法。

常见注解(编译时注解);

@override:方法覆盖了它的父类的方法

@Deprecated:这个凝视是一个标记凝视。

所谓标记凝视。就是在源程序中增加这个标记后,并不影响程序的编译。但有时编译器会显示一些警告信息。

或者在方法名上加一横线,意思是建议不使用

@SuppressWarnings(""):对代码中变量或方法的警告提示,也是想告诉该方法存在潜在风险等。

注解分类:

依照执行机制分类:

1,源代码注解:注解仅仅在源代码中存在 ,编译成.class文件就不存在了。

2,编译时注解:在源代码和.class中都存在

3。执行时注解:在执行阶段才会起作用的注解,甚至会影响执行逻辑的注解。

依照来源分类:

1。来自JDK的注解:

2。来自第三方的注解:

3。我们自定义的注解:

另外一类叫元注解:对注解的注解。

常见第三方注解:

Spring中的@Autowired   @Service    @Repository等

Mybatis中的@InsertProvider   @UpdateProvider   @Options等

自己定义注解:

以@interface +注解名

如定论了一个名为Description注解:

@Target({ ElementType.METHOD, ElementType.TYPE })   //@Targe指注解的作用域,包含METHOD方法声明,TYPE类接口,PARAMETER參数声明。PACKAGE包声明,LOCAL_VARIABLE局部变量声明,FIELD字段声明及CONSTRUCTOR构造方法声明

@Retention(RetentionPolicy.RUNTIME)   //@Retenion指生命周期:1。源代码注解:注解仅仅在源代码中存在 。编译成.class文件就不存在了。2,编译时注解:在源代码和.class中都存在3,执行时注解:在执行阶段才会起作用的注解,甚至会影响执行逻辑的注解。

@Inherited //@Inherited指同意子类继承

@Documented//@Documented生成java doc时包括注解信息

//以上4行为元注解

public @interface Description {

/*注解中的成员类型是受限制的:合法的类(int double等)包含原始类型及String,Class,Annotation,Enumeration等

* 假设注解仅仅有一个成员。则成员名必须取名为value(),在使用注解时能够忽略成员名和赋值符号(=)

* 注解类能够没有成员。没有成员的注解称为标识注解****/

String desc();//注解中的成员(成员变量)以无參无异常方式声明

String author();

int age() default 18;//能够用default为成员指定一个默认值

}

以下是一个对注解进行操作的小样例:

@Description(author = "child", desc = "在Child上的类注解")    //使用注解:使用注解语法 :@<注解名>(成员名1=值1,成员名2=值2.....)多个成员用逗号分隔,依据@Target指定的使用范围来使用

public class Child{

@Description(author = "ldm", desc = "在Child的name()方法注解")

public String name() {

// TODO Auto-generated method stub

return null;

}

@Description(author = "child", desc = "Child中number()方法注解")

public String number() {

return "100";

}

}

public static void main(String[] args) {

// 首先使用类载入器载入类

try {

Class c = Class.forName("com.ldm.test.Child");

// 找到类上面的注解

boolean isExist = c.isAnnotationPresent(Description.class);// 推断注解是否存在

if (isExist) {

// 拿到注解实例

Description d = (Description) c.getAnnotation(Description.class);

System.out.println(d.desc());

}

//找到方法上的注解

Method[] ms=c.getMethods();

for (Method m : ms) {

boolean isMExist = m.isAnnotationPresent(Description.class);// 推断注解是否存在

if(isMExist){

// 拿到注解实例

Description d = (Description) m.getAnnotation(Description.class);

System.out.println(d.desc());

}

}

/**********************************************/

//第二种解析方法

for (Method m : ms) {

Annotation []as=m.getAnnotations();

for (Annotation a : as) {

if(a instanceof Description){

Description d=(Description) a;

System.out.println(d.desc());

}

}

}

}

catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

----------------控制台打印结果------------------------------------------

在Child上的类注解

在Child的name()方法注解

Child中number()方法注解

在Child的name()方法注解

Child中number()方法注解

时间: 2024-11-10 13:49:33

java注解学习笔记的相关文章

java nio学习笔记(一)

位置保留,待用 java nio学习笔记(一),布布扣,bubuko.com

JAVA基础学习笔记(2)

看了几天的视频了,都没时间来写下学习笔记,今天来写下第二次的学习笔记,前几天看的给忘记了,就写最新看到的吧 主要内容:1.类的变量与函数(方法) 2.对象的存储方式 3.新建一个对象及对象的赋值与调用 4.空对象 5.匿名对象 1.类的变量与函数(方法) class Dog      //类名 { String name;  //变量的声明 int age; String color; void bark()   //方法的定义(返回值为空,不带参数) { System.out.println(

java排序学习笔记

前面写了js的排序实现,总得玩玩java的哈. 同样,冒泡.选择.快速(这三个之前实现过也写过文章).堆排序,然后做比较. 主要遇到的难点: - -||想轻松点写个封装计时的逻辑,不想每调用一个排序就要写一个计时代码.想想,还是javascript写起来方便: java的话,我想到的方法是写一个抽象类:抽象出排序方法,实现一个排序计时方法(该方法调用了抽象排序,但在先后排序时加入计时代码[感觉像是aop操作]): 接着所有排序类都继承这个抽象类,并实现排序方法,调用的时候直接调用继承的排序计时方

《深入Java虚拟机学习笔记》- 第4章 网络移动性

Java虚拟机学习笔记(四)网络移动性 <深入Java虚拟机学习笔记>- 第4章 网络移动性,布布扣,bubuko.com

《深入Java虚拟机学习笔记》- 第7章 类型的生命周期

一.类型生命周期的开始 如图所示 初始化时机 所有Java虚拟机实现必须在每个类或接口首次主动使用时初始化: 以下几种情形符合主动使用的要求: 当创建某个类的新实例时(或者通过在字节码中执行new指令,或者通过不明确的创建.反射.克隆和反序列化): 当调用某个类的静态方法时(即在字节码中执行invokestatic指令): 当使用某个类或接口的静态字段,或者对该字段赋值时(用final修饰的静态字段除外,它被初始化为一个编译时常量表达式): 当调用Java API中的某些反射方法: 当初始化某个

《深入Java虚拟机学习笔记》- 第13章 逻辑运算

<深入Java虚拟机学习笔记>- 第13章 浮点运算 <深入Java虚拟机学习笔记>- 第13章 逻辑运算,布布扣,bubuko.com

《深入Java虚拟机学习笔记》- 第12章 整数运算

Java虚拟机提供几种进行整数算术运算的操作码,他们执行基于int和long类型的运算.当byte.short和char类型值参与算术运算时,首先会将它们转换为int类型.这些操作码都不会抛出异常,溢出在这里通常可以被忽略. 整数加法 操作码 操作数 说明 iadd (无) 从栈中弹出两个int类型数,相加,然后将所得int类型结果压回栈 ladd (无) 从栈中弹出两个long类型数,相加,然后将所得long类型结果压回栈 将一个常量与局部变量相加 操作码 操作数 说明 iinc vindex

《深入Java虚拟机学习笔记》- 第2章 平台无关

Java虚拟机学习笔记(二)平台无关 <深入Java虚拟机学习笔记>- 第2章 平台无关,布布扣,bubuko.com

java JDK8 学习笔记——第16章 整合数据库

第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程序. 2.JDBC标准主要分为两个部分:JDBC应用程序开发者接口和JDBC驱动程序开发者接口.应用程序需要联机数据库,其相关API主要在java.sql和javax.sql两个包中. 3.应用程序使用JDBC联机数据库的通用语法: Connection conn = DriverManager.g