JAVA基础之注解、正则表达式


前言

今天学习了注解以及利用注解和反射去写一个工程。以及正则表达式的了解


一、注解

1、什么是注解

注解 : JDK1.5新特性 —> 标注

作用 :
1.注释
2.强制检查语法
3.可以在使用注解的同时配置一些数据,在程序运行期间可以通过反射操作注解,获取配置的数据进行使用
4.注解可以存在于Class文件中
5.大量的代替了配置文件的存在

语法 :@注解类型(数据)

位置 :默认可以使用在任意位置,可以通过元注解Target规定注解类型的使用位置

注解的分类:

  1. JDK内置注解:1、常见的内置注解 2、元注解:注解注解的注解
  2. 自定义注解

示例代码如下:

@SuppressWarnings("all")//消除代码中所有的警告
public class Class_01_Annotation {
    public static void main(String[] args) {
        String str = "jj";

    }

    public static void smlie() {
    }

    @Override//重写的注解
    public String toString() {
        return super.toString();
    }
}

2、自定义注解

示例代码如下:

public class Class_02_Annotation {
    public static void main(String[] args) {
        @Number
        String anime1 = "名侦探柯南";
        @Number
        String anime2 = "迪迦奥特曼";
        @Number
        String anime3 = "妖精的尾巴";
        @Number
        String anime4 = "刀剑神域";
    }
}
@Target(ElementType.LOCAL_VARIABLE)//表示注解的作用范围
@Retention(RetentionPolicy.RUNTIME)//表示自定义的注解生命周期
@interface Number{
    int value() default 10;//default是默认10 注解若需要10就可以不用定义参数的值
}

3、注解和反射

示例代码如下:

/*
    模拟水果店每天的上货清单 :  了解
        每天生成的清单中所有的水果都必须存在具体的数量  !null值   0->今天不上货   >0 按照要求上具体的数量的水果
        1)构建生成今天的上货清单
        2)通过注解解析器->功能 : 对清单中的水果上货数量进行完善
            需要获取所有的上货水果,然后进行遍历
            判断当前属性值!=null,
                如果!=null,代表之前手动位当前水果的上货数量赋过值,以这个数量为主
                如果==null,
                    先判断当前属性上是否存在@Num这个注解,如果不存在代表没有默认的上货数量,不上货,就需要为当前属性的值赋值为0
                                                      如果存在,需要获取这个@Num注解中value字段的值,为当前属性进行赋值
          最终返回所有水果都存在上货数量的进入上货清单
 */
public class Class_FruitList {
    public static void main(String[] args) throws IllegalAccessException {
        FruitList fruitList = new FruitList();
        fruitList.apple = 100;
        System.out.println(fruitList);
        //完善清单
        fruitList = test(fruitList);
        System.out.println(fruitList);
    }

    //注解解析器 : 完善水果清单
    public static FruitList test(FruitList list) throws IllegalAccessException {
        //获取反射的源头,FruitList类型的Class对象
        Class<FruitList> cls = FruitList.class;
        //需要获取FruitList所有的属性,然后进行遍历
        Field[] fields = cls.getDeclaredFields();
        for(Field field:fields){
            //判断当前属性值!=null,
            if (field.get(list)==null){
                // 先判断当前属性上是否存在@Num这个注解
                if(field.isAnnotationPresent(Num.class)){
                    //如果存在,需要获取这个@Num注解
                    Num anno = field.getAnnotation(Num.class);
                    //从上一步获取到的注解实例中拿到锁配置的value属性值
                    int num = anno.value();
                    //使用所配置的value字段值,为当前属性赋值
                    field.set(list,num);

                }else{
                    //如果不存在代表没有默认的上货数量,不上货,就需要为当前属性的值赋值为0
                    field.set(list,0);
                }
            }
        }
        return list;
    }
}

class FruitList{
    @Num(20)
    Integer apple;
    @Num
    Integer banana;
    @Num
    Integer pear;
    Integer watermelon;

    public FruitList() {
    }

    public FruitList(Integer apple, Integer banana, Integer pear, Integer watermelon) {
        this.apple = apple;
        this.banana = banana;
        this.pear = pear;
        this.watermelon = watermelon;
    }

    public Integer getApple() {
        return apple;
    }

    public void setApple(Integer apple) {
        this.apple = apple;
    }

    public Integer getBanana() {
        return banana;
    }

    public void setBanana(Integer banana) {
        this.banana = banana;
    }

    public Integer getPear() {
        return pear;
    }

    public void setPear(Integer pear) {
        this.pear = pear;
    }

    public Integer getWatermelon() {
        return watermelon;
    }

    public void setWatermelon(Integer watermelon) {
        this.watermelon = watermelon;
    }

    @Override
    public String toString() {
        return "FruitList{" +
                "apple=" + apple +
                ", banana=" + banana +
                ", pear=" + pear +
                ", watermelon=" + watermelon +
                '}';
    }
}

//水果上货数量
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@interface Num{
    int value() default 10;
}

二、正则表达式

可以理解为新的一种语言字符。

作用:正则表达式是用来描述具有一定特征的字符串的特殊字符串

ab*: a 若干个 b ->* 零个及以上 , 匹配: a ab abbbbb abbbbbbb 不能 bbbbb。
(cd): ()->组,改变了优先级 ,若干个 cd, 匹配: “” cd cdcd cdcdcd
ab
(cd): a 若干个 b 和若干个 cd 匹配: a ab abbbbb abbbbbbb acd acdcd abbbbbcd abcd
ab
|(cd)*: |或的优先级低 匹配: a ab cd ab|c : 匹配 ab c


总结

注解和正则总结的比较浅显。只需要了解 即可。明天加油!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值