注解
注解的作用:
1、生成文档。这是最常见的,也是Java 最早提供的注解。常用的有@see @param @return 等
2、跟踪代码依赖性,实现替代配置文件功能。比较常见的是spring 2.5 开始的基于注解配置。作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量。以后java的程序开发,最多的也将实现注解配置,具有很大用处;
3、在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出。
元注解
元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:
@Target | 表示该注解可以用于什么地方, 可能的ElementType参数有: CONSTRUCTOR:构造器的声明 FIELD:域声明(包括enum实例) LOCAL_VARIABLE:局部变量声明 METHOD:方法声明 PACKAGE:包声明 PARAMETER:参数声明 TYPE:类、接口(包括注解类型)或enum声明 |
---|---|
@Retention | 表示需要在什么级别保存该注解信息。可选RetentionPolicy参数包括: SOURCE:注解将被编译器丢弃 CLASS:注解在class文件中可用,但会被VM丢弃 RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息。 |
@Document | 将注解包含在Javadoc中 |
@Inherited | 允许子类继承父类中的注解 |
定义一个注解:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
public String id();
public String name() default “myname”;
}
在注解中一般会有一些元素以表示某些值。注解的元素看起来就像接口的方法,唯一的区别在于可以为其制定默认值。没有元素的注解称为标记注解。
注解的可用的类型包括以下几种:所有基本类型、String、Class、enum、Annotation、以上类型的数组形式。元素不能有不确定的值,即要么有默认值,要么在使用注解的时候提供元素的值。而且元素不能使用null作为默认值。注解在只有一个元素且该元素的名称是value的情况下,在使用注解的时候可以省略“value=”,直接写需要的值即可。
使用注解
注解处理器
注解处理器就是通过反射机制获取被检查方法上的注解信息,然后根据注解元素的值进行特定的处理。
正则表达式
正则表达式(regular expression)
就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如 表达式“ab+” 描述的特征是“一个 ‘a’ 和 任意个 ‘b’ ”,那么 ‘ab’, ‘abb’, ‘abbbbbbbbbb’ 都符合这个特征。
正则表达式可以用来:
(1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。(2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。
(3)用来替换,比普通的替换更强大。
正则表达式规则:
1、普通字符
字母、数字、汉字、下划线、以及后边没有特殊定义的标点符号,都是”普通字符”。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。
2、简单的转义字符
一些不便书写的字符,采用在前面加 “\” 的方法。
表达式 | 可匹配 |
---|---|
\r, \n | 代表回车和换行符 |
\t | 制表符 |
\\ | 代表 “\” 本身 |
\^ | 匹配 ^ 符号本身 |
$ | 匹配 $ 符号本身 |
\. | 匹配小数点(.)本身 |
表达式 | 可匹配 |
---|---|
\d | 任意一个数字,0~9 中的任意一个 |
\w | 任意一个字母或数字或下划线,也就是 A~Z,a~z,0~9,_ 中任意一个 |
\s | 包括空格、制表符、换页符等空白字符的其中任意一个 |
. | 小数点可以匹配除了换行符(\n)以外的任意一个字符 |
4、自定义能够匹配 ‘多种字符’ 的表达式
使用方括号 [ ] 包含一系列字符,能够匹配其中任意一个字符。用 [^ ] 包含一系列字符,则能够匹配其中字符之外的任意一个字符。同样的道理,虽然可以匹配其中任意一个,但是只能是一个,不是多个。
表达式 | 可匹配 |
---|---|
[ab5@] | 匹配 “a” 或 “b” 或 “5” 或 “@” |
[^abc] | 匹配 “a”,”b”,”c” 之外的任意一个字符 |
[f-k] | 匹配 “f”~”k” 之间的任意一个字母 |
[^A-F0-3] | 匹配 “A”~”F”,”0”~”3” 之外的任意一个字符 |
5、修饰匹配次数的特殊符号
前面讲到的表达式,无论是只能匹配一种字符的表达式,还是可以匹配多种字符其中任意一个的表达式,都只能匹配一次。如果使用表达式再加上修饰匹配次数的特殊符号,那么不用重复书写表达式就可以重复匹配。
使用方法是:”次数修饰”放在”被修饰的表达式”后边。比如:”[bcd][bcd]” 可以写成 “[bcd]{2}”。
表达式 | 作用 |
---|---|
{n} | 表达式重复n次,比如:”\w{2}” 相当于 “\w\w”;”a{5}” 相当于 “aaaaa” |
{m,n} | 表达式至少重复m次,最多重复n次,比如:”ba{1,3}”可以匹配 “ba”或”baa”或”baaa” |
{m,} | 表达式至少重复m次,比如:”\w\d{2,}”可以匹配 “a12”,”_456”,”M12344”… |
? | 匹配表达式0次或者1次,相当于 {0,1},比如:”a[cd]?”可以匹配 “a”,”ac”,”ad” |
+ | 表达式至少出现1次,相当于 {1,},比如:”a+b”可以匹配 “ab”,”aab”,”aaab”… |
* | 表达式不出现或出现任意次,相当于 {0,},比如:”\^*b”可以匹配 “b”,”^^^b”… |
6、其他一些代表抽象意义的特殊符号
一些符号在表达式中代表抽象的特殊意义:
表达式 | 作用 |
---|---|
^ | 与字符串开始的地方匹配,不匹配任何字符 |
$ | 与字符串结束的地方匹配,不匹配任何字符 |
\b | 匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符 |
说明:”\b” 与 “^” 和 “$” 类似,本身不匹配任何字符,但是它要求它在匹配结果中所处位置的左右两边,其中一边是 “\w” 范围,另一边是 非”\w” 的范围。
一些符号可以影响表达式内部的子表达式之间的关系:
表达式 作用2
| | 左右两边表达式之间 “或” 关系,匹配左边或者右边 |
---|---|
( ) | (1). 在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰(2). 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到 |
捕获组
捕获组是把多个字符当一个单独单元进行处理的方法,它通过对括号内的字符分组来创建。
捕获组是通过从左至右计算其开括号来编号。例如,在表达式
((A)(B(C))),有四个这样的组:
((A)(B(C)))
(A)
(B(C))
(C)