Java的五个基本注解

Java的五个基本注解

  1. @Override
  2. @Deprecated
  3. @SuppressWarnings
  4. @SafeVarargs
  5. @FunctionalInterface

五个基本注解的用法:

1. @Override 的作用
告诉编译者应该检查该方法,保证该类的父类中含有一个被该方法重写的方法,否则将编译错误。

@Override 的用法

class A
{
	public void info()
	{
		System.out.print("A的info()方法");
	}
}
class B extends A
{
	@Override	//用该注解指定下面方法应重写父类方法
	public void info()
	{
		System.out.print("B的info()方法");
	}
}
public class B0202
{
	public static void main(String[] args)
	{
		new B().info();
	}
}

此时编译后可见结果是正常的,但如果在B类重写A类info()方法时格式错误,例如把info写成inFo,则会引发如下错误:

在这里插入图片描述
2.@Deprecated的作用:
用于表示某个程序元素已经过时了,若被调用,则编译器会发出警告

@Deprecated的用法
java9之前,@Deprecated无属性,可直接使用
java9开始,可为@Deprecated添加两个属性forRemovalsince
String since:指定该API从哪个版本被标记为过时
boolean forRemoval :指定该API是否会在之后被删除,true为会被删除

class A
{	//若不指定俩属性,则直接写@Deprecated即可
	@Deprecated(since="9",forRemoval=true)
	public void info()
	{
		System.out.print("A的info()方法");
	}
}
public class B0202
{
	public static void main(String[] args)
	{
		new A().info();
	}
}

由于该程序调用了已过时的方法,所以编译器会发出下图所示的警告:
在这里插入图片描述
3.@SuppressWarnings 的作用:
用来关闭某程序元素中所有编译器警告

@SuppressWarnings 的用法:
必须使用value=name的形式为该注解的成员变量赋值,指定关闭警告的类型

import java.util.*;

//关闭下面类中的编译器警告
@SuppressWarnings(value="unchecked")
public class B0202
{
	public static void main(String[] args)
	{
		//下面在定义集合中使用泛型时未补充菱形语法
		//原本会发出警告
		List<String> a=new ArrayList();
	}
}

结果正常:
在这里插入图片描述

4.@SafeVarargs 的用法:
专门用于修饰引发unchecked警告的构造器或方法,下面程序中 ErrorTest 类的 info 方法传入形参个数可变的数组,但java不支持泛型数组,只能把List< String >当成List[]处理,就发生了“堆污染”,自java7开始,这行代码定义即会被编译器警告,如若不想看到这个警告,除了用上一个注解@SuppressWarnings(value=“unchecked”)外,还可以用注解 @SafeVarargs

@SuppressWarnings(value=“unchecked”)@SafeVarargs的区别
(1)@SafeVarargs只能用于修饰方法或者构造器,而@SuppressWarnings除了修饰方法外,还可以修饰类;
(2)@SafeVarargs 专门用于修饰引发unchecked警告的构造器或方法,而@SuppressWarnings调整参数后还可以用于关闭各种各样的警告。

import java.util.*;

class ErrorTest
{	//修饰info方法,关闭unchecked警告
	@SafeVarargs
	public static void info(List<String>... list)
	{

		List[] a=list;
		List<Integer> myList=new ArrayList<>();
		myList.add(new Random().nextInt(100));
		a[0]=myList;
		Object s=a[0].get(0);
	}
}

public class B0202
{
	public static void main(String[] args)
	{
		ErrorTest.info(Arrays.asList("ok"),
			Arrays.asList("no"));
	}
}

5.@FunctionalInterface 的作用:
用于指定某接口必定是函数式接口(抽象方法只有一个的接口),若超过一个抽象方法,则会引发错误

@FunctionalInterface
interface MyInterface
{
	//可以有静态方法和默认方法
	static void k1(){}
	default void k2(){}

	//只能有一个抽象方法
	void test1();
	//超过一个,则出差
	void test2();
}
public class A0203
{
	public static void main(String[] args)
	{
	}
}

上面程序定义了两个抽象方法,引发了如下错误:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值