建筑公司网站董事长致辞,关键词推广平台,华为手机网络营销推广方案,网络广告一般是怎么收费在阅读的过程中有不论什么问题#xff0c;欢迎一起交流 邮箱#xff1a;1494713801qq.com QQ#xff1a;1494713801 1、什么是java注解 注解#xff0c;顾名思义#xff0c;注解,就是对某一事物进行加入凝视说明#xff0c;会存放一些信息。这些信息可能对以后某… 在阅读的过程中有不论什么问题欢迎一起交流 邮箱1494713801qq.com QQ1494713801 1、什么是java注解 注解顾名思义注解,就是对某一事物进行加入凝视说明会存放一些信息。这些信息可能对以后某个时段来说是非常实用处的。 java提供了一套注解机制使得我们能够对方法、类、參数、包、域以及变量等加入标准(即附上某些信息)。且在以后某个时段通过反射将标注的信息提取出来以供使用。 2、JDK提供的基本注解 a. SuppressWarnings 该注解的作用是阻止编译器发出某些警告信息。它能够有下面參数: deprecation过时的类或方法警告。 unchecked运行了未检查的转换时警告。 fallthrough当Switch程序块直接通往下一种情况而没有Break时的警告。 path在类路径、源文件路径等中有不存在的路径时的警告。 serial当在可序列化的类上缺少serialVersionUID定义时的警告。 finally不论什么finally子句不能完毕时的警告。 all关于以上全部情况的警告。 b.Deprecated 该注解的作用是标记某个过时的类或方法。 c. Override 该注解用在方法前面用来标识该方法是重写父类的某个方法。 3、元注解 a. Retention 它是被定义在一个注解类的前面用来说明该注解的生命周期。它有下面參数 RetentionPolicy.SOURCE指定注解仅仅保留在一个源文件其中。 RetentionPolicy.CLASS指定注解仅仅保留在一个class文件里。 RetentionPolicy.RUNTIME指定注解能够保留在程序执行期间。 b. Target 它是被定义在一个注解类的前面用来说明该注解能够被声明在哪些元素前。它有下面參数 ElementType.TYPE说明该注解仅仅能被声明在一个类前。 ElementType.FIELD说明该注解仅仅能被声明在一个类的字段前。 ElementType.METHOD说明该注解仅仅能被声明在一个类的方法前。 ElementType.PARAMETER说明该注解仅仅能被声明在一个方法參数。 ElementType.CONSTRUCTOR说明该注解仅仅能声明在一个类的构造方法前。 ElementType.LOCAL_VARIABLE说明该注解仅仅能声明在一个局部变量前。 ElementType.ANNOTATION_TYPE说明该注解仅仅能声明在一个注解类型前。 ElementType.PACKAGE说明该注解仅仅能声明在一个包名前。 4、注解的生命周期 一个注解能够有三个生命周期它默认的生命周期是保留在一个CLASS文件但它也能够由一个Retetion的元注解指定它的生命周期。 a.java源文件 当在一个注解类前定义了一个Retetion(RetentionPolicy.SOURCE)的注解那么说明该注解仅仅保留在一个源文件其中。当编译器将源文件编译成class文件时它不会将源文件里定义的注解保留在class文件里。 b. class文件里 当在一个注解类前定义了一个Retetion(RetentionPolicy.CLASS)的注解。那么说明该注解仅仅保留在一个class文件其中当载入class文件到内存时虚拟机会将注解去掉从而在程序中不能訪问。 c. 程序执行期间 当在一个注解类前定义了一个Retetion(RetentionPolicy.RUNTIME)的注解那么说明该注解在程序执行期间都会存在内存其中。此时我们能够通过反射来获得定义在某个类上的全部注解。 5、注解的定义 一个简单的注解 public interface Annotation01{ //定义公共的final静态属性..... //定以公共的抽象方法...... } a.注解能够有哪些成员 注解和接口相似。它仅仅能定义final静态属性和公共抽象方法。 b.注解的方法 1.方法前默认会加上public abstract 2.在声明方法时能够定义方法的默认返回值。 比如: Stringcolor()defaultblue; String[]color()default{blue,red,......} 3.方法的返回值能够有哪些类型 8种基本类型String、Class、枚举、注解及这些类型的数组。 c.使用注解參照以下的注解使用注解的使用分为三个过程。 定义注解--声明注解--得到注解 a.定义注解參照上面的注解定义 b.声明注解 1.在哪些元素上声明注解 假设定义注解时没有指定Target元注解来限制它的使用范围。那么该注解能够使用在ElementType枚举指定的不论什么一个元素前。否则。仅仅能声明在Target元注解指定的元素前。 一般形式 注解名() 2.对注解的方法的返回值进行赋值 对于注解中定义的每个没有默认返回值的方法。在声明注解时必须对它的每个方法的返回值进行赋值。 一般形式: 注解名(方法名方法返回值。、、、、、、) 假设方法返回的是一个数组时。那么将方法返回值写在{}符号里 注解名(方法名{返回值1返回值2、、、、、、}、、、、、、、) 3.对于仅仅含有value方法的注解在声明注解时能够仅仅写返回值。 c.得到注解 对于生命周期为执行期间的注解。都能够通过反射获得该元素上的注解实例。 1、声明在一个类中的注解 能够通过该类Class对象的getAnnotation或getAnnotations方法获得。 2、声明在一个字段中的注解 通过Field对象的getAnnotation或getAnnotations方法获得 3、声明在一个方法中的注解 通过Method对象的getAnnotation或getAnnotations方法获得 6、样例以下讲的设计一个最简单的Annotation样例,这一样例共用四个文件; 1、Description.java Java代码 package lighter.javaeye.com; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented public interface Description { String value(); } 说明:全部的Annotation会自己主动继承java.lang.annotation这一个接口,所以不能再去继承别的类或是接口. 最重要的一点,Annotation类型里面的參数该怎么设定: 第一,仅仅能用public或默认(default)这两个訪问权修饰.比如,String value();这里把方法设为defaul默认类型. 第二,參数成员仅仅能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和String,Enum,Class,annotations等数据类型,以及这一些类型的数组.比如,String value();这里的參数成员就为String. 第三,假设仅仅有一个參数成员,最好把參数名称设为value,后加小括号.例:上面的样例就仅仅有一个參数成员. 2、Name.java Java代码 package lighter.javaeye.com; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; //注意这里的Target与Description里的不同,參数成员也不同 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface Name { String originate(); String community(); } 3、JavaEyer.java Java代码 package lighter.javaeye.com; Description(javaeye,做最优秀的软件开发交流社区) public class JavaEyer { Name(originate创始人:robbin,communityjavaEye) public String getName() { return null; } Name(originate创始人:江南白衣,communityspringside) public String getName2() { return 借用两位的id一用,写这一个样例,请见谅!; } } 4、最后写一个能够执行提取JavaEyer信息的类TestAnnotation Java代码 package lighter.javaeye.com; import java.lang.reflect.Method; import java.util.HashSet; import java.util.Set; public class TestAnnotation { /** * author lighter * 说明:详细关天Annotation的API的使用方法请參见javaDoc文档 */ public static void main(String[] args) throws Exception { String CLASS_NAME lighter.javaeye.com.JavaEyer; Class test Class.forName(CLASS_NAME); Method[] method test.getMethods(); boolean flag test.isAnnotationPresent(Description.class); if(flag) { Description des (Description)test.getAnnotation(Description.class); System.out.println(描写叙述:des.value()); System.out.println(-----------------); } //把JavaEyer这一类有利用到Name的所有方法保存到Set中去 SetMethod set new HashSetMethod(); for(int i0;imethod.length;i) { boolean otherFlag method[i].isAnnotationPresent(Name.class); if(otherFlag) set.add(method[i]); } for(Method m: set) { Name name m.getAnnotation(Name.class); System.out.println(name.originate()); System.out.println(创建的社区:name.community()); } } } 5、执行结果 描写叙述:javaeye,做最优秀的软件开发交流社区 ----------------- 创始人:robbin 创建的社区:javaEye 创始人:江南白衣 创建的社区:springside