目录
一.注解概念
二.常用注解(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 即运行阶段调用该注解
其它注解同理。