java开发注解,正则表达式,XML

注解

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)字符类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bo8sKW95-1594906056905)(C:\Users\MECHREVO\AppData\Roaming\Typora\typora-user-images\image-20200716211944972.png)]

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)量词

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UkZBXrR3-1594906056907)(C:\Users\MECHREVO\AppData\Roaming\Typora\typora-user-images\image-20200716212300864.png)]

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());
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值