★ JUnit中的其它注解
@BeforeClass、@AfterClass、@Before、@After
package cn.hncu.test; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import cn.hncu.user.dao.dao.UserDao; import cn.hncu.user.dao.factory.UserDaoFactory; import cn.hncu.user.dao.impl.UserDaoImpl; /** * @author 陈浩翔 * @version 1.0 2016-5-4 */ public class TestUserDaoImpl2 { UserDao dao = UserDaoFactory.getUserDao(); //注意要加static @BeforeClass public static void initFirst(){ System.out.println("finishEnd..."); } //在每次运行@Test方法之前,都会先运行这个@Before的方法 @Before public void init(){ System.out.println("init..."); } @Test public void testFun1(){ try { dao.fun1(); } catch (Exception e) { e.printStackTrace(); } } /*运行结果 finishEnd... init... fun1.... finish... finishEnd... */ @Test public void testFun2() { dao.fun2(); } /*运行结果 finishEnd... init... fun2.... finish... finishEnd... */ @Test public void testFun3() { dao.fun3(); } /*运行结果 finishEnd... init... fun3.... finish... finishEnd... */ //在每次运行@Test方法之后,都会最后运行这个@After的方法 @After public void finish(){ System.out.println("finish..."); } //注意要加static @AfterClass public static void finishEnd(){ System.out.println("finishEnd..."); } }
注解 ( Annotation )
★ 元数据
所谓元数据就是数据的数据。也就是说,元数据是描述数据的。就象数据表中的字段一样,每个字段描述了这个字段下的数据的含义。
元数据可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。许多元数据工具,如XDoclet,将这些功能添加到核心Java语言中,暂时成为Java编程功能的一部分。
一般来说,元数据的好处分为三类:文档编制、编译器检查和代码分析。代码级文档最常被引用。元数据提供了一种有用的方法来指明方法是否取决于其他方法,它们是否完整,特定类是否必须引用其他类,等等。
1
2
3
★ 什么是注解
Java中的注解就是Java源代码的元数据,也就是说注解是用来描述Java源代码的。 基本语法就是:@后面跟注解的名称。
像前面演示的那几个都是注解。
★ Java中预定义注解
①Override:标识某一个方法是否正确覆盖了它的父类的方法。
(如果用了这个注解,但是父类中没有这个方法,就会报错)
②Deprecated:表示已经不建议使用这个类成员了。 它是一个标记注解。
(用了这个注解的,表示在下一个升级版本中,可能不会有这个方法了,但是会有类似功能的方法代替,会在注释中提出)
③SuppressWarnings:用来抑制警告信息。
(例如:压泛型的警告)
(这个是可以传参进去的,可以实现不同的功能)
自定义注解1
自定义注解的语法很简单,跟定义接口类似,只是在名称前面加上@符号。
★ 最简单的自定义注解
public @interface MyAnno { }
★ 使用这个注解
和使用其他注解是一样的
@MyAnno public class UserModel{ }
★ 为注解添加成员
//定义 public @interface MyAnno { public String schoolName(); } //使用 @MyAnno(schoolName="湖南城市学院") public class UserModel{ }
★ 设置默认值
//定义 public @interface MyAnno { public String schoolName() default "湖南城市学院"; } //使用1 @MyAnno public class UserModel{ } //使用2 @MyAnno(schoolName="城院Java高手训练营") public class UserModel{ }
对注解的注解
package cn.hncu.anno; 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; @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD,ElementType.TYPE}) public @interface MyAnno { }
☆指定目标 Target
在了解如何使用Target 之前,需要认识另一个类,该类被称为ElementType (通过API详细学习) ,它实际上是一个枚举。这个枚举定义了注释类型可应用的不同程序元素。
//如果都不写,就是随便在哪里都可以用
@Target({ ElementType.TYPE, ElementType.METHOD})
//这个注解可以在哪里用,TYPE-可以在类上面用,METHOD-可以在方法上用
☆设置保持性 Retention
RetentionPolicy (通过API详细学习)枚举类中定义了3种注解保持性,分别决定了Java 编译器以何种方式处理注解。
@Retention(RetentionPolicy.RUNTIME)
//运行时VM虚拟机也能识别这个注解,这个注解一直存在
@Retention(RetentionPolicy.SOURCE)
//class文件中有这个注解,但是VM虚拟机运行时,忽略这个注解了。
(这是默认的)
☆添加公共文档 Documented
在默认的情况下在使用javadoc自动生成文档时,注解将被忽略掉。如果想在文档中也包含注解,必须使用Documented为文档注解。
☆设置继承 Inherited
在默认的情况下,父类的注解并不会被子类继承。如果要继承,就必须加上Inherited注解。