注解
1)内置注解
@Override 检查是否为重写方法 |
---|
@Deprecated 标识过时 |
@SuppressWarnings 抑制警告 |
@FunctionalInterface 检查是否为函数式接口 |
@SuppressWarnings("all") //all代表抑制这个类中所有的警告
public class AnnotationDemo01 {
public static void main(String[] args) {
}
@Override
public String toString() {
return super.toString();
}
}
@FunctionalInterface
interface Face{
void test();
}
2)元注解(注解注解的注解)
@Target 控制直接的使用范围 -->ElementType 枚举类中 |
---|
@Retention 定义注解的声明周期(什么时期有效) -->RetentionPolicy 枚举类 SOURCE->编译器检查语法时有效 … 如果通过反射操作这个注解,必须是RUNTIME |
@Documented 表示使用该注解的元素应被javadoc或类似工具文档化显示(几乎用不上) |
@Inherited 标识这注解类型可以被继承 |
@MyAnnotation("com.xxxx.annotation01.Person") //引用自定义的注解
public class AnnotationDemo02 {
public static void main(String[] args) throws Exception {
testAnno(AnnotationDemo02.class);
}
public static Object testAnno(Class cls) throws Exception {
//判断 当前Class对象所表示的类型上面是否存在指定的注解
// boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) 如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。
if(!cls.isAnnotationPresent(MyAnnotation.class)){
throw new RuntimeException();
}
//获取注解
//<A extends Annotation> A getAnnotation(Class<A> annotationClass)
Annotation anno=cls.getAnnotation(MyAnnotation.class);
System.out.println(anno);
//拿到注解的参数值
String str = ((MyAnnotation) anno).value();
System.out.println(str);
//获取字节码
Class perCls = Class.forName(str);
//动态创建对象
Person person= (Person) perCls.newInstance();
//动态调用方法
person.sleep();
return null;
}
}
//自定义注解
@Inherited
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
//参数
public String value();
}
3)自定义注解
@interface定义注解 |
---|
可以为注解类添加参数,无参方法的形式声明,但是不是方法 |
参数的数据类型可以为 基本数据类型,String,Class,enum,annotation类型或者以上类型的数组 |
参数的修饰符只能为public,default |
属性可以设置默认值,通过default设置 |
如果只有一个参数,建议名字设置为value,使用的时候就可以直接赋值 |
正则表达式
常用工具 RegexBuddy
1)字符类
h[ea]llo –>hello hallo
h(e|a)llo ->hello hallo
[-\abc] -> - \ a b c
\d\s ->一个数字和一个空白
[\d\s] –> 数字 或 空白
由[]组中,只匹配一个, 需要注意以下四个:
^: 如果在第一个位置,表示取反的含义。
-表示一个区间即范围
] 最近一个位置为:结束 ,如果要表示普通的]请加
\ 转义
. 在字符类中 不是代表任意的字符,代表自身 . 的含义。 如果需要表示原有的含义,挪动位置 或者\
[ae134] -> a e 1 3 4
[(as)] ->a s ( )
[a-z] ->小写字母
[-]a-z[] -> -[] 及小写字母
2)量词
co*ke –> 不限个数的 O
co+ke –>至少一个 O
co?ke ->1 个或零个 O
co{0}ke ->0 个
co{5,}ke –>5 次及以上
co{5,8}ke –> 至少 5 次,最多 8 次
[1-9]\d{3} –>大于等于 1000 小于等于 9999 的数
[1-9]\d{2,4} –>大于等于 100 小于等于 99999 的数
1[34578]\d{9} : 匹配手机号
XML
1)使用DOM4J解析xml
解析前要导入DOM4J的jar包
public class XMLDemo01 {
public static void main(String[] args) throws DocumentException {
//构建SAXReader
SAXReader reader=new SAXReader();
// 2.加载xml文件,获取Domcument对象
File file = new File("src/score.xml");
Document document = reader.read(file);
// 3.获取根元素,遍历子节点,获取属性值,标签对中的内容...
Element root = document.getRootElement();
//根节点的所有子元素
List<Element> list = root.elements();
//遍历子节点
for(Element ele:list){ //获取第一层子标签
//获取节点的属性
Attribute attr = ele.attribute("id");
System.out.println(attr.getData());
List<Element> eles = ele.elements();
for(Element e:eles) { //获取第二层子标签,子标签中的子标签
System.out.println(e.getName());
System.out.println(e.getData());
}
}
}
}