JAVA注解基础

  1. java注解是十分重要的基础内容,现在出现并且市面上主流的框架已经离不开注解的使用,包括Servlet从java8开始便可以通过注解来注册,而不需要再在web.xml文件中声明
  2. 什么是注解呢?官方的可以移步百度,我这里仅讲解我的认知。
    (1)注解可以理解为一种声明,这种声明的标识可以替代Spring里面的bean 可以替代web.xml 里面的组件,让系统进行识别。
    (2)注解这套机制也相当于贴标签,但是这只标签只给我们程序员或者代码观看,不提供给他人展览。
    (3)当贴好了标签之后,我们选择性在生成的Document文档的时候供程序员浏览、也可以根据标签标识设置我们所需要的内容。例如希望在一个javabean中设置一个主属性,便可以通过标签(注解)标识出来(jdbc框架中可以使用到)。
    (4)其实系统中也有许多注解比如常用的 @Override,这个便是系统告诉你说下面这个方法是从父类/接口 继承过来的方法,所以说注解我们离不开、也无处不在
  3. 我在本文中主要讲解的是元注解的应用,然后会在下一篇博客书写如何结合java反射的内容来实现一个简单的功能模块的开发,如果需要学习java反射可以移步(https://blog.csdn.net/weixin_44929998/article/details/100146865)进行学习

1 系统中的注解

1.1 系统中的三大注解

1.1.1 @Override注解

说明:

@Override注解主要用于继承或重写方法,例如在javaBean中我们会重写ToString方法,在继承了某个接口我们会进行实现

演示代码:

/**
 * TestDemo接口
 **/
public interface TestDemo {
	public void show();
}
/**
 * TestDemo02 java类
 **/
public class TestDemo02 {

	public void isFather() {
		System.out.println("I am father");
	}
}

/**
 * TestMain测试类,继承TestDemo02类,实现TestDemo接口
 **/
public class TestMain extends TestDemo02 implements TestDemo{

	@Override
	public void show() {
		// TODO Auto-generated method stub
		
	}
	
	//此处@Override不加不会报错但是方法就是新的方法不是继承父类的方法,加之后会检查方法名等
	@Override
	public void isFather() {
		
	}
	

}
1.1.2 @Deprecated 注解

说明:

@Deprecated 主要是描述过时的方法等,比如我们使用Date类的方法时,会看到许多画了斜杠横线的方法,这些方法就是使用了@Deprecated注解,通常我们会重写此类方法

演示代码:

/**
 * 此处放到csdn博客凸显不来效果,我会把效果图发出来在下文
 */
public class TestMain {

	public static void main(String[] args) {
		
		Date date = new Date();
		date.getHours();      //废弃的方法
		
		TestMain testMain = new TestMain();
		testMain.show();     //自己使用注解废弃的方法
		
		testMain.show("");
	}
	
	@Deprecated
	public void show() {
		System.out.println("显示什么呢?");
	}
	
	public void show(String str) {
		System.out.println(str);
	}
	
	public void show(char c) {
		System.out.println(c);
	}

}

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

1.1.3 @SuppressWarnings 注解

说明:

@SuppressWarnings 本意是“压缩警告”,也就是说我们不想一些警告信息出现,那么此时就可以用到此注解进行告知编译器

演示代码:

public class TestMain {


	@SuppressWarnings("all")
	public void show01() {
		
		String str;
	}
	
	public void show02() {
		String str;
	}


}

效果图:
在这里插入图片描述


2 ‘注解类’以及‘元注解’

2.1 注解类

  1. 注解类通过new一个Annotation便可以得到一个注解类
  2. 注解类其实就是一个接口,并且这个接口自动继承了Annotation这个接口
  3. 注解类中支持的属性类型
    (1) 基本数据类型(byte, short,int, long,char, boolean, float, double等);
    (2)String;
    (3)Class类;
    (4)枚举(enum);
    (5)其他的注解;
    (6)以上类型的数组;
  4. 注解类的属性并非常见的class类的属性,而是将‘无参数的成员方法’称之为属性,不理解可以直接看下列示例代码

示例代码:

//1. 枚举类创建
	public enum Type {
		boy,
		girl,
		old_boy,
		younger_girl
	}
	
//2. 注解类创建
public @interface Test {

	int 		a();
	char 		b();
	String 		c();
	Class 		e();
	Type 		f();
	String[] 	d();

}
//3. java类创建,并使用Test注解类标识,此时切记要将全部定义的元素写上去。因为d是数组,注意格式

	@Test(a = 12,b='B',c = "C",d= {"d1","d2"}, e = Person.class,f = Type.girl)
	public class Person {

	}

2.2 元注解

1.我们知道java程序运行分为三步,第一为源代码阶段(Resource),第二位字节码阶段(.class文件),第三个为运行阶段(RunTime)。而java代码又有其类、属性、方法等部分。
2.注解既然是为代码的不同成分加标签,但是为了区分各个注解的作用域(类、方法、属性)、作用时间(1.所说内容)、以及其他特性,我们在注解上面添加一层注解,这个就是所谓的元注解

2.2.1 @target 元注解
  1. target元注解标主要用来标识此注解的作用域(类、接口、类中的属性、方法等)
  2. target元注解中各项的含义
    (1)ElementType.TYPE //表示作用域为 类、 接口、 注解等上
    (2)ElementType.FEILD //表示作用域为 类中的属性
    (3)ElementType.METHOD //表示作用域为类中的成员方法
    (4)ElementType.CONSTRUCTOR //表示作用域为类中的构造方法
    (5)ElementType.PARAMETER //表示作用域为方法的参数
    (6)ElementType.LOCAL_VARIABLE //表示作用域为本地局部变量上面
    (7)ElementType.ANNOTATION_TYPE //表示作用域在注解类型上面
    (8)ElementType.PACKAGE //表示作用域在包名上面
    (9)ElementType.TYPE_PARAMETER,ElementType.TYPE_USE //1.8新特性,网上众说纷纭,我这里还不是很懂,不做解释了
  3. target元注解可以规定作用在多个域上面,但是个人建议一个注解只有一个作用域;最常用的是前三个

示例代码:

/**
 * 当注解希望被注释在类上面,而且仅仅在此位置可以按照如下书写--个人推荐如此
 **/
@Target(ElementType.TYPE)
public @interface Test {
	
	int 		a ();
	char 		b ();
	String 		c();
	Class 		e();
	Type 		f();
	String[] 	d();
	
}
/**
 * 当注解需要有多个作用域的时候,可以按照如下书写,个人不是很推荐
 **/
 @Target({ElementType.FIELD,ElementType.CONSTRUCTOR,ElementType.TYPE,ElementType.METHOD})
public @interface Test {
	
	int 		a ();
	char 		b ();
	String 		c();
	Class 		e();
	Type 		f();
	String[] 	d();
	
}
2.2.2 @Retention 元注解
  1. @Retention注解主要标识自定义注解的作用时间
  2. java代码过程应该有三个时态,源代码(.java)-source时态,编译后字节码(.class)-Class时态,加载到jvm内存-Runtime运行时态那么也就对应Retention作用的范围不一样
    (1)RetentionPolicy.SOURCE //源代码阶段
    (2)RetentionPolicy.CLASS //字节码阶段
    (3)RetentionPolicy.RUNTIME //运行阶段
  3. 我们最为常用的是注解第三个运行阶段,但是切记只能表示一个状态

示例代码:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
	
	int 		a ();
	char 		b ();
	String 		c();
	Class 		e();
	Type 		f();
	String[] 	d();
	
}
2.2.3 @Inherited 元注解
  1. @Inherited的意思是当一个类被此元注解修饰后的注解注解了,那么这个类的子类也会拥有此注解;

示例代码:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited    //注意观察这
public @interface Test {
	
	int 		a ();
	char 		b ();
	String 		c();
	Class 		e();
	Type 		f();
	String[] 	d();
	
}

@Test(a = 12,b='B',c = "C",d= {"d1","d2"},f = Type.girl, e = Person.class)
public class Person {

}
/**
 * 此时son类已经拥有了Test注解,当然也可以再次注解进行覆盖
 **/
public class son extend Person{
}
2.2.4 @Documented 元注解
  1. @Documented注解是最为简单的注解,此注解含义是在生成 javadoc文档的时候将注解包含进去,当然不写便不会包含进去

示例代码:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented   //注意观察这
public @interface Test {
	
	int 		a ();
	char 		b ();
	String 		c();
	Class 		e();
	Type 		f();
	String[] 	d();
	
}

3. 小结

  1. 注解其实就是进行贴标签作用,而元注解就是给注解进行行为限制
  2. 注解在生成文档方面有一定作用
  3. 注解集合java反射知识点可以做出很美妙的东西,许多框架都离不开此两者的结合使用,如果你还不了解java反射,请移步: https://blog.csdn.net/weixin_44929998/article/details/100146865 进行查看,或者点击 java反射
  4. 本文仅作为注解的基础了解,如何结合java注解请关注本人下一篇文章(我在写这个博客的时候还没出来)
  5. 本人其实是个弱鸡,如果有什么不对或者什么好的建议,希望大家给我斧正斧正,提前谢谢各位。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值