• JDK5.0枚举 泛型 注释


    技术总结:

    1. 枚举类
    2. 枚举类的使用
      枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类。
      当需要定义一组常量时,强烈建议使用枚举类。
      如果枚举类中只有一个对象,则可以作为单例模式的实现方式。
      1.2 如何定义枚举类
      方式一:JDK1.5之前,自定义枚举类;
      方式二:JDK1.5之后,可以使用enum关键词定义枚举类。
      自定义枚举类的三个原则:

    私有化类的构造器,保证不能再类的外部创建其对象;
    在类的内部创建类枚举类的实例。声明为:public static final
    对象如果有实例变量,应该声明为private final,并在构造器中初始化。
    自定义枚举类举例:SeasonTest类

    `package com.atguigi.java;

    public class SeasonTest {
    public static void main(String[] args) {
    Season spring = Season.SPRING;
    System.out.println(spring); // Season{seasonName='春天', seasonDesc='春暖花开'}
    }
    }

    // 自定义枚举类
    class Season{
    // 1. 声明Season对象的属性:private final修饰
    private final String seasonName;
    private final String seasonDesc;

    // 2. 私有化类的构造器,并给对象属性赋值
    private Season(String seasonName, String seasonDesc){
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    
    // 3. 提供当前枚举类的多个对象:public static final修饰的
    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("冬天", "冰天雪地");
    
    // 4. 其他诉求:获取枚举类对象的属性
    public String getSeasonName() {
        return seasonName;
    }
    
    public String getSeasonDesc() {
        return seasonDesc;
    }
    // 5. 其他诉求:提供toString
    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
    

    }`
    1.3 使用enum关键字定义枚举类
    package com.atguigi.java;

    /**

    • 使用enum关键字定义枚举类

    • 说明:定义的枚举类默认继承于java.lang.Enum类
      */
      `public class SeasonTest1 {
      public static void main(String[] args) {
      Season1 summer = Season1.SUMMER;
      System.out.println(summer); // Season1{seasonName='夏天', seasonDesc='夏日炎炎'}

       System.out.println(Season1.class.getSuperclass()); // class java.lang.Enum
      

      }
      }`

    //使用enum关键字枚举类
    `enum Season1{
    // 1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束
    SPRING ("春天", "春暖花开"),
    SUMMER("夏天", "夏日炎炎"),
    AUTUMN("秋天", "秋高气爽"),
    WINTER("冬天", "冰天雪地");

    // 2. 声明Season对象的属性:private final修饰
    private final String seasonName;
    private final String seasonDesc;
    
    
    // 3. 私有化类的构造器,并给对象属性赋值
    private Season1(String seasonName, String seasonDesc){
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    
    // 4. 其他诉求:获取枚举类对象的属性
    public String getSeasonName() {
        return seasonName;
    }
    
    public String getSeasonDesc() {
        return seasonDesc;
    }
    // 5. 其他诉求:提供toString
    
    @Override
    public String toString() {
        return "Season1{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
    

    }`
    使用enum关键字定义枚举类时,如果没有重写toString(),那么下面的代码执行的是结果是SUMMER。

    `Season1 summer = Season1.SUMMER;
    System.out.println(summer);
    1.4 Enum类的常用方法
    Season1 summer = Season1.SUMMER;

    //toString():返回枚举类对象的名称
    System.out.println(summer.toString());

    System.out.println("****************");

    //values():返回所有的枚举类对象构成的数组
    Season1[] values = Season1.values();
    for(int i = 0;i < values.length;i++){
    System.out.println(values[i]);
    //values[i].show();
    }
    System.out.println("****************");

    //valueOf(String objName):返回枚举类中对象名是objName的对象。
    Season1 winter = Season1.valueOf("WINTER"); // Season1{seasonName='冬天', seasonDesc='冰天雪地'}
    //如果没有objName的枚举类对象,则抛异常:IllegalArgumentException
    // Season1 winter = Season1.valueOf("WINTER1");
    System.out.println(winter);
    1.5 枚举类实现接口
    情况一:实现接口,在enum类中实现抽象方法,跟普通的实现接口方式一样。
    情况二:实现接口后,每个对象重写方法,从而实现每个对象调用同一方法产生不同结果。
    定义接口Info,接口中定义方法show()。枚举类中的每个对象实现重写show()方法。实现的结果是不同的枚举类对象电泳同一个方法得到不同结果。

    package com.atguigi.java;

    /**

    • 使用enum关键字定义枚举类
    • 说明:定义的枚举类默认继承于java.lang.Enum类
      */
      public class SeasonTest1 {
      public static void main(String[] args) {
      Season1 summer = Season1.SUMMER;
      summer.show(); // 宁夏
      Season1 winter = Season1.valueOf("WINTER");
      winter.show(); // 大约在冬季
      }
      }

    interface Info{
    void show();
    }`

    //使用enum关键字枚举类
    `enum Season1 implements Info{
    // 1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束
    SPRING ("春天", "春暖花开"){
    @Override
    public void show() {
    System.out.println("春天在哪里?");
    }
    },
    SUMMER("夏天", "夏日炎炎"){
    @Override
    public void show() {
    System.out.println("宁夏");
    }
    },
    AUTUMN("秋天", "秋高气爽"){
    @Override
    public void show() {
    System.out.println("秋天不回来");
    }
    },
    WINTER("冬天", "冰天雪地"){
    @Override
    public void show() {
    System.out.println("大约在冬季");
    }
    };

    // 2. 声明Season对象的属性:private final修饰
    private final String seasonName;
    private final String seasonDesc;
    
    
    // 3. 私有化类的构造器,并给对象属性赋值
    private Season1(String seasonName, String seasonDesc){
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    
    // 4. 其他诉求:获取枚举类对象的属性
    public String getSeasonName() {
        return seasonName;
    }
    
    public String getSeasonDesc() {
        return seasonDesc;
    }
    // 5. 其他诉求:提供toString
    
    @Override
    public String toString() {
        return "Season1{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
    

    }`
    2. 注解
    2.1 注解的理解
    从JDK5.0开始,Java增加了对元数据(MetaData)的支持,也就是Annotation(注解)。

    Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用Annotation,程序员可以在不改变原有逻辑的情况下,,在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。

    Annotation可以想修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,这些信息被保存在Annotation的name = value对中。

    在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE/Android中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE中旧版中所遗留的繁冗代码和XML配置等。

    框架 = 注解 + 反射 + 设计模式

    三,泛型(重点)
    什么是泛型?
    对数据类型进行一个限定.
    应用最多的地方是集合。
    为什么要使用泛型?
    1.提高我们程序安全性.
    2.将运行阶段的问题在编译阶段解决.
    3.不用进行类型强制转换

    我们学习泛型的目的:会使用集合上定义的泛型。

    1.集合上泛型的基本使用.
    //Collection
    //List
    //Set
    //它们的作用是限定集合中元素的类型.

    我们可不可以自己在类上或接口上定义泛型?
    可以。怎样定义?

    class 类名{

    }
    在类上声明的泛型怎样使用?
    类的成员:成员属性---成员方法.
    成员属性:类属性(static) 实例属性(非static)---我们管实例属性就叫成员属性.
    成员方法:类方法 实例方法(成员方法)

    类上声明的泛型 可以应用于成员方法或成员属性上。

    在类上声明的泛型不能在类的静态成员上使用?
    原因:是类上声明的泛型,只有在创建对象进才能进行类型传递。
    而静态成员是不需要对象就可以调用。

    我们可不可以在静态的方法上声明泛型?

    可以
    格式
    修饰符 <泛型> 返回值 方法名(){}

    泛型是应用于设计阶段.


    在集合上应用泛型高级
    通配符. ?

    关于?在集合中的应用.

    1. ? extends E
      代表的是E类型或E的子类类型.

    应用:在Collection接口中的addAll 方法
    2. ? super E
    代表的是E类型或E的父类类型.

    应用:在TreeSet的构造方法上。

    TreeSet集合:
    它是一个可以排序的Set集合.

    TreeSet集合怎样排序?
    1.自然顺序
    只要实现这个接口Comparable,就代表这个类型的元素具有自然顺序
    2.比较器.
    实现这个接口Comparator的类,可以根据指定条件进行比较。

    指定比较器时,如果集合中的元素是按照父类中的属性进行比较,这时可以使用父类的比较顺.


    泛型擦除机制

    心得:软件编程是个处理细节的行业,学习的过程是个螺旋上升的过程,在学习过程中不可能迅速地把所有的东西都掌握,需要反复回头看,查缺补漏。
    学习必须抓住细节 才不会报错啥的 学习细节非常重要!

  • 相关阅读:
    新东方英语学习方法
    最易遭老板“炒”的15种员工
    如何阅读代码
    Window 消息大全使用详解
    英语学习的六大原则
    单用户多角色权限的MSSQL实现
    .Net中的5种事务总结
    一个.Net程序员关于学习的思考顺带思考人生
    Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?
    推荐几个win8系统下载比较好的网站
  • 原文地址:https://www.cnblogs.com/xjyboke/p/13567061.html
Copyright © 2020-2023  润新知