反射、注解、枚举——枚举

本文详细介绍了Java中的枚举类型及其用法,包括如何定义枚举类和枚举项,并展示了枚举的常用方法。此外,还探讨了注解的概念,包括内置注解、元注解以及自定义注解的定义和使用。同时,文章通过实例解释了注解在类和方法上的应用以及如何通过反射获取注解信息。最后,简单提及了Junit测试和日志记录的重要性。
摘要由CSDN通过智能技术生成

枚举

枚举是用来描述几个固定的值。在java中枚举是一种特殊的类,一个枚举类包含多个枚举项,而枚举项就是枚举类的对象。

//定义枚举类,表示星期,一共有7天
public enum Week {
    //下面是7个枚举项,表示七个Week对象
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;
} 
public enum  Week {
    //枚举项,其实就是枚举类的对象
    SUNDAY("星期日"),  //等价于 new Week("星期日");
    MONDAY("星期一"),
    TUESDAY("星期二"),
    WEDNESDAY("星期三"),
    THURSDAY("星期四"),
    FRIDAY("星期五"),
    SATURDAY("星期六");

    //给外部提供几个固定的对象,使用枚举来简化对象的写法。
//    public static final Week SUNDAY=new Week("星期一");
//    public static final Week MONDAY=new Week("星期二");
//    public static final Week TUESDAY=new Week("星期三");
//    public static final Week WEDNESDAY=new Week("星期四");
//    public static final Week THURSDAY=new Week("星期五");
//    public static final Week FRIDAY=new Week("星期六");
//    public static final Week SATURDAY=new Week("星期日");
    
    private String name;
    //构造方法必须私有
    private Week(String name) {
        this.name = name;
    }

    public void show(){
        System.out.println("今天是星期"+name);
    }
}

Enum的常用方法

public String name()
    获取枚举项的名称
public int ordinal() 
    获取枚举项的索引
public int compareTo(E o) 
 	比较枚举项的顺序
public String toString()
    把枚举项转换为字符串(枚举项的名称)
public E[] values()
    获取所有的枚举项
public static T valueOf(Class<T> enumType, String name) 
    获取指定名称的枚举项

注解

注解用来对代码添加一些额外的描述信息。 可以使用在类上、方法上、变量上等,对代码的本身没有影响。

内置的注解

@Override : 用来标注方法是复写父类的方法
@Deprecated: 用来标注一个方法过时了
@SuppressWarnings(value = "all"): 压制警告

元注解的

元注解是用来描述注解的注解。如描述注解的使用位置、描述注解的存活时间。

@Retention(RetentionPolicy.RUNTIME) //存活时间,是在运行时期有效.
@Target({ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})

注解的定义格式

自定义注解时,需要加上元注解进行对注解的使用位置和存活时间做一些限定。

public @interface 注解名称{
    //属性的格式:
    //属性的数据类型可以是: 基本数据类型、String、注解、枚举、各类型的数组.
    public 数据类型 属性名() default 默认值;
}
  • 按照格式定义一个注解
public @interface Anno {
    //属性名是value,使用注解的时候,可以省略属性名value。
    public String value();
}
  • 把上面定义的@Anno注解使用在类上
@Anno("xiaoming") //  等价于: @Anno(value="xiaoming") 
public class Demo2 {
    public static void main(String[] args) {
        System.out.println("hello");
    }
}

注解案例

@Retention(RetentionPolicy.RUNTIME) //存活时间,是在运行时期有效.
@Target({ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})
public @interface Anno {
    //属性
    public String classname(); //类名
    public String methodname(); //方法名
}

把@Anno注解添加在类上,用来描述要执行的类和方法。通过反射获取类上的注解提供的信息。

@Anno(classname = "com.itheima.demo2.Cat",methodname = "play")
public class Demo2 {
    public static void main(String[] args) throws Exception{
        //获取Demo2的字节码
        Class<Demo2> clazz = Demo2.class;
        //获取类上的注解
        Anno anno = clazz.getAnnotation(Anno.class); 
        //获取注解的属性值
        String classname = anno.classname(); //类名
        String methodname = anno.methodname(); //方法名

        //通过反射获取要执行的类的字节码
        Class<?> cls = Class.forName(classname);
        //创建要执行的类的对象
        Object obj = cls.getConstructor().newInstance();
        
        //获取要执行的方法
        Method m = cls.getMethod(methodname);
        m.invoke(obj); 
    }
}

注解的使用流程

在这里插入图片描述

Junit测试

Junit用来对我们在实际开发过程中写的代码进行测试。为了保证项目的代码没有问题,我们会写一点代码然后测试一些,我们把它叫做单元测试。Junit就是一个测试的工具,它可以脱离main方法执行。

Junit基本使用

在方法上加@Test注解,方法就可以独立运行。我们根据运行的结果是红色还是绿色来判断是失败或者成功。

@Befor
public void show1(){
    //运行在@Test的方法之前
}

@Test
public void show2(){
    //需要测试的代码
}

@After
public void show3(){
     //运行在@Test的方法之后
}

日志

日志用来记录程序运行过程中的数据(类似于行车记录仪),如果程序执行过程中出现了什么问题,可以根据日志信息进行查找。

日志和输出语句的区别
	共同点:都可以记录程序中运行的数据
	不同点:
		输出语句:在主线程中记录,记录的数据比较单一
		日志:在子线程中记录数据,记录的数据比较丰富,还可以对数据划分等级。
		
日志的意义:
	记录程序在运行中的各种数据,把日志写好,有助于调试程序。

日志等级

DEBUG < INFO < WARN < ERROR < FATAL

DEBUG: 用来记录一般的信息
INFO:  记录比较重要的信息
WARN:  记录可能会有问题的信息
ERROR: 可以记录一些可能会出现错误的数据
FATAL: 程序出现了严重的错误,记录错误信息

输出源

ConsoleAppender: 往控制台输出
fileAppender: 往文件中输出

输出模式

Patternlayout: 可以灵活控制输出哪些数据信息
Simplelayout: 比较简单的输出(级别、日志信息)
TTCClayout: 比较简单的输出(时间、线程、级别、日志信息)

log4j的使用步骤

1.导包:自己到资料中找3个jar文件

2.把配置文件(log4j.properties),复制到src目录下

3.创建Logger对象
	Logger logger = LoggerFactory.getLogger(Demo3.class);
4.在需要位置使用Logger的方法进行记录
    logger.error("error等级的日志");
    logger.warn("warn等级的日志");
    logger.info("info等级的日志");
 	logger.debug("debug等级的日志");
	logger.fatal("fatal等级的日志");

ger logger = LoggerFactory.getLogger(Demo3.class);
4.在需要位置使用Logger的方法进行记录
logger.error(“error等级的日志”);
logger.warn(“warn等级的日志”);
logger.info(“info等级的日志”);
logger.debug(“debug等级的日志”);
logger.fatal(“fatal等级的日志”);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值