【java高级】枚举Enum、泛型Generic、注解Annotation、单元测试Junit

【java高级】枚举Enum、泛型Generic、注解Annotation、单元测试Junit

【枚举Enum】

使用

  • 类的对象是有限个,确定的。如:日期月份等
  • 当需要定义一组常量时,建议枚举
  • JDK1.5之前,自定义枚举
  • JDK1.5之后,enum关键字定义枚举
  • 属性应为不允许被改变,故private final修饰,构造器中赋值,

自定义枚举
1.私有化类的构造器,保证不在外部创建对象
2.在类内部创建枚举类实例,声明:public static final
3.对象如果有实例变量,声明为private final,并在构造器初始化

使用enum定义枚举

  • 使用enum定义的类默认继承java.lang.Enum类,因此不能继承其他类
  • 构造器只能private
  • 实例必须显示列出(,分隔 ;结尾)。列出实例自动会添加public static final修饰
  • 必须在枚举类第一行声明枚举类对象

主要方法

  • values()方法:返回枚举类型的对象数组。
  • valueOf(String str):可以把一个字符串转为对应的枚举类对象。
  • toString:返回枚举类常量名称

若要每个枚举值在调用接口实现方法呈现不同的行为方式,就得每个枚举值来分别实现接口

【泛型Generic】

泛型
  是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型。这种参数类型可以用在类、方法和接口中,分别被称为泛型类、泛型方法、泛型接口 .

为什么要有泛型

  • 解决元素存储的安全问题,好比商品、药品的标签,不会放错

  • 解决获取元素时,需要强制转换问题。
    格式

  • <类型>:指定一种类型的格式。这里的类型可以看成是形参

  • <类型1,类型2…>:指定多种类型的格式,多种类型之间用逗号隔开。这里的类型可以看成是形参

  • 将来具体调用时候给定的类型可以看成是实参,并且实参的类型只能是引用数据类型

好处
  把运行时期的问题提前到了编译期间
  避免了强制类型转换

类通配符

为了表示各种泛型List的父类,可以使用类型通配符

  • 类型通配符的分类
    • 类型通配符:<?>
      • List<?>:表示元素类型未知的List,它的元素可以匹配任何的类型
      • 这种带通配符的List仅表示它是各种泛型List的父类,并不能把元素添加到其中
    • 类型通配符上限:<? extends 类型>
      • List<? extends Number>:它表示的类型是Number或者其子类型
    • 类型通配符下限:<? super 类型 >
      • List<? super Number>:它表示的类型是Number或者其父类型

可变参数: 可变参数又称参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的了

  • 这里的变量其实是一个数组

  • 如果一个方法有多个参数,包含可变参数,可变参数要放在最后

可变参数的使用:Arrays.alist、List.of、Set.of
在这里插入图片描述

【注解Annotation】

* 概念:说明程序的。给计算机看的
* 注释:用文字描述程序的。给程序员看的

* 定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
* 概念描述:
	* JDK1.5之后的新特性
	* 说明程序的
	* 使用注解:@注解名称
  • 作用分类:
    ①编写文档:通过代码里标识的注解生成文档【生成文档doc文档】
    ②代码分析:通过代码里标识的注解对代码进行分析【使用反射】
    ③编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】

  • JDK中预定义的一些注解

    • @Override :检测被该注解标注的方法是否是继承自父类(接口)的
    • @Deprecated:该注解标注的内容,表示已过时
    • @SuppressWarnings:压制警告
      • 一般传递参数all @SuppressWarnings(“all”)
  • 自定义注解

    • 格式:
      元注解
      public @interface 注解名称{
      属性列表;
      }

    • 本质:注解本质上就是一个接口,该接口默认继承Annotation接口

      • public interface MyAnno extends java.lang.annotation.Annotation {}
    • 属性:接口中的抽象方法

      • 要求:
        1.属性的返回值类型有下列取值
        * 基本数据类型
        * String
        * 枚举
        * 注解
        * 以上类型的数组

        2.定义了属性,在使用时需要给属性赋值
        1.如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。
        2.如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
        3.数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}可以省略

  • 元注解:用于描述注解的注解
  • @Target:描述注解能够作用的位置

    • ElementType取值:
    • TYPE:可以作用于类上
    • METHOD:可以作用于方法上
    • FIELD:可以作用于成员变量上
  • @Retention:描述注解被保留的阶段
    * @Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到

  • @Documented:描述注解是否被抽取到api文档中

  • @Inherited:描述注解是否被子类继承

  • 在程序使用(解析)注解:获取注解中定义的属性值
    1.获取注解定义的位置的对象 (Class,Method,Field)
    2.获取指定的注解
    * getAnnotation(Class)
    //其实就是在内存中生成了一个该注解接口的子类实现对象

              public class ProImpl implements Pro{
                  public String className(){
                      return "cn.itcast.annotation.Demo1";
                  }
                  public String methodName(){
                      return "show";
                  }
              }
    
    1. 调用注解中的抽象方法获取配置的属性值
  • 小结:
    1.以后大多数时候,我们会使用注解,而不是自定义注解
    2.注解给谁用?
      1.编译器
      2.给解析程序用
    3.注解不是程序的一部分,可以理解为注解就是一个标签

【单元测试Junit】

Junit单元测试

* 测试分类:
	1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。
	2. 白盒测试:需要写代码的。关注程序具体的执行流程。

* Junit使用:白盒测试
	* 步骤:
		1. 定义一个测试类(测试用例)
			* 建议:
				* 测试类名:被测试的类名Test		CalculatorTest
				* 包名:xxx.xxx.xx.test		cn.itcast.test

		2. 定义测试方法:可以独立运行
			* 建议:
				* 方法名:test测试的方法名		testAdd()  
				* 返回值:void
				* 参数列表:空参

		3. 给方法加@Test
		4. 导入junit依赖环境

	* 判定结果:
		* 红色:失败
		* 绿色:成功
		* 一般我们会使用断言操作来处理结果
			* Assert.assertEquals(期望的结果,运算的结果);

	* 补充:
		* @Before:
			* 修饰的方法会在测试方法之前被自动执行
		* @After:
			* 修饰的方法会在测试方法执行之后自动被执行

知识图谱

在线查看知识体系:java高级

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Itfuture03

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

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

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

打赏作者

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

抵扣说明:

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

余额充值