Java注解在程序开发中广泛被使用,注解的使用更加的规范了程序,一般注解有两个用法:
1.对程序本身做解释
2.被其他程序读取
注解比较常见的有如下几种:
内置注解:
- @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语句的代码。