JavaEE学习笔记2——Maven

JavaEE学习笔记2

对应代码地址


Note for JavaEE-Day2

Stream & IO

文件输入/输出

  1. 字节输入输出流超类。还是基于面向对象的思想,输出流为OutputStream类,定义形如OutputStream os = new FileOutputStream("test.txt")。同理,输入流定义形如InputStream is = new FileInputStream("test.txt")。相关操作如下:
    • os.write()输出数据
    • os.flush()将buffer中的数据全部写入至文件。因写入操作是异步的。
    • is.available()返回整型数据表示文件大小。
    • is.read()从文件读入数据。默认按字符(char)
  2. 字符输入输出。对应输入输出类分别为FileReaderFileWriter,定义中的参数为相应文件的对象。输出中该对象可以由File file = new File("Hello.txt")生成。
  3. 加载资源文件。。
    使用形式如:InputStream input = PropertiesLoader(即加载资源类的类名).class.getResourceAsStream("/default.properties")Properties props = new Properties()以及props.load(input)。这三者正如这里展示的那样需要一起使用,分别获取输入流、资源类以及将输入加载到资源中。
  4. 文件读写。文件读形如整文件读string s = Files.readString(Path.of("路径"))、按行读取List<String> s = File.readAllLines(Path.of("路径")),文件写形如File.write(Path.of("路径"),二进制文件/按行文本)File.writeString(Path.of("路径"),"文本内容",编码模式)

小结:
总体上这部分就是一些方法的调用知识,后面可能会根据使用情况补充。

泛型

  1. 基本。前面提到的List就是典型的泛型,即类在声明中对属性不确定其类型,在定义时再指出,这样在方便复用之余也提高了类型安全性。

  2. 类型参数。修饰泛型的类型参数的相关语句应放置于类型参数之前,形如public static <T extends Comparable<T> > T maximum(){}

反射

我的理解就是通过接口获得类的信息如字段等,再利用这些信息对应的类完成各项操作。其功能范围很广,小到获得字段,大到创建对象、修改属性权限都可以实现。

  1. 获得反射对象的三种方法:
    • Class.forName(“类路径”);
    • (类名).class
    • (实例化的类对象).getClass()
  2. 反射使用示例。
    • 获取字段。getFields()获取public字段,getDeclaredFields()获取private和public字段。
    • 修改权限。setAccessible(true/false)允许私有属性读写。注意此处需先获取字段以使用字段调用。
    • 获取方法。getMethods()获取public方法,getDeclaredMethods()获取private和public方法。
    • 反射实例化。实例化newInstance(),也可以先反射获取构造方法,再以此实例化,也使用newInstance()。使用方法形如(方法对象).invoke(类对象,"方法名")

注解

  1. 基础介绍。注解是一种特殊的注释,可以编译为字节码并在程序运行时起作用。
  2. 作用机制。对于内置注解,编译器读取注解并根据注解进行相关操作,如检查覆写等。
  3. 自定义注解。声明形如public @interface xxx{}。下面是几个对自定义注解的注解:
    • @Documented 表面这个注解应该被javadoc工具记录,默认情况下javadoc不记录注解。
    • @Retention(保留参数) 用于指定注解被保留的阶段,有如下三个参数值:
      • RetentionPolicy.SOURCE: 源码级别保留,编译时忽略
      • RetentionPolicy.CLASS: 编译时保留,在class文件中保存,JVM忽略
      • RetentionPolicy.RUNTIME: 由JVM加载到内容,通过反射机制读取和使用
    • @Target({元素类型集合(如方法、字段)}) 用于指定被标注的参数类型。如果没有明确指明,可以在任意位置使用。
    • @Inherited 被标注的自定义注解若标注一个父类,其注解的属性可以由子类继承。
  4. 反射获取注解。使用方法是先通过反射获取字段,如(类名).class.getDeclaredFields(),而后通过循环字段和field.isAnnotationPresent((注解名).class)判断当前字段是否与目的注解对应,最后通过field.getAnnotation((注解名).class)方法获取注解。

maven

maven安装与配置

Idea有内置maven,但我还是去官网下载后重新配置了一下,之后添加环境变量和在setting文件里加一下镜像即可。而后在idea中使用maven时需要在项目setting的maven选项中更改maven路径和setting文件指向本地配置的位置。

maven项目结构

  1. src/main/java:源代码
  2. src/main/resources: 资源文件
  3. src/test/java: 源代码
  4. target: 构造结果,即类和jar包
  5. pom.xml: 项目描述文件。其内部信息如下:
    • modelVersion: 版本号,设置为4.0.0
    • groupId: 项目组id,如edu.whu
    • artifactId: 项目id,如mavenDemo
    • version: 项目组下项目版本id
    • properties: 项目类型变量,如UTF-8编码
    • dependency: 导入依赖jar包,其中scope标签有下面4种取值:
      • compile(默认): 编译时使用
      • test: 编译Test时使用
      • runtime: 编译时不用运行时用
      • provided: 编译时使用,运行时由JDK或某个服务提供

maven运行流程

依赖管理通过解析pom.xml得到项目信息、依赖及插件等,送至仓库导出插件和依赖以分别执行Compile、Test以及Install的生命周期。

Unit Testing-单元测试

JUnit基本介绍

JUnit是对java应用的一项开源单元测试框架。其好处有如下几点

  • 测试代码与功能代码分开
  • 可以一次性运行多组测试样例
  • 可以生成测试报告
  • 与几乎所有的java开发的ide、工具和框架兼容。

这里也顺便指出测试的四个流程步骤:

  1. 单元测试-开发者
  2. 整合测试-开发者与测试人员
  3. 系统测试-测试人员
  4. 用户接受测试-终端用户/顾客

JUnit使用

  1. 使用前需先在pom.xml中引入junit依赖。
  2. @Test注解指示方法为测试方法,这些方法会像main方法一样运行。
  3. 通过断言语句来进行测试。断言语句例如:assertTrue()asserFalse()assertNoyNull()以及assertArrayEquals()
  4. @BeforEach@AfterEach注解。注解的方法将分别在test方法之前和之后自动执行。
  5. 测试异常。通过assertThrows(IllegalmentException.class,new Exception(){})assertThrows(IllegalmentException.class,()->{})进行测试,即异常方法或lambda表达式。

单元测试优点

  1. 通过确保每个系统组件以达到一个有质量的产品。
  2. 简化调试过程。
  3. 允许代码重构和设计优化。(因为测试与主代码块分离)。
  4. 在生命周期的早期修正bug。
  5. 减少修bug的开销。

单元测试的FIRST原则

  1. F:Fast。单元测试的执行应足够快。
  2. I:Isolate。单元测试之间应互不依赖。
  3. R:Repeatable。单元测试应与环境无关,可以在各种环境下得出相同的结果。
  4. S:Self-validating。单元测试应能通过本身决定测试通过与否,即测试答案是自定的。
  5. T:Thorough & Timely。单元测试应全面的包括好的情况与坏的情况;单元测试应及时的在制作某个特性时创建。

注意事项

  1. java对应package下的类不能直接被其他类import,需要先新建一个packa将其或所有文件放入。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hiroxzwang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值