第十三章 枚举类型与泛型

枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中。

 13.1  枚举类型

        使用枚举类型,可以取代前面学习过的定义常量的方式,同时枚举类型还赋予程序在编译时进行检查的功能。

13.1.1        使用枚举类型设置常量

        设置常量时,我们通常将常量放置在接口中,这样在程序中就可以直接使用。该常量不能被修改,因为在接口中定义常量时,该常量的修饰符为final与static。常规定义常量的代码如下:

public Interface Constans{

        public static final int Constans_A=1;

        public static final int Constans_B=12;

}

 枚举类型出现后,逐渐取代了上述常量定义方式。使用枚举类型定义常量的语法如下:

public enum Constans{

        Constans_A,

        Constans_B,

}

其中,enum是定义枚举类型的关键字。

package 第十三章;
 
public interface SeasonInterface {//接口类
    //在接口中定义了四个常量
     final int spring=1;
     final int summer=2;
     final int autumn=3;
     final int winter=4;    
}
枚举类型定义如下:
package 第十三章;
 
public enum SeasonEnum {//枚举类  enun里面默认包含了 public final static
    spring("万物复苏"),//注意参数后面不是分后而是逗号
    summer("烈日炎炎"),
    autumn("秋草枯黄"),
    winter("白雪皑皑"),
}
使用枚举类型定义常量的话 可以剪短代码量

下面使用例题来解释:

//接口定义
public interface SeasonInterface {//接口类
    //在接口中定义了四个常量
     final int spring=1;
     final int summer=2;
     final int autumn=3;
     final int winter=4;    
}
//枚举类型

ca814a90367249e7befa911557786ea4.png
 e907143a30ef42a0b3fc952decfa3777.png 

秋天
春天
13.1.2深入了解枚举类型
枚举类型较传统定义常量的方式,除具有参数类型检测的优势外  还有其他的又是,,用户可以将一个枚举类型看作一个类,它继承于java.lang.Enum类,当定义了一个枚举类型时,没一个枚举类型的成员都看作是一个实例,这些枚举类型的成员都默认为final  public static修饰 所以当使用枚举类型成员是可以直接使用枚举类型的名称调用枚举类型成员即可  所以该类中的一些操作枚举类型的方法都可以应用到枚举类型中  常用方法如下: 

 

 

2b769f65e4654dc0b7e42f6a29b18989.png
 

1.values()方法

枚举类型实例包含一个values()方法,该方法将没居中的所有枚举类型值以数组的形式返回  代码如下:

package 第十三章;
 
public enum SeasonEnum {//枚举类  enun里面默认包含了 public final static
    spring("万物复苏"),//注意参数后面不是分后而是逗号
    summer("烈日炎炎"),
    autumn("秋草枯黄"),
    winter("白雪皑皑");
    //枚举类的构造方法只能是私有的
    private String introduce;
    public String getIntroduce() {
return introduce; 
    }
        private SeasonEnum() {
        }
        private SeasonEnum(String introduce) {
            this.introduce = introduce;
    }
}

public class SeasonDemo1 {
    public static void main(String[] args) {
        SeasonEnum[] seasons =     SeasonEnum.values();//SeasonEnum.values是获取SeasonEnum的最初值  就是将SeasonEnum文件中的值传入给该数组  然后再for循环打印出来
        for(int i = 0; i<seasons.length;i++) {
            SeasonEnum temp =seasons[i];
            System.out.println(temp+temp.getIntroduce());
        }
    }
 
}

0511f4c8001e4456acfe0ab4380cbcdc.png 

spring万物复苏
summer烈日炎炎
autumn秋草枯黄

winter白雪皑皑

2.valueOf()方法与compareTo方法()
枚举类型中静态方法valueOf()方法可以将普通字符串转换为枚举类型,而compareTo方法用于比较两个枚举类型对象定义是的顺序

3.ordinal()方法
枚举类型中的ordinal()方法用于获取某个枚举对象的位置索引值

4.枚举类型中的构造方法
在美剧类型中可以添加构造方法但是规定这个构造方法必须配private修饰符所修饰枚举类型定义的构造方法语法如下

//package 第十三章;

public enum SeasonEnum {//枚举类  enun里面默认包含了 public final static
    spring("万物复苏"),//注意参数后面不是分后而是逗号
    summer("烈日炎炎"),

    autumn("秋草枯黄"),
    winter("白雪皑皑");
    //枚举类的构造方法只能是私有的
    private String introduce;
    public String getIntroduce() {
        return introduce; 
    }
        private SeasonEnum() {
}
        private SeasonEnum(String introduce) {
            this.introduce = introduce;
    }
}
package 第十三章;
 public class SeasonDemo1 {
    public static void main(String[] args) {
        SeasonEnum[] seasons =     SeasonEnum.values();//SeasonEnum.values是获取SeasonEnum的最初值  就是将SeasonEnum文件中的值传入给该数组  然后再for循环打印出来
        for(int i = 0; i<seasons.length;i++) {
            SeasonEnum temp =seasons[i];
            System.out.println(temp+temp.getIntroduce());
        }
    }

13.1.3 使用枚举类型的优势 

枚举类型声明提供了一种对用户友好的变量定义方式,枚举了某种数据所有尽可能出现的值,总结枚举类型,具有以下特点:

类型安全

紧凑有效的数据定义

可以和程序其他部分完美交互

运行效率高

 

13.2泛型
泛型实质上就是程序员定义安全的类型,在没有出现泛型之前,java也提供了队Object类型的引用“任意化” 操作 这种任意话操作就是对object类型引用进行向上或者向下的转型操作,但某些强制类型转换的错误也许不会背编译器捕捉,而运行后出现的异常,可见强制类型转换存在安全隐患,所以在此提供了泛型机制,

13.2.2定义泛型类

Object类为最上层的父类,很多程序员为了让程序更为通用,设计程序的时候通常使用传入的值与返回的值都已Object类型为主。当需要使用这些实例的时候,必须正确地将该实例转换为原来的实例,否则在运行是会发生ClassCastException异常

为了预防这种问题 java提供了泛型机制 

类名 <T>
其中T是泛型地名称 , 代表了某一种类型。开发者在创建该类对象时 需要制定T代表了具体哪种类型,如果不指定的话 T则采用了Object类型

如以下代码所示:

ca94155a1f9c4a3197d8d15b83756c67.png  

代码中一共new了四个对象  两个 String类型 一个double类型 一个boolean类型   依次定义 然后输出    使用泛型定义额类在生命该类对象时  可以根据不同地需求指定<T>真正地类型 ,而是在使用类中的方法传递或返回 数据类型时将不再进行类型转换操作,而是使用在生命泛型类对象是“<>”符号中设置数据类型

13.2.3 泛型的常规用法
1. 在定义泛型类时,可以声明多个类型 代码如下
class MyClass<T1,T2>{}
其T1,T2是可以背定义的类型

这样的话既可以一下实例化多个类型  代码如下

MyClass<Boolean,Float> m = new MyClass <Boolean,Float>();
2.  定义泛型类 时声明数组类型  代码如下

package 第十三章;
public class ArrayClass <T>{
private T[]array;//创建泛型的数组v
public T[]getArray(){//使用get方法来读取
    return array;//返回array
}
public void steArray(T[]array) {//使用set方法
    this.array=array;//this关键字给array赋值
}

public static void main (String[]args) {
    ArrayClass<String>demo=new  ArrayClass<String>();//创建泛型为String类型的独享
    String value[]= {"成员1","成员2","成员3","成员4","成员5",};//添加数据
    demo.steArray(value);
    String array[] = demo.getArray();//使用get方法读取读取然后一次遍历输出
    for(int i = 0;i<array.length;i++) {//循环遍历出数组中的数据
        System.out.println(array[i]);
    }
}
}

5077e4889ff742979210441344220967.png 

3.集合类声明容器的元素


JDK中的集合接口,集合类都被定义了泛型,其中List<E>的泛型E实际上就是element元素的首字母Map<K,V>的泛型 K和V就是key键和value键的首字母。常用的被泛型化的集合类如下:

cbb38d7ec1b74f299f19e53b09be8449.png

13.2.4 泛型的高级用法

13.2.5 泛型总结

泛型的类型参数只能是类类型,不可以是简单型,如A<int>这种泛型定义就是错的

泛型的类型个数可以是多个

可以使用extends关键字限制泛型的类型

可以使用通配符限制泛型的类型

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值