day18 -枚举与注解以及日志技术

day18 -枚举与注解以及日志技术

一:枚举

1.1 概述

为了间接的表示一些固定的值,Java就给我们提供了枚举;

枚举是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内

1.2 枚举的定义格式
public enum Season {
    // 枚举项1,枚举项2,枚举项3;
    SPRING,SUMMER,AUTUMN,WINTER;
}
1.4 枚举的特点
  1. 所有的枚举类都是Enum类的子类
  2. 可以通过"枚举类名.枚举项名称"访问指定的枚举项
  3. 每一个枚举项其实就是该枚举的一个对象
  4. 枚举也是一个类,也可以定义成员变量
  5. 枚举类的第一行必须是枚举项,最后一个枚举项后面的分号是可以省略的;但是如果枚举类有其他的东西,这个分号就不能省
  6. 枚举类可以有构造器,但必须是private的,默认也是private的;枚举项的用法比较特殊:枚举("");
  7. 枚举类也可以有抽象方法,但是枚举项必须重写该方法
1.5 枚举的方法
方法名说明
String name()获取枚举项的名称
int ordinal()返回枚举项在枚举类的索引值
int compareTo(E o)比较两个枚举型,返回的是所有的差值
String toString()返回枚举常量的名称
static T valueOf(Class type,String name)获取指定枚举类中指定名称的枚举值
values()获取所有的枚举项

二:注解

2.1 注解的优势

注解Annotation的优缺点

优点缺点
1、保存在 class 文件中,降低维护成本。1、若要对配置项进行修改,不得不修改 Java 文件,重新编译打包应用。
2、无需工具支持,无需解析。2、配置项编码在 Java 文件中,可扩展性差。
3、编译期即可验证正确性,查错变得容易。
4、提升开发效率。

XML的优缺点

优点缺点
1、xml作为可扩展标记语言最大的优势在于开发者能够为软件量身定制适用的标记,使代码更加通俗易懂。1、需要解析工具或类库的支持。
2、利用xml配置能使软件更具扩展性。例如Spring将class间的依赖配置在xml中,最大限度地提升应用的可扩展性。2、解析xml势必会影响应用程序性能,占用系统资源。
3、具有成熟的验证机制确保程序正确性。利用Schema或DTD可以对xml的正确性进行验证,避免了非法的配置导致应用程序出错。3、配置文件过多导致管理变得困难。
4、修改配置而无需变动现有程序。4、编译期无法对其配置项的正确性进行验证,或要查错只能在运行期。
5、IDE无法验证配置项的正确性无能为力。
6、查错变得困难。往往配置的一个手误导致莫名其妙的错误
7、开发人员不得不同时维护代码和配置文件,开发效率变得低下。
8、配置项与代码间存在潜规则。改变了任何一方都有可能影响另外一方。
2.2 注解的概述

注解主要的作用就是对程序进行标注和解释

Java所提供的的注解

注解名说明
@Override描述子类重写父类的方法
@Deprecated描述方法过时
@SuppressWarnings压制警告
2.3 自定义注解

注解本质上也是一个接口,继承了Annotation接口

注解中的抽象方法在这就多了一层含义,在注解中叫属性

属性的类型:

基本数据类型,String ,Class ,注解 , 枚举 以上类型的一维数组

注意:如果属性名为value,并且只有一个那么就可以省略属性名,如果属性有多个没有赋默认值,就不能省略

案例:

public class ToolsTest {
    public static void main(String[] args) throws Exception {
        // 1. 获取tools的字节码对象
        Class<Tools> toolsClass = Tools.class;
        // 2. 通过获取到的字节码对象获取构造方法
        Constructor<Tools> constructor = toolsClass.getConstructor();
        // 3. 通过获取的构造方法创建tools镀锡
        Tools tools = constructor.newInstance();
        // 4. 通过获取的字节码对象获取所有数组
        Method[] methods = toolsClass.getDeclaredMethods();
        // 5. 遍历这个数组,得到每一个数组并调用isAnnotationPresent方法判断时候有指定注解
        for (Method method : methods) {
            if (method.isAnnotationPresent(UserTest.class)){
                // 6. 如果含有该注解。执行方法
                method.invoke(tools);
            }
        }
    }
}
2.4 元注解

概述:描述注解的注解

元注解说明@
@target指定了注解能在哪里用
@Retention可以理解为保留时间(生命周期)
@Inherited表示修饰的自定义注解可以被子类继承
@Documented表示该自定义注解,会出现在API文档里面

三:日志技术

3.1 单元测试
3.1.1 概述
JUnit特点
  1. JUnit是一个开放源代码的测试工具
  2. JUnit提供注解来识别测试方法
  3. JUnit测试可以让代码编写更快,并能提高质量
  4. JUnit优雅简洁,没有那么复杂,花费的时间较少
  5. JUnit在一个条中显示进度。如果运行良好就是绿色,如果运行失败就是红色
JUnit使用流程
  1. 将JUnit的jar包导入到工程
  2. 编写测试方法的时候该测试方法必须是公共的无参数无返回值的非静态方法
  3. 在测试方法上写上@Test注解标注该方法是一个测试方法
  4. 选中测试方法右键通过junit运行该方法
JUnit常见注解
注解含义
@Test表示测试该方法
@Before在测试的方法前运行
@After在测试的方法后运行
断言测试

方法名:Assert.assertEquals(参数1:描述信息,参数2:断言的值,参数3:实际的值)

 @Test
    public void method(){
        int size = list.size();
        Assert.assertEquals("这里我觉得可能有异常哦",1,2);
    }
3.2 日志技术
3.2.1 日志技术与输出语句的区别
输出语句日志技术
取消日志需要修改代码,灵活性较差不需要修改代码,灵活性较好
输出位置只能是控制台可以将日志信息写入到文件或数据库中
多线程和业务代码处于同一个线程中多线程记录日志信息,不影响业务代码的性能
3.2.2 日志技术体系结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N332E0lv-1621075870803)(C:\Users\myComputer\Desktop\note截图\2.日志体系结构.PNG)]

3.2.3 Log4j
Log4j作用

Log4j是Apache组织的一个开源项目;

  1. 通过Log4j,可以控制日志信息的输送的目的地是控制台,文件等位置。
  2. 可以控制每一条日志的输出格式
  3. 可以定义每一条日志的级别,我们就可以更加细致的控制日志的生成过程
  4. 可以通过配置文件灵活的进行配置,而不需要修改应用的代码
Log4j开发流程
  1. 导入log4j相关的jar包
  2. 编写log4j配置文件
  3. 在代码中获取日志对象
  4. 按照级别设置记录日志信息
  5. debug
  6. info
  7. warn
  8. error

Log4j的组成

  1. Loggers(记录器) -------------------------日志的级别

  2. DEBUG:主要用于开发过程中打印一些基本信息

  3. INFO:主要用于开发过程中打印一些重要信息

  4. WARN:警告,表示可能出现问题了,给出一些提示

  5. ERROR:错误了,但是不影响系统继续运行

  6. FATAL:非常严重的错误,会导致程序停止

Log4j中有一个规则:只输出级别不低于设定级别的日志信息

  1. Appenders(输出源)--------------------日志要输出的地方法

  2. org.apache.log4j.ConsoleAppender(控制台)

  3. org.apache.log4j.FilesAppender(文件)

  4. Layouts(布局)---------------------------日志输出的格式

  5. 可以根据自己的喜好规定日志输出的格式

  6. org.apache.log4j.PatternLayouts(可以灵活的指定布局的模式)

  7. org.apache.log4j.SimpleLayouts(包含日志信息的级别和信息字符串)

  8. org.apache.log4j.TTCCLayouts(包含日志生产的时间,线程,类别等信息)

3.3 配置文件
log4j.rootLogger=info,my,fileAppender

### direct log messages to my ###
log4j.appender.my=org.apache.log4j.ConsoleAppender
log4j.appender.my.ImmediateFlush = true
log4j.appender.my.Target=System.out
log4j.appender.my.layout=org.apache.log4j.PatternLayout
log4j.appender.my.layout.ConversionPattern=%d %t %5p %c{1}:%L - %m%n

# fileAppender演示
log4j.appender.fileAppender=org.apache.log4j.FileAppender
log4j.appender.fileAppender.ImmediateFlush = true
log4j.appender.fileAppender.Append=true
log4j.appender.fileAppender.File=D:/log4j-log.log
log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern=%d %5p %c{1}:%L - %m%n

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值