- 浏览: 238617 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
mhsjlove:
正则表达式的捕获组比这好用多了
高效率分离字符串到一个Map中 -
yk0025:
正在研究中。。。
Antx学习总结 -
asialee:
博主这块写的挺好的,我完全看了,不过我也写了一些关于编解码器的 ...
Netty源代码框架剖析( 二 ) -
he_wen:
不能够停止tomcat的话 kill -9 进程号 得到进程 ...
检查tomcat是否宕机 -
zhangyou1010:
catalina.sh stop 如果这个不能停止tomc ...
检查tomcat是否宕机
一、java 1.5的新特新注解和枚举
二、本文主要讲解注解和反射的主题应用?
1、Java.lang包下游三个基本的注解分别是:Deprecated用 @Deprecated 注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。在使用不被赞成的程序元素或在不被赞成的代码中执行重写时,编译器会发出警告。
2、注释类型 OverrideOverride
表示一个方法声明打算重写超类中的另一个方法声明。如果方法利用此注释类型进行注解但没有重写超类方法,则编译器会生成一条错误消息。
3、注释类型 SuppressWarningsSuppressWarnings
指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。注意,在给定元素中取消显示的警告集是所有包含元素中取消显示的警告的超集。例如,如果注释一个类来取消显示某个警告,同时注释一个方法来取消显示另一个警告,那么将在此方法中同时取消显示这两个警告。如:
@SuppressWarnings("deprecation")
public static void main(String[] args) throws Exception{
System.runFinalizersOnExit(true);
}
三、定义自己的注解
下面是说明定义注解的方法,以及怎样查看API
下面是编写自己的注解的实例,此源代码有详细的解说,下面就只需大家运行一下代码即可:
这个是自己定义的注解类
package cn.itcast.day2; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import cn.itcast.day1.EnumTest; /*** * 注解可以注入哪些属性呢? * 可以注入注解的注解,数组,基本类型,String,枚举还以上类型的数组,还有Class * 当注入数组只有一个值的时候可以写成如: * @Target(ElementType.METHOD) * @author Administrator *@Retention注解的生命周期,注解类要经过三个生命周期, * SOURCE,注解就会在编译的时候注解类会抛弃 CLASS,注解类编译成class文件后不想保留在虚拟机里,则抛弃,这个是默认值 * Annotations are to be recorded in the class file by the compiler and * retained by the VM at run time, so they may be read reflectively. * RUNTIME */ @Retention(RetentionPolicy.RUNTIME)//元注解,信息的信息就叫元信息 /** * 这个注解的意思就是自定义的注解用户可以放在哪里进行注解 * 如:可以在属性、构造方法、方法、参数声明、类接口等 * 详细请查看文档ElementType枚举的类型 */ @Target({ElementType.METHOD,ElementType.TYPE}) public @interface ItcastAnnotation { String color() default "blue";//default想让注解射入属性一个值 String value(); int[] arrayAttr() default {3,4,4}; EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.RED; MetaAnnotation annotationAttr() default @MetaAnnotation("lhm"); Class getType(); }
这个是测试的代码
package cn.itcast.day2; import java.lang.reflect.Method; import java.lang.reflect.Type; import cn.itcast.day1.ReflectPoint; /*** * 如果@ItcastAnnotation注解类的属性有默认的值可以不注入值 * @author Administrator * */ @ItcastAnnotation(annotationAttr=@MetaAnnotation("flx"),color="red",value="abc",arrayAttr=1,getType=ReflectPoint.class) public class AnnotationTest { @SuppressWarnings("deprecation") //@ItcastAnnotation("xyz") public static void main(String[] args) throws Exception{ System.runFinalizersOnExit(true); if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)){ ItcastAnnotation annotation = (ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class); System.out.println(annotation.color()); System.out.println(annotation.value()); System.out.println(annotation.arrayAttr().length); System.out.println(annotation.lamp().nextLamp().name()); System.out.println(annotation.annotationAttr().value()); //利用反射机制获取ReflectPoint类的实例 System.out.println(annotation.getType().getConstructor(new Class[]{int.class,int.class}).newInstance(2,3)); Method[] methods=annotation.getType().getMethods(); String methodName; String fieldName; Type type; for(Method method:methods){ methodName=method.getName(); fieldName=methodName.substring(3).toLowerCase(); if(methodName.startsWith("set")){ System.out.println(methodName); // type=method.getGenericParameterTypes()[0];//可以得到方法的参数类型 //System.out.println(type); } } } } @Deprecated public static void sayHello(){ System.out.println("hi,"得到"); }
这个是枚举类
package cn.itcast.day1; import java.util.Date; public class EnumTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub WeekDay1 weekDay = WeekDay1.MON; System.out.println(weekDay.nextDay()); WeekDay weekDay2 = WeekDay.FRI; System.out.println(weekDay2); System.out.println(weekDay2.name()); System.out.println(weekDay2.ordinal()); System.out.println(WeekDay.valueOf("SUN").toString()); System.out.println(WeekDay.values().length); new Date(300){}; } public enum WeekDay{ SUN(1),MON(),TUE,WED,THI,FRI,SAT; private WeekDay(){System.out.println("first");} private WeekDay(int day){System.out.println("second");} } public enum TrafficLamp{ RED(30){ public TrafficLamp nextLamp(){ return GREEN; } }, GREEN(45){ public TrafficLamp nextLamp(){ return YELLOW; } }, YELLOW(5){ public TrafficLamp nextLamp(){ return RED; } }; public abstract TrafficLamp nextLamp(); private int time; private TrafficLamp(int time){this.time = time;} } }
这个是要注入的class类:ReflectPoint
package cn.itcast.day1; import java.util.Date; public class ReflectPoint { private Date birthday = new Date(); private int x; public int y; public String str1 = "ball"; public String str2 = "basketball"; public String str3 = "itcast"; public ReflectPoint(int x, int y) { super(); this.x = x; this.y = y; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + x; result = prime * result + y; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final ReflectPoint other = (ReflectPoint) obj; if (x != other.x) return false; if (y != other.y) return false; return true; } @Override public String toString(){ return str1 + ":" + str2 + ":" + str3; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
发表评论
-
编程中注意事项
2012-10-18 15:23 1174最近的机器内存又爆满了,除了新增机器内存外,还应该好好re ... -
java线程池的设计思想
2012-07-03 20:25 1753ExecutorService executorForFM = ... -
java 代码规范
2012-02-16 16:25 1415java 代码规范 一、方法的规范 ... -
代码质量保证
2011-10-27 18:31 1536本文分为四节如:如何提高代码的可读性、一般异常的处理机制、JV ... -
高效率分离字符串到一个Map中
2010-12-08 21:10 2135package test.hewen; import j ... -
Java集合 之 如何动态控制HashMap
2010-12-08 20:29 3515本文章主要是控制HashMap权限如:设置一把锁(这里实现是通 ... -
Java集合 之 动态数组
2010-12-08 19:44 1473注意:首先本程序是根 ... -
servlet源码和生命周期
2010-11-01 22:47 3149这里是servlet的类图之间的设计关系,里面接口、抽象类我只 ... -
泛型的内部原理与应用
2010-09-20 00:08 1509一、下面是说明泛型的基本原理与代码的应用 /** * ... -
JavaBean内省的用法
2010-09-19 11:30 2012Introspector (Java Platform SE ... -
反射之类加载器详解和委托加载
2010-09-18 23:09 1870父类加载器。 下面用例子进行说明如: public ... -
Java流总结
2010-09-14 17:06 1570一、IO流的三种分类方式 1.按流的方向分为:输 ... -
Java容器
2010-09-10 14:51 4430一、List接口 ArrayList,对象加入之后大都是为了 ... -
java比较陌生的语法
2010-09-10 11:35 1072一、 Java并没有虚构函数,但是有finalize ... -
JAVA API String小细节之享元模式
2010-09-10 10:01 1477GOF:运用共享技术有效地支持大量细粒度的对象。 解释一下 ... -
Java对日期操作处理类
2010-09-08 21:08 4763项目中经常用到对日期 ...
相关推荐
6. **注解与反射**:反射可以读取类、方法、字段上的注解信息,这在运行时动态处理逻辑、实现插件化等方面非常有用。 在`AnnotationDemo-master`这个项目中,可能包含了注解和反射的实践案例,例如通过注解定义接口...
java注解和反射的个人学习笔记
反射操作注解与反射操作泛型 在 Java 编程中,反射操作和泛型是两个重要的概念。反射操作是指在运行时检查和修改类、对象、方法、字段等信息的能力,而泛型是指在编译时检查和限制类型的能力。本文将详细介绍反射...
总之,注解与反射是Java语言的核心高级特性之一,它们能够提供强大的代码动态性,对于实现框架设计、简化代码编写等都有极大的帮助。Java开发者应当充分理解和掌握这些高级特性,以便在实际开发中运用自如。
在这个压缩包文件"(02)2020.4.26 Java高级语言特性,注解与反射---lance老师.rar"中,我们主要探讨的是Java的两个高级特性:注解(Annotation)和反射(Reflection)。这两个特性是Java编程中的重要工具,极大地...
在Java编程语言中,注解(Annotation)和反射(Reflection)是两个非常重要的高级特性,它们为程序提供了元数据信息和运行时动态操作类的能力。本文将深入探讨这两个概念及其在实际开发中的应用。 首先,让我们了解...
利用JAVA注解实现SQL语句自动生成 编写对应Entity添加相关注解,并通过SqlUtil工具,传入相关参数生成SQL语句 例如:要生成对应数据库Person的SQL增删改查 SqlUtil.create(Person.class) SqlUtil.insert(Person....
当注解与反射结合时,我们可以利用反射机制来读取和处理注解中的信息。在Java中,`AnnotatedElement`接口提供了获取注解的方法,包括`getAnnotations()`和`getAnnotation(Class<T> annotationClass)`。 1. `...
本文将深入探讨如何通过反射机制来获取自定义注解以及其在字段上的应用。 首先,我们需要了解什么是自定义注解。自定义注解是以`@`开头,后跟自定义的名称。定义一个注解的基本结构如下: ```java import java....
在Android开发中,注解(Annotation)和...通过深入理解和运用注解与反射,开发者可以进一步优化代码结构,提高应用程序的质量。在实际项目中,类似的框架可以作为一个基础工具库,方便快速开发新功能,降低维护成本。
### 结合注解与反射的实例 在`ReflectDemo`中,可能会包含一个使用自定义注解`@Loggable`的方法,通过反射来检测这个注解并在运行时执行相应的日志记录。例如: ```java public class ReflectDemo { @Loggable(...
6. **注释与反射**: - Java反射还可以用于读取类、方法、字段上的注释,这对于元数据驱动的设计尤其有用。 7. **反射的使用场景**: - 动态加载类:在运行时根据用户输入或配置文件加载相应的类。 - 框架开发:...
这些Demo旨在帮助学习者深入理解Java注解和反射的原理与应用,通过实际操作加深对这两个概念的认识,提高开发能力。在学习过程中,结合B站狂神的讲解,能够更有效地掌握这些高级特性,为日后的项目开发打下坚实的...
1. **注解的定义与使用** 注解以`@`符号开头,后面跟着注解的类型。例如,`@Override`表示方法重写,`@Deprecated`表示某个功能已过时。注解可以应用于类、接口、字段、方法等。注解本身不直接影响程序的执行,但...
反射注解暴力反射详细思维导图.xmind
Java注解和反射机制是Java开发中的重要工具,它们极大地增强了代码的可读性和灵活性。在结合JDBC(Java Database Connectivity)API时,可以构建出更高效、更易维护的数据访问层。本案例通过注解的方式,简化了JDBC...
本示例“servlet反射注解例子”旨在帮助我们深入理解如何将这两种技术结合使用,以实现更加灵活和可维护的服务器端应用程序。本文将详细探讨反射和注解在Servlet中的应用。 首先,让我们来了解一下什么是反射。反射...
Java-JDBC【之】实现ORM,结果集映射实体类(ResultSet、注解、反射) 1.ORM实现思路 2.@Table、@Column、标识实体类 2.1.创建注解 @Table、@Column 2.2.标识实体类 2.3.数据库表 3.结果集解析,注解加反射填充实体...
默认情况下,Java反射API(如`Field[] getDeclaredFields()`方法)返回的字段数组顺序与它们在源代码中的声明顺序一致。在某些场景下,如序列化或JSON转换,我们可能需要控制这些属性的顺序。 为了解决这个问题,...
8. **注解与反射**:可以使用`getAnnotations()`和`isAnnotationPresent()`等方法检查类、方法、字段上的注解,从而实现基于注解的编程。 9. **动态代理**:`java.lang.reflect.Proxy`类允许创建动态代理,用于在...