您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
【第16章:Annotation】_系统内建Annotation
发布时间:2021-01-08 14:36:33编辑:雪饮阅读()
Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。
Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注。
网上很多关于 Java Annotation 的文章,看得人眼花缭乱。Java Annotation 本来很简单的,结果说的人没说清楚;弄的看的人更加迷糊。
我按照自己的思路,对 Annotation 进行了整理。理解 Annotation 的关键,是理解 Annotation 的语法和用法,对这些内容,我都进行了详细说明;理解 Annotation 的语法和用法之后,再看 Annotation 的框架图,可能有更深刻体会。废话就说这么多,下面开始对 Annotation 进行说明。若您发现文章中存在错误或不足的地方,希望您能指出!
Override的作用
一个正常的类与继承
class Person{
public String getInfo(){
return "这是一个Person类";
}
};
class Student extends Person{
public String getInfo(){
return "这是一个studen类型";
}
}
public class Hello{
public static void main(String args[]){
Person per=new Student();
System.out.println(per.getInfo());
}
};
但是这种方式在子类继承覆写父类方法时会出现失误
class Person{
public String getInfo(){
return "这是一个Person类";
}
};
class Student extends Person{
public String getinfo(){
return "这是一个studen类型";
}
}
public class Hello{
public static void main(String args[]){
Person per=new Student();
System.out.println(per.getInfo());
}
};
D:\>javac Hello.java
D:\>java Hello
这是一个Person类
可以看到子类覆写父类的方法名写错时并没有触发任何错误,但是父类是需要子类覆写的方法却并不是子类现在自定义的这个方法
但是当子类声明了某个方法为覆写父类的方法,则覆写的不正确时候就会有错误报出
class Person{
public String getInfo(){
return "这是一个Person类";
}
};
class Student extends Person{
@Override
public String getinfo(){
return "这是一个studen类型";
}
}
public class Hello{
public static void main(String args[]){
Person per=new Student();
System.out.println(per.getInfo());
}
};
D:\>javac Hello.java
Hello.java:7: 方法不会覆盖或实现超类型的方法
@Override
^
1 错误
Deprecated的作用
当父类某个方法被声明为Deprecated时则该方法就算是被子类正确覆写,那么还是会有警告信息提示
Deprecated声明的作用就是给该方法(API)的调用者一个过期提示,所以应用场景也是API过期废弃时候使用
class Person{
@Deprecated
public String getInfo(){
return "这是一个Person类";
}
};
class Student extends Person{
@Override
public String getInfo(){
return "这是一个studen类型";
}
}
public class Hello{
public static void main(String args[]){
Person per=new Student();
System.out.println(per.getInfo());
}
};
D:\>javac Hello.java
注意:Hello.java 使用或覆盖了已过时的 API。
注意:要了解详细信息,请使用 -Xlint:deprecation 重新编译。
Deprecated也可以直接使用在类上
@Deprecated
class Person{
public String getInfo(){
return "这是一个Person类";
}
};
class Student extends Person{
@Override
public String getInfo(){
return "这是一个studen类型";
}
}
public class Hello{
public static void main(String args[]){
Person per=new Student();
System.out.println(per.getInfo());
}
};
D:\>javac Hello.java
注意:Hello.java 使用或覆盖了已过时的 API。
注意:要了解详细信息,请使用 -Xlint:deprecation 重新编译。
SuppressWarnings的作用
SuppressWarnings用来压制警告
一个普通的泛型类在进行实例化时候没有指定泛型类型,则编译也无法通过,会有警告信息
class Demo<T>{
private T var;
public T getVar(){
return this.var;
}
public void setVar(T var){
this.var=var;
}
}
public class Hello{
public static void main(String args[]){
Demo d=new Demo();
d.setVar("kasumi");
System.out.println(d.getVar());
}
};
D:\>javac Hello.java
注意:Hello.java 使用了未经检查或不安全的操作。
注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。
根据提示的警告发现是unchecked警告,那么的使用如
class Demo<T>{
private T var;
public T getVar(){
return this.var;
}
public void setVar(T var){
this.var=var;
}
}
public class Hello{
@SuppressWarnings("unchecked")
public static void main(String args[]){
Demo d=new Demo();
d.setVar("kasumi");
System.out.println(d.getVar());
}
};
这样就压制了unchecked警告
D:\>javac Hello.java
D:\>java Hello
kasumi
如果此时为类也声明下废弃
@Deprecated
class Demo<T>{
private T var;
public T getVar(){
return this.var;
}
public void setVar(T var){
this.var=var;
}
}
public class Hello{
@SuppressWarnings("unchecked")
public static void main(String args[]){
Demo d=new Demo();
d.setVar("kasumi");
System.out.println(d.getVar());
}
};
则编译时候又会警告deprecation信息
D:\>javac Hello.java
注意:Hello.java 使用或覆盖了已过时的 API。
注意:要了解详细信息,请使用 -Xlint:deprecation 重新编译。
所以如果继续不要警告信息报出,则还需要压制deprecation信息
那么压制多个警告信息如:
@Deprecated
class Demo<T>{
private T var;
public T getVar(){
return this.var;
}
public void setVar(T var){
this.var=var;
}
}
public class Hello{
@SuppressWarnings({"unchecked","deprecation"})
public static void main(String args[]){
Demo d=new Demo();
d.setVar("kasumi");
System.out.println(d.getVar());
}
};
D:\>javac Hello.java
D:\>java Hello
kasumi
关键字词:Annotation,java