java语法复习:注解

目录

一.注解概念

二.常用注解(1) @Override: 限定某个函数必须重载其他函数,该注解只能用于函数(2) @Deprecated:用于表示某个程序元素(类、函数)已过时(3) @SuppressWarnings:抑制编译器警告

三.元注解


一.注解概念

(1) 注解(Annotation)也被称为元数据(Metadata),用于修饰包、方法、属性、构造器、局部变量等数据信息。
(2) 注解不影响程序逻辑,但注解可以被编译或运行
(3) 在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等

二.常用注解
(1) @Override: 限定某个函数必须重载其他函数,该注解只能用于函数
(2) @Deprecated:用于表示某个程序元素(类、函数)已过时
(3) @SuppressWarnings:抑制编译器警告

举例①: 对于@Override注解 限定某个函数必须重载其他函数,该注解只能用于函数

//本例中所作的是在子类ColorPoint中 重写 基类Point 中的getString()函数
class Point {
    public int x;
    public int y;

    public  String getString(){
        return String.format("(%d,%d)",x,y);
    }
}
class ColorPoint extends  Point{
    private String color;

    @Override
    public String getString(){  //重写Point中的getString()函数
        return String.format("(%d,%d,%s)",super.x,super.y,color);
    }

}

当然,我们更多用到的是对java自带函数重写,如compareTo() 和 toString() 函数,

比如 当我们想要对多个点进行排序,点中含有x、y两个关键字 

要按第一关键字正序排序,若第一关键字相等则比较第二关键字:

package org.example;

import java.lang.reflect.Array;
import java.util.Arrays;

class Point implements  Comparable<Point>{//使用Comparable接口重写toCompare(obj)方法
    public int x;
    public int y;
    public Point(int x,int y){
        this.x = x;
        this.y = y;
    }    
    @Override    //重写toString函数
    public String toString() {
        return String.format("x: %d y: %d \n",x,y);
    }

    @Override
    public int compareTo(Point o) { //重写compareTo函数
        if(this.x > o.x)
                return 1;
        if(this.x < o.x)
            return -1;
        if(this.y > o.y)
            return 1;
        if(this.y < o.y)
            return -1;
        return 1;
    }
}

public class Main {
    public static void main(String[] args) {
        Point[] arr = new Point[]{new Point(7,2),new Point(5,4),new Point(5,2)};
        Arrays.sort(arr);//排序
        System.out.println(Arrays.toString(arr));//输出
    }
}
//输出:
[x: 5 y: 2 
, x: 5 y: 4 
, x: 7 y: 2 
]

举例②: 对于@Deprecated 用于表示某个程序元素(类、函数)已过时

 可以看到调用添加@Deprecated注解的方法时,会出现该方法已被弃用

@Override不同的是,该注释不仅能标志在函数上,还能标志在类上,表示某个类已过时

这是因为它们的 元注解 不同 第三节中会提到.

举例③ 对于@SuppressWarnings:抑制编译器警告

如图,我们可以把 例子②  中getString()方法弃用的警告抑制,而不显示

 

三.元注解

修饰其他注解的注解,就被称为元注解。

(1) Retention:指定注解的作用范围
(2) Target:指定注解可以用在哪些地方
(3) Document:注定注解是否出出现在javadoc中
(4) Inherited:子类会继承父类的注解

接第二节 @Override 为什么只能修饰方法 ,我们可以按住ctrl键点击@Override 康康它的具体实现:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

可以看到,@Override注解 只能用在ElementType.METHOD, 即只能用在方法类型上,

同时在 RetentionPolicy.SOURCE, 即源码阶段阶段调用该注解

同样的 对于@Deprecated注解:

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}

Target()注解可知  @Deprecated注解可以用在 构造器、成员变量、局部变量、方法、包、函数参数类上

同时 在RetentionPolicy.RUNTIME 即运行阶段调用该注解

其它注解同理。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值