1.枚举类型
枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中。
1).使用枚举类型设置常量
常规定义常量的代码如下:
public interface Constants{
public static final int Constanta_A=1;
public static final int Constants_B=12;
}
枚举类型出现后,逐步取代了上述常量定义方式:
public enum Constants{
Constants_A,
Constants_B,
}
其中,enum是定义枚举类型的关键字
2).深入了解枚举类型
枚举类型较传统定义常量的方式,除具有参数类型检测的优势外,还具有其他方面的优势。用户可以将一个枚举类型看作是一个类,它继承java.lang.Enum类。枚举类型成员都默认被final、public、static修饰,所有当使用枚举类型成员时直接使用枚举类型名称调用枚举类型成员即可由于枚举类型对象继承java.lang.Enum类,所有该类中一些操作枚举类型的方法都可以应用到枚举类型。
*1.values()方法
该方法将枚举中所有的枚举值以数组的形式返回。
*2.valueOf方法与compareTo()方法
前者可以将普通的字符串转换为枚举类型,后者用于比较两个枚举类型对象定义时的顺序。
*3.ordinal()方法
用于获取某个枚举对象的位置索引值。
*4.枚举类型中的构造方法
在枚举类型中,可以添加构造方法,但是规定这个构造方法必须被private修饰符所修饰。
3).使用枚举类型的优势
枚举类型声明提供了一种对用户友好的变量定义方式,枚举了某种数据所有尽可能出现的值,总结枚举类型,具有以下特点:
类型安全
紧凑有效的数据定义
可以和程序其他部分完美交互
运行效率高
2.泛型
1).定义泛型类
类名<T>
其中,T是泛型的名称,代表一种类型,开发者在创建该类对象时需要指定T所代表哪种具体的类型。如果不指定具体类型,则采用Object类型。
例题
package 十三;
public class Book<T> { //定义带泛型的Book<T>类
private T bookInfo;//类型形参:书籍信息
public Book(T bookInfo) { //参数为类型形参的构造方法
this.bookInfo =bookInfo; //为书籍信息赋值
}
public T getBookInfo() { //获取书籍信息的值
return bookInfo;
}
public static void main(String[] args) {
Book<String>bookName =new Book<String>("《Java从入门到精通》");
Book<String>bookAuthor =new Book<String>("明日科技");
Book<Double>bookprice =new Book<Double>(69.8);
Book<Boolean>booksource =new Book<Boolean>(true);
System.out.println("书名:"+bookName.getBookInfo());
System.out.println("作者:"+bookAuthor.getBookInfo());
System.out.println("价格:"+bookName.getBookInfo());
System.out.println("是否附赠源码:"+booksource.getBookInfo());
}
}
2).泛型的常规方法
定义泛型类时声明多个类型
class MyClass<T1,T2>{}
其中,T1和T2为可能被定义的类型。
这样,在实例化指定类型的对象时就可以指定多个类型。例如:
MyClass<Boolean,Float>m=new MyClass<Boolean,Float>();
3).泛型的高级用法
*1.限制泛型可用类型
默认可以使用任何类型来实例化一个泛型类对象,但 Java 中也对泛型类实例的类型作了限制法如下:
class 类名称<T extends anyClass>
* 2.使用类型通配符
在泛型机制中,提供了类型通配符,其主要作用是在创建一个泛型类对象时限制这个泛想类的类不实现或继承某个接口或类的子类。要声明这样一个对象可以使用“?”通配符来表示,同时使用键字来对泛型加以限制。使用泛型类型通配符的语法如下;
泛型类名称<? extends List> a=null;
其中,<? extends Lis>表示类型未知,当需要使用该泛型对象时,可以单独实例化。
A<? extends List> a = null;
a= new A<ArrayList>();a= new A<LinkedList>();
*3.继承泛型类与实现泛型接口
定义为泛型的类和接口也可以被继承与实现。例如,让 SubClass 类继承 ExtendClass 的泛型,如下:
class ExtendCiass<T1>{}
class SubCiass<T1,T2,T3> extends ExtendClass<T1>{}