how2j.cn

步骤 1 : @Override   
步骤 2 : @Deprecated   
步骤 3 : @SuppressWarnings   
步骤 4 : @SafeVarargs   
步骤 5 : @FunctionalInterface   
步骤 6 : 总结   

@Override 用在方法上,表示这个方法重写了父类的方法,如toString()。
如果父类没有这个方法,那么就无法编译通过,如例所示,在fromString()方法上加上@Override 注解,就会失败,因为Hero类的父类Object,并没有fromString方法
package annotation; public class Hero { String name; @Override public String toString(){ return name; } @Override public String fromString(){ return name; } }
package annotation;

public class Hero {

	String name;
	@Override
	public String toString(){
		return name;
	}
	@Override
	public String fromString(){
		return name;
	}
}
@Deprecated 表示这个方法已经过期,不建议开发者使用。(暗示在将来某个不确定的版本,就有可能会取消掉)

如例所示,开地图这个方法hackMap,被注解为过期,在调用的时候,就会受到提示
package annotation; public class Hero { String name; @Deprecated public void hackMap(){ } public static void main(String[] args) { new Hero().hackMap(); } }
package annotation;

public class Hero {

	String name;
	
	@Deprecated
	public void hackMap(){
		
	}
	public static void main(String[] args) {
		new Hero().hackMap();
	}

}
步骤 3 :

@SuppressWarnings

edit
@SuppressWarnings Suppress英文的意思是抑制的意思,这个注解的用处是忽略警告信息。
比如大家使用集合的时候,有时候为了偷懒,会不写泛型,像这样:

List heros = new ArrayList();

那么就会导致编译器出现警告,而加上

@SuppressWarnings({ "rawtypes", "unused" })

就对这些警告进行了抑制,即忽略掉这些警告信息。
@SuppressWarnings 有常见的值,分别对应如下意思
1.deprecation:使用了不赞成使用的类或方法时的警告(使用@Deprecated使得编译器产生的警告);
2.unchecked:执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型; 关闭编译器警告
3.fallthrough:当 Switch 程序块直接通往下一种情况而没有 Break 时的警告;
4.path:在类路径、源文件路径等中有不存在的路径时的警告;
5.serial:当在可序列化的类上缺少 serialVersionUID 定义时的警告;
6.finally:任何 finally 子句不能正常完成时的警告;
7.rawtypes 泛型类型未指明
8.unused 引用定义了,但是没有被使用
9.all:关于以上所有情况的警告。
package annotation; import java.util.ArrayList; import java.util.List; public class Hero { String name; @SuppressWarnings({ "rawtypes", "unused" }) public static void main(String[] args) { List heros = new ArrayList(); } }
package annotation;

import java.util.ArrayList;
import java.util.List;

public class Hero {
	String name;
	@SuppressWarnings({ "rawtypes", "unused" })
	public static void main(String[] args) {
		List heros = new ArrayList();
	}

}
@SafeVarargs 这是1.7 之后新加入的基本注解. 如例所示,当使用可变数量的参数的时候,而参数的类型又是泛型T的话,就会出现警告。 这个时候,就使用@SafeVarargs来去掉这个警告

@SafeVarargs注解只能用在参数长度可变的方法或构造方法上,且方法必须声明为static或final,否则会出现编译错误。一个方法使用@SafeVarargs注解的前提是,开发人员必须确保这个方法的实现中对泛型类型参数的处理不会引发类型安全问题。

以上解释很复杂,我也没搞明白,请忽略,往下学习。。。
package annotation; public class Hero { String name; @SafeVarargs public static <T> T getFirstOne(T... elements) { return elements.length > 0 ? elements[0] : null; } }
package annotation;

public class Hero {
	String name;

	@SafeVarargs
	public static <T> T getFirstOne(T... elements) {
		return elements.length > 0 ? elements[0] : null;
	}
}
步骤 5 :

@FunctionalInterface

edit
@FunctionalInterface这是Java1.8 新增的注解,用于约定函数式接口。
函数式接口概念: 如果接口中只有一个抽象方法(可以包含多个默认方法或多个static方法),该接口称为函数式接口。函数式接口其存在的意义,主要是配合Lambda 表达式 来使用。

如例所示,AD接口只有一个adAttack方法,那么就可以被注解为@FunctionalInterface,而AP接口有两个方法apAttack()和apAttack2(),那么就不能被注解为函数式接口
package annotation; @FunctionalInterface public interface AD { public void adAttack(); }
package annotation;

@FunctionalInterface
public interface AD {
	public void adAttack();
}
package annotation; @FunctionalInterface public interface AP { public void apAttack(); public void apAttack2(); }
package annotation;

@FunctionalInterface
public interface AP {
	public void apAttack();
	public void apAttack2();
}
以上5个都是内置注解,从开发过程中的体验来讲,有也可以,没有也可以,没什么大的卵用~ 大家晓得有这么回事就行了,重点还是后面要讲解的自定义注解


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2019-07-11 ....
挺爷不解释

我觉得“没多大乱用”这句话应该摆在最前面~那我们就可以立刻跳过了.......




2 个答案

derek0x
答案时间:2022-08-25
6666,此话言之有理。。

920198465
答案时间:2019-07-17
真实,哈哈



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2019-01-24 用词问题
shisui

都学了好久了,初中高级的内容都学完了。 虽说已经习惯站长大人的用词措词,不过还是看不过去。学习还是不能当儿戏的,希望大人收敛些!!




5 个答案

wangrenpiao
答案时间:2022-06-23
话太多

7905123
答案时间:2019-06-27
我觉得还挺好,喜欢打游戏的人,大多就是站长的这个风格了。

rockmanzzx
答案时间:2019-06-24
白嫖还那么多事?

genglong
答案时间:2019-03-26
有些人喜欢站长的风格,有些人不喜欢,但是站长对知识点都解释到了,所以你不能强求站长改变教学风格吧. 就像学生时代可能会因为喜欢某个老师或讨厌某个老师而偏科(但是学习其实是不应该因为老师而偏科的,虽然很难做到)

娶一个昵称
答案时间:2019-03-01
因为站长大人穿品如的衣服啊。-_-



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2018-11-23 感谢傻瓜式解读
2017-09-19 请问一下什么是默认方法啊?
2017-08-18 站长这里卖萌了!


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 3 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 高级-注解-基本内置注解 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图