`
hubin4
  • 浏览: 96612 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

java 1.5 annotation-2

    博客分类:
  • JAVA
阅读更多
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的

所以注解有三个生命周期

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

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


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

@SuppressWarning
也是在 source

@Deprecated
要在runtime阶段
--------好好想想


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

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

Type 是 class的爸爸,
1.5后,有每举,有注释,有接口...都是 类
他们和类都是兄弟关系,类不大了,
最大的是type了
Interface Type 也是1.5 新出的
分享到:
评论

相关推荐

    java1.5 annotation注释源代码

    Java 1.5 引入了一种新的元编程机制——注解(Annotation),极大地增强了代码的可读性和可维护性。注解是一种在代码中添加元数据的方式,它允许程序员在源代码上添加一些信息,这些信息可以被编译器或运行时环境...

    异常解决:错误:namespace element 'annotation-config' … on JDK 1.5 and higher

    标题中的“异常解决:错误:namespace element 'annotation-config' … on JDK 1.5 and higher”涉及的是在Java开发过程中遇到的一个错误,特别是在使用Spring框架时可能会遇到。这个错误通常表明在JDK 1.5及更高版本...

    1.5api-part1

    Java 1.5 API,也被称为Java SE 5.0,是Java开发工具包的一个重要版本,它引入了许多新特性,增强了语言的功能性和效率。这个API文档提供了详细的类和接口说明,帮助开发者理解和使用Java 1.5中的新功能。 在压缩包...

    JAVA EE API-1.5&1.6.

    - EJB 3.0:这是企业Java Bean(EJB)的重大改革,引入了注解(Annotation)以简化部署和配置,使得EJB更加轻量级和易用。 - Servlet 2.5:增强了Servlet规范,提供了对HTTP会话监听器、过滤器链和异步处理的支持...

    JAVA_API1.5.rar_java1.5 api

    Java 1.5,也被称为Java 5.0,是一个重要的Java开发平台版本,它引入了许多新特性,改进了已有的API,并提升了编程效率。Java 2 Platform Standard Edition(J2SE)5.0是Java SE平台的一个里程碑,为开发者提供了更...

    JDK1.5的annotation

    标题 "JDK1.5的annotation" 指的是Java Development Kit 1.5引入的注解(Annotation)特性。注解是一种元数据,它提供了在代码中嵌入信息的方式,这些信息可以被编译器或Java虚拟机(JVM)在编译时或运行时读取和...

    java jdk1.5

    Java JDK 1.5,全称为Java Development Kit 1.5,是Oracle公司(原Sun Microsystems)发布的Java编程语言的一个重要版本。这个版本在2004年发布,引入了许多新特性和改进,极大地提升了Java的开发效率和性能。下面...

    Java虚拟机1.5

    2. **枚举类型**:在Java 1.5之前,枚举通常通过常量类实现,而Java 5引入了内置的枚举类型,使得枚举更易于使用和管理,且支持更多的面向对象特性,如继承和方法。 3. **自动装箱与拆箱**:Java 5引入了自动装箱和...

    java7源码翻译-recap-spring:回顾春天

    Annotation Config Spring 3.0 ------> 2010 - 2012 Spring 3.2 ------> 2012 -- Support for Java7, Hibernate, Servlet 3.0 -- Required Java 1.5+ -- Java Configuration Appraoch Spring 4.0 -------> ...

    jdk1.5、1.6压缩包

    本压缩包包含了JDK的两个重要版本:1.5(也称为Java 5)和1.6(Java 6),这两个版本在历史上对Java社区有着深远的影响。 JDK 1.5(2004年发布)是Java发展的一个重要里程碑,引入了许多新特性,极大地提升了开发...

    什么是Annotation?

    在Java 1.5版本中引入了一个重要的新特性——**Annotation**(注解)。Annotation本质上是一种元数据(即关于数据的数据),它提供了一种机制来关联程序元素(如类、方法、属性等)与其附加信息。 在早期的Java开发...

    jdk1.5新特性

    虽然原文中提到的“Metadata”没有给出具体实现细节,但我们可以推测这里指的是 Java 1.5 中引入的注解(Annotation)。注解是一种用于向源代码添加元数据的方法,它允许开发者为代码添加额外的信息,而不影响代码的...

    Java实战篇:设计自己的Annotation

    本文将重点介绍Java 1.5及以后版本中内置的三种常用注解类型及其应用方式,并进一步探讨如何自定义Annotation。 **1.1 @Override 注解** - **定义**:`@Override`注解用于标记重写(override)父类的方法。它只...

    Java自定义注解Annotation的使用

    自从JDK 1.5引入了注解这一特性以来,它已经成为Java开发中的一个重要组成部分。注解最初是为了推动EJB 3.0的普及和发展而设计的,其目的是减少配置文件的使用,使得开发变得更加简洁高效。随着时间的推移,这种“零...

    javaweb项目常用jar包

    jackson-annotation-2.3.0.jar jackson-core-2.3.3.jar jackson-databind-2.3.3.jar java_websocket.jar javassist-3.11.0.GA.jar jaxen-1.1.jar jboss-logging-3.1.4.GA.jar jboss-logging-annotations-...

    基于Annotation的Java单元测试框架.pdf

    Java 2 Platform, Enterprise Edition (J2EE) Specification, v1.5. [2] Oracle Corporation. Java SE 8 API Documentation. [3] JUnit.org. JUnit 4.12 API Documentation. [4] Eclipse Foundation. Eclipse ...

Global site tag (gtag.js) - Google Analytics