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或者其父类型
  • * 注释:用文字描述程序的。给程序员看的 * 定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。 * 概念描述: * JDK1.5之后的新特性 * 说明程序的 * 使用注解:@注解名称

    作用分类: ①编写文档:通过代码里标识的注解生成文档【生成文档doc文档】 ②代码分析:通过代码里标识的注解对代码进行分析【使用反射】 ③编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】

    JDK中预定义的一些注解

  • @Override :检测被该注解标注的方法是否是继承自父类(接口)的
  • @Deprecated:该注解标注的内容,表示已过时
  • @SuppressWarnings:压制警告
  • 一般传递参数all @SuppressWarnings("all")
  • 2.定义了属性,在使用时需要给属性赋值 1.如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。 2.如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。 3.数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}可以省略

    @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";
    

    3. 调用注解中的抽象方法获取配置的属性值 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高级

    在这里插入图片描述

    分类:
    后端
  •