Java注解

目录

注解的本质

元注解

使用注解

定义一个注解

 再看一个@Test注解

总结,了解注解的使用能帮助你理解注解。 


注解的本质

注解的意思就是让其他程序根据注解信息,来决定该怎么执行该程序

java注解是一种元数据标记,用于提供程序元素的说明和注释信息。

注解本身并不提供额外的语义,而只是纯粹的元数据。

它们可以用于为编译器,开发工具,框架等提供额外的信息,但·不会影响程序的运行。

(在Java中先学习使用注解能让你更好的了解注解)

元注解

java中有四个元注解,但是在基础阶段重要的只有@Target@Retention两个另外两个是@Documented和@Repeatable

元注解的作用就是:修饰注解的注解。

@Target作用:声明被修饰的注解只能在哪些地方使用

@Target(ElementType. TYPE)//TYPE可以更换,增添

  1. TYPE:类,接口
  2. FIELD:成员变量
  3. METHOD:成员方法
  4. PARAMETER:方法参数
  5. CONSTRUCTOR:构造器
  6. LOCAL_VARIABLE:局部变量

@Retention作用:声明注解的保留周期

@Retention(RetentionPolicy.RUNTIME)

  1. RUNTIME:一直保留到运行阶段
  2. CLASS:保留到字节码文件阶段,运行阶段不存在
  3. SOURCE:只做用在源码阶段,字节码文件中不存在

注意以上是元注解,是定义注解的注解

使用注解

@Override是Java中的一个常用注解,用于指示一个方法是重写了父类或者实现了接口中的方法。使用@Override注解可以帮助编译器检查代码的正确性,避免因方法签名不匹配导致的错误。下面是一个使用@Override注解的案例:

假设我们有一个父类Animal和一个子类Dog,Animal类中有一个名为“makeSound”的方法,Dog类需要重写这个方法。我们可以使用@Override注解来表明Dog类中的“makeSound”方法是重写了Animal类中的方法,代码如下:

class Animal {  
    public void makeSound() {  
        System.out.println("The animal makes a sound");  
    }  
}  
  
class Dog extends Animal {  
    @Override  
    public void makeSound() {  
        System.out.println("The dog barks");  
    }  
}

在上面的代码中,我们在Dog类的makeSound方法上添加了@Override注解,表明该方法重写了Animal类中的makeSound方法。当我们调用Dog类的makeSound方法时,会输出“The dog barks”。如果我们没有在Dog类的makeSound方法上添加@Override注解,而该方法又没有正确地重写Animal类中的makeSound方法(例如方法签名不匹配),编译器将会报错。使用@Override注解可以帮助我们避免这类错误,提高代码的可读性和可维护性。同时,@Override注解也可以被用在接口实现的方法上,表明该方法实现了接口中定义的方法。

需要注意的是,在使用@Override注解时,方法的签名(包括方法名、参数类型和返回类型)必须与父类或接口中被重写或被实现的方法的签名完全一致,否则会编译失败。

定义一个注解

如何写一个注解?写一个注解就需要用到关键词@interface

写注解和写接口有一些相似,都是以声明的方式出现,可以用来表示某种声明信息

要自己写一个注解需要以下几步

  1. 创建一个新的java类,作为注解的代码定义
  2. 在类前面添加@interface关键字,表示该类是一个注解类型
  3. 在类中定义注解的元素,这些元素可以用来存储注解的值。元素可以使常量,枚举类型,类类型,整数类型,等类型,也可以是其他注解类型
  4. 为注解元素指定默认值,这样在使用注解时如果没有提供该元素的值,就会使用默认值
  5. 为注解添加一些元数据(元注解也是一种元数据)(可加可不加)例如用于指定该注解的作用范围·,是否在代码中显示,保留周期
  6. 将注解应用到需要使用的地方,例如方法,类,字段

下面是一个示例

@Retention(RetentionPolicy.RUNTIME)  
@Target(ElementType.TYPE)  
public @interface MyAnnotation {  
    String value() default "";  
    int count() default 0;  
}

这个注解有两个元素,分别是value和count,他们的默认值分别是空字符串和0.该注解的作用范围是类型(TYPE),也就是用于类,接口或者枚举声明。同时,该注解在运行时(RUNTIME)被保留。可以这样使用该注解

@MyAnnotation(value = "hello", count = 3)  
public class MyClass {  
    // class body  
}

 再看一个@Test注解

在Java中,使用@Test注解的例子通常出现在JUnit测试框架中。@Test注解用于标记一个方法作为测试用例。这个junit先不用管只要知道@Test的作用是(当你将@Test注解添加到一个方法上时,这个方法就变成了一个测试用例,java会自动识别并执行它。没有添加@Test的就不会被执行)下面是一个简单的例子:

import org.junit.Test;  
import static org.junit.Assert.assertEquals;  
  
public class CalculatorTest {  
      
    @Test  
    public void testAdd() {  
        Calculator calculator = new Calculator();  
        int result = calculator.add(2, 3);  
        assertEquals(5, result);  
    }  
      
    public void testSubtraction() {  
        Calculator calculator = new Calculator();  
        int result = calculator.subtract(5, 3);  
        if (result != 2) {  
            System.out.println("Test failed");  
        }  
    }  
}

在上面的例子中,我们同时使用了使用@Test注解的testAdd方法和没有使用@Test注解的testSubtraction方法。使用@Test注解的testAdd方法会被JUnit自动发现并执行,而没有使用@Test注解的testSubtraction方法则不会被执行。如果你想执行testSubtraction方法,可以在该方法上添加@Test注解。

总结,了解注解的使用能帮助你理解注解。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值