、-11.1 枚举
枚举是一种数据类型,它是一系列具有名称的常量的集合。
11.1.1 使用枚举类型设置常量
定义常量的常用形式:
public interface Contants {
public static final int Constants_A=1;
public static final int Constants_B=12;
}
枚举类型的定义常量的语法(其中enum是定义枚举类型的关键字)
public enum Constants {
Constants_A;
Constants_B;
Constants_C;
}
代码
结果
11.1.2 深入了解枚举类型
1、操作枚举类型成员的方法
枚举类型具有参数类型检测,它继承于java.lang.Enum类,每个枚举类型都可以看作是枚举类型的实列,可以直接使用枚举类型名称调用枚举类型成成员。
(1)values()
枚举类型实例包含一个values()方法,该方法可以将枚举类型成员以数组形式返回。
代码
结果
(2)valuesOf()与compareTo()
枚举类型中静态方法valuesOf可以将普通字符串转化为枚举类型,而compareTo(0方法主要用于比较两个 枚举类型成员定义是顺序。
代码
结果
(3ordinal()
枚举类型中的ordinal()方法主要用于获取某个枚举对象的位置索引
代码
结果
2.枚举类型中的构造方法
public enum hh {
hh_a("我是枚举成员A"),
hh_b("我是枚举成员B"),
hh_c("我是枚举成员C"),
hh_d(3);
String description;
int i;
private hh(String description){
this.decription = descrption;
}
private hh(int i){
thid.i = this.i+i;
}
}
代码da
public class kk{
enum hh{
hh_a("我是枚举成员A"),
hh_b("我是枚举成员B"),
hh_c("我是枚举成员C"),
hh_d(3);
String description;
int i = 4;
private hh(String description){
this.description = description;
}
private hh(int i){
this.i = this.i+i;
}
public String getDescription() {
return description;
}
public int getI() {
return i;
}
}
public static void main(String[] agrs) {
hh str[] = hh.values();
for(int i =0;i
代码
interface gg{
public String getDescription();
public int getI();
}
public enum kk implements gg{
ff_a{
public String getDescription() {
return("我是枚举成员A");
}
public int getI() {
return i ;
}
},
ff_b{
public String getDescription() {
return("我是枚举成员B");
}
public int getI() {
return i;
}
},
ff_c{
public String getDescription() {
return("我是枚举成员C");
}
public int getI() {
return i;
}
};
private static int i = 5;
public static void main(String[] agrs) {
kk str[] = kk.values();
for(int i = 0;i
11.1.3 使用枚举类型的优势
(1)类型安全
(2)紧凑有效的数据定义
(3)可以和程序其他部分完美交互
(4)运行效率高
11.2 泛型
泛型实质上就是是程序员定义安全的类型。
11.2.1 回顾“向上转型”与“向下转型”
代码
结果
11.2.2 定义泛型
Object类为最上层的父类,很多程序员为了使程序更为通用,设计程序时通常是传入的值与返回值的值都可以以Object类为主。
语法:类名
代码
结果
在项目中定义泛型类
overclassh = new overclass();
h.setover(12.3f);
Integer i = h2.getB();//不能将Float型赋值给Integer变量
11.2.3 泛型的常规用法
1、定义泛型类时声明多个类型
MutOverClass
MutOverClass:泛型类名称
其中T1和T2为可能被定义的类型
MutOverClass
2/定义泛型类时声明数组类型
代码
结果
3.集合类声明容器的元素
代码
结果
代码
结果
11.2.4 泛型的高级用法
泛型的高级用法主要包括通过参数类型T的继承和通过类型通配符的继承来限制泛型类
1.通过类型参数T的继承限制泛型类型
语法 class 类名称
代码
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class LimitClass{
public static void main(String[]agrs){
LimitClass ll = new LimitClass();
LimitClass ll = new LimitClass();
//LimitClass ll = new LimitClass();//这句是错的,以为HashMap没有实现List()接口
2.通过类型通配符的继承限制泛型类型
语法 extends List>a=null;
A extends List> a= null;
a= new A();
a=new A;
如果没有实例化接口的泛型对象,编译器将会报错。
代码
import java.util.ArrayList;
import java.util.LinkedList;
public class tt {
public static void main(String[]agrs) {
Lista = new ArrayList();
a.add("成员");
List>12 = a;
List>13 = new LinkedList();
System.out.println("11:"+a.get(0));
System.out.println("12:"+12.get(0));
a.set(0, "成员改变");
12.add("添加");
12.set(0,"成员改变");
13.add(1);
13.add(0,1);
System.out.println("a:"+a.get(0));
}
}
}
3.继承泛型类与实现泛型接口
定义泛型的类和接口也可以被继承与实现。
public class ExtendsClass{
}
class SubClassextends ExtendClass{
//泛型可以比父类多,但不可以比父类少
}
定义的泛型接口也可以被实现。
interface TestInterface{
}
class SubClass2 implements TestInterface{
}
11.2.5 泛型总结
使用泛型要遵循以下原则:
(1)泛型的类型参数只能是类类型,不可以是简单类型,如A
(2)泛型的类型个数可以是多个。
(3)可以使用extends关键字限制泛型类型。
(4)可以使用通配符限制泛型类型。