【知了堂学习笔记】JAVA反射及注解--轻松学会注解

Java注解在程序开发中广泛被使用,注解的使用更加的规范了程序,一般注解有两个用法:

1.对程序本身做解释
2.被其他程序读取

注解比较常见的有如下几种:

内置注解:

  1. @Override–>表示方法重写。
    如图该方法父类没有,不是重写,所以代码会报错!

在这里插入图片描述
2. @Deprecated–>表示该程序被废弃,表示不推荐开发者使用。
在这里插入图片描述
3.@SuppressWarnings(“all”) -->用于压制警告信息,根据传递的参数不同能压制不同类型的警告,能帮助我们免去警告提示的烦恼
以最常用的all为例,表示压制所有警告信息
在这里插入图片描述
在这里插入图片描述
其他参数还有:
deprecation —>压制使用过时方法的警告
unchecked -->用于泛型未转化的警告
fallthrough -->switch语句未使用break,穿透警告
path -->类路径,源路径 不存在的警告
serial -->可序列化少了serialversionID警告
finally -->finally不可能成功执行警告
请大家自主尝试!

自定义注解:

关键字@interface

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自定义注解
 * @author Administrator
 *
 */

@Target(value=ElementType.METHOD) //元注解,修饰注解使用位置,对什么进行修饰
//参数
//PACKAGE(包)、TYPE(方法)、CONSTRUCTOR(构造函数)、FIELD(属性)、METHOD(方法)

@Retention(RetentionPolicy.RUNTIME) //保留策略。修饰注解的有效时期
//参数
//SOURCE   -->源文件有效 
//CLASS    -->class文件中有效
//RUNTIME   -->程序运行时有效

public @interface sAnnotation {   //定义注解,关键字@interface,和定义类一致,后面跟注解名

	String stuName() default ""; 
	int stuAge() default -1; //-1表示不存在
	int stuId() default 0;
	String[] schools() default {"aaaaaa","bbbbbbbbbbbbb"};//也可以是数组
}

如上代码所示,与注解有关的包在java.lang.annotation中,自定义注解一般包括两块,元注解和参数列表。
元注解:用于对其他注解做解释
元注解一般用两个:Target、Rentention。
Target用于修饰程序使用范围,Rentention修饰注解的有效时期

自定义注解括号里面变量的叫参数,一般定义方法如下:
参数类型 参数名() [default 值];
--------方括号内容可有可无,没有default值时,使用注解时必须写上该参数------------------
注意:(1)参数名有括号 (2)default表示默认值 ,没有时自动设为默认值
(3)一般用null和-1表示值不存在的情况。(4)参数可以为数组
(5)并不一定是注解定义了几个参数,使用时就要写几个参数

注解的使用:

注解用法很多,我就由如下程序演示。
程序:把数据库的学生表以类的形式映射到java中
(1)先定义一段注解
//类名对应于表名,属性名对应于字段名

//类名的注解,表示表名
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自定义注解,解析类,转化成sql语句
 * @author Administrator
 *
 */
@Target(ElementType.TYPE) //修饰表
@Retention(RetentionPolicy.RUNTIME) //运行期用
public @interface sxtTable {
	String value() ;//读取类信息
}

//属性的注解,表明字段名
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 解析属性
 * @author Administrator
 *
 */
@Target(ElementType.FIELD) //修饰属性
@Retention(RetentionPolicy.RUNTIME) //运行期用
public @interface sxtField {
	String columnName();
	String type()  default  "varhcar";
	int length() default 0;
}

(2)在类中使用注解

/**
 * 定义注解操作的类
 * @author Administrator
 *
 */
@sxtTable("tb_student") //参数对应表的字段
public class sxtStudent {
	@sxtField(columnName="id",type="int", length = 0) //对属性做说明
	private int id;
	@sxtField(columnName="sname",type="varchar",length=10) //对属性做说明
	private String stuName;
	@sxtField(columnName="sage",type="int",length=3) //对属性做说明
	private int age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getStuName() {
		return stuName;
	}
	public void setStuName(String stuName) {
		this.stuName = stuName;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

注解使用方法如上程序已经体现,和内置注解一致。

注意:(1)注解参数只有一个是可以省略参数名,只写值 。如: @sxtTable(“tb_student”)
(2)定义注解时写了default的可以省略参数,值便为设置的默认值
(3)注解只有一个参数时,一般把参数名设置为value()
(4)单独的定义注解一般没有意义,要和反射一起才有用处

下一期,java反射机制详解,完善当前代码的解读程序,用反射和注解写出能根据创建的类自动生成SQL语句的代码。

感谢观看!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值