韩顺平循序渐进学Java零基础 第11章 枚举和注解

Posted Spring-_-Bear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了韩顺平循序渐进学Java零基础 第11章 枚举和注解相关的知识,希望对你有一定的参考价值。

第11章 枚举和注解

425. 枚举类引出

426. 自定义枚举类

  • 枚举是一组常量的集合,属于一种特殊的类,里面只包含一组有限的特定的对象
  • 自定义枚举类:构造器私有化;不提供 setXxx() 方法;对枚举属性使用 statc + final 修饰以实现底层优化
class Season 
   private final String name;
   private final String description;

   public static final Season SPRING = new Season("春天", "温暖");
   public static final Season SUMMER = new Season("夏天", "炎热");
   public static final Season AUTUMN = new Season("秋天", "凉爽");
   public static final Season WINTER = new Season("冬天", "寒冷");

   private Season(String name, String description) 
       this.name = name;
       this.description = description;
   

427. enum枚举类1

enum Season 
   // 必须位于行首且以逗号间隔,分号结尾
   SPRING("春天", "温暖"),
   SUMMER("夏天", "炎热"),
   AUTUMN("秋天", "凉爽"),
   WINTER("冬天", "寒冷");

   private final String name;
   private final String description;

   private Season(String name, String description) 
       this.name = name;
       this.description = description;
   

428. enum枚举类2

  • 使用 enum 关键字开发一个枚举类时,默认会继承 Enum 类,而且是一个 final 类

  • 使用 Javap 反编译 enum 类

  • 如果使用的是无参构造器创建枚举对象,则括号可以省略

429. enum枚举类3

430. Enum成员方法

方法名功能
toString()返回当前对象名,子类可重写
name()返回当前对象常量名,子类不可重写
ordinal()返回当前对象的位置号,默认从 0 开始
vales()返回当前枚举类中的所有常量
valueOf()将字符串转换枚举对象
compareTo()比较两个枚举常量的位置号

431. Enum课堂练习

432. Enum使用细节

  • enum 作为一个特殊的类,依然可以实现接口,但已经继承了 Enum 类,所以不能继承其它类

433. Override注解

  • 注解(Annotation)也成为元数据(Metadata),用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息
  • 与注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息
  • 在 Java SE 中,注解的使用目的比较简单,例如标记过时的方法、忽略警告等;在 Java EE 中注解占据重要角色,例如用来配置应用程序的任何切面、代替 Java EE 旧版中所遗留的冗杂代码和 XML 配置等
  • 重写方法时如果添加了 @Override 注解,则编译器就会检查是否真的重写了父类的方法,如果未重写则编译通不过
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override 

  • @interface 并不指此类是接口,而是说明此类是注解类,在 JDK 1.5 之后加入
  • @Target(ElementType.METHOD) 是修饰注解的注解,成为元注解,用于说明此注解作用的范围

434. Deprecated注解

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value=CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE)
public @interface Deprecated 

435. SupressWarnings注解

@Target(TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE)
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings 
   String[] value();

436. 四种元注解

@Retention		// 指定注解的作用域:SOURCE、CLASS、RUNTIME
@Target			// 指定注解使用的使用位置
@Documented		// 指定注解在 javadoc 中体现
@Inherited		// 指定子类可以继承父类的注解
  • 使用 @Documented 元注解的注解 @Retention 作用域必须为 RUNTIME

437. 家庭作业1

438. 家庭作业2

/**
* 匿名内部类
*
* @author Spring-_-Bear
* @version 2021-12-08 11:33
*/
public class Homework02 
   public static void main(String[] args) 
       Phone phone = new Phone();
       // 匿名内部类,实现接口的方法,面向接口编程,动态绑定
       phone.executeWork(new ICalculate() 
           @Override
           public double cal(double num1, double num2) 
               return num1 - num2;
           
       , 12, 64);
   


interface ICalculate 
   public double cal(double num1, double num2);


class Phone 
   public void executeWork(ICalculate iCalculate, double num1, double num2) 
       System.out.println(iCalculate.cal(num1, num2));
   

439. 家庭作业3

package charpter11;

/**
* 局部内部类
*
* @author Spring-_-Bear
* @version 2021-12-08 11:41
*/
public class Homework03 
   public static void main(String[] args) 
       new OuterClass().method();
   


class OuterClass 
   private String name = "Spring-_-Bear";

   public void method() 
       class InnerClass 
           private String name = "lcx";

           public void show() 
               System.out.println("Inner name = " + name + " Outer name = " + OuterClass.this.name);
           
       

       new InnerClass().show();
   

440. 家庭作业4

441. 家庭作业5

442. 家庭作业6

443. 内容梳理

以上是关于韩顺平循序渐进学Java零基础 第11章 枚举和注解的主要内容,如果未能解决你的问题,请参考以下文章

韩顺平循序渐进学Java零基础 第01-08章

韩顺平循序渐进学Java零基础 第24章 零基础学MySQL

韩顺平循序渐进学Java零基础 第27章 正则表达式

韩顺平循序渐进学Java零基础 第14章 集合

韩顺平循序渐进学Java零基础 第13章 常用类

韩顺平循序渐进学Java零基础 第23章 反射