昨天本想上传笔记的,一看宿舍的都快要睡下了,我因为还要铺床,所以赶紧关了电脑,铺床做梦!O(∩_∩)O~
昨天学习的是Java语言的新特性:泛型、枚举、for语句的简单写法。
通过泛型,可以提高程序代码的复用性;
通过枚举类型,可以在一定程度上增加程序代码的可读性;
通过for语句的简化写法,可以进一步简化for语句的写法。
一、泛型 (genericity)
与面向对象的多态类似,不同的是应用泛型可以减少数据的类型转换,从而可以提高代码的运行效率。
泛型实际上是通过给类或接口增加类型参数实现的。
格式为 类名或接口名后面加 <类型参数> 若有多个类型参数,可用,逗号隔开。
类型参数定义格式:
1.类型变量标识符
2.类型变量标识符 extends 父类型
3.类型变量标识符 extends 父类型 & 父类型2 & …… & 父类型n
上述第一种等价于 类型变量标识符 extends java.lang.Object
二、枚举 (enum)
创建枚举类型的目的:为了定义一些枚举常量。
格式为: 【枚举类型修饰词列表】 enum 枚举类型标识符
{
枚举变量1,枚举变量2,……,枚举变量n
}
1.相邻修饰词用空格隔开,修饰词可以是public,也可以是默认,但不能是protected、private、abstract。
2.如果枚举类型修饰词含有public,则要求该枚举定义所在的文件名前缀与枚举类型标识符指定的名称相同,并且以.java作为后缀,而且在该文件中不能含有其他属性为public的类、接口或枚举。
3.每个Java源程序可以含有多个类、接口和枚举,但其中属性为public的只能有0个或1个。
能通过new运算符创建实例对象。可以直接通过枚举类型标识符访问枚举常量。
ex:Season s=Season.春季;
方法有:
public String name()
public String toString() 以上两个方法都是返回枚举常量所对应的字符串。
枚举类型标识符.values() 获得该枚举类型的所有枚举变量,返回值是枚举数组。
枚举常量在switch语句中的使用有些特殊,作为switch语句各个分支的枚举变量前面不能加点运算符以及枚举变量或枚举变量标 识符,而应当直接使用枚举常量标识符。
ex:case 春季: 不能写作:case Season.春季:或者case sa[i].春季:
采用枚举类型可以使得程序更接近于自然语言,但同时也使得程序变得更为复杂。
三、for语句的简化写法
在一定的条件下,for语句才能简化。
格式为: for(类型 标识符:表达式)
语句或语句块
for语句简化写法可以分成两类:
1.第一类要求上面的表达式的类型具有成员方法
public Iterator<E> iterator()
ex:Vector<String> a=new Vector<String>();
a. Iterator<String> i=a.iterator();
if(i.hasNext)
{
Sysytem.out.println(i.next);
}
b. for(Iterator<String> i=a.iterator();i.hasNext();)
{
System.out.println(i.next());
}
c. for(String c:a)
System.out.println(c);
2.第二类要求表达式的类型是数组类型。
格式是:类型 [ca]=表达式;
for(int i=0;i<ca.length;i++)
{
类型 标识符=ca[i];
语句或语句块
}
ex:
a. Season [] ca=Season.values();
for(int i=0;i<ca.length;i++)
{
System.out.println(c[i]);
}
b. for(Season c:Season.values())
System.out.println(c);
小结:
for(int i=0;i<ca.length;i++)
for(Season c:Season.values())
观察这两个语句:貌似可以理解成,使用冒号左边的类型输出冒号右边的所有取值。
总结一下:泛型进一步提高了程序的复用性。相对面向对象的多态性而言,泛型的实现原理是采用代码替换的 形式,即用实际的类型替换类型变量,从而实现程序的可复用性。这个过程可以减少在直接采用面向对象的多态性是的数据类型转换,从而减少因为数据类型转换而引发的数据精度丢失等问题。
枚举类型可以定义一些枚举常量。提高了可读性,但增加了程序复杂度。
通过for语句的简化可以使一部分for语句变得更加紧凑。提高了程序简单性,但降低了可读性。