黑马程序员--java1.5新特性
---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ---------------------
目前最新版本的jdk是jdk1.7,但是作为一个划时代的更新,jdk1.5的使用领域还是非常广泛的,其新特性如枚举、泛型、注解等都是非常强大的功能,那么就细数一下jdk1.5的新特性吧
1、静态导入
import static java.lang.Math.max;
静态导入可以导入类中的静态方法,上面一行语句中就是导入了Math类中的max方法,然后在调用的时候就不用通过Math.max()来调用了,当然,当内存中出现了两个max方法时,还是需要加入类名来调用,就好像内存中有两个一样名字的类时要加包名来访问。
2、可变参数
在jdk1.5以前,我们只能重载方法来完成一系列目的一样,只是参数个数不一样的操作,现在我们可以用可变参数来完成这一目的:
可变参数格式 方法名 (参数1,参数2,参数类型... 参数名字),注意可变参数只能放在参数列表的最后一个位置
package test;
public class ChangablePrame {
public static void main(String[] args) {
System.out.println(doSomething(YunSuan.MULTY, 2, 3, 4));
}
public static int doSomething(YunSuan yunsuan, int... is ){
int sum = 0;
switch(yunsuan){
case ADD:
for(int i=0; i<is.length; i++){
sum = sum + is[i];
}
return sum;
case MULTY:
sum = 1;
for(int i=0; i<is.length; i++){
sum = sum * is[i];
}
return sum;
}
return 0;
}
}
enum YunSuan{
ADD,DIVIDE,MULTY,CUT
}
可变参数挺实用的
3、增强for循环
for(数据类型 变量名:被遍历集合(Collection)或者数组){
xxx语句;
}
增强for语句中只能对集合中的元素进行取出操作,不能增删改;
Iterator迭代器除了遍历,还能删除集合中的元素
ListIterator更厉害了,增删改查都能进行。
4、基本类型自动装箱
Integer iObj = 3;
System.out.println(iObj + 12);
Integer i1 = 137(-128--127范围时,为true);
Integer i2 = 137(-128--127范围时,为true);
System.out.println(i1 == i2); //false,但是括号中时却返回ture,原因是Integer采用的是享元模式
Integer i3 = Integer.valueOf(213);
Integer i4 = Integer.valueOf(213);
System.out.println(i3==i4);//同上,另一种包装形式
需要注意的是 对于Integer类型,只有1个字节内的整数范围(-128~127)在内存中只会装箱一次,而在这个返回之外的整数每次装箱都会产生一个新的对象。
5、泛型
这个厉害去了,需要注意的是泛型是给编译器用的,也就是在编译阶段泛型有用,编译好的字节码是没有泛型的。如果要通过反射获得泛型信息,好像只有通过Method类的一个方法才能做到。
泛型的知识点好多,总的说来知道怎么用,看的东别人的泛型就可以了
泛型可以再方法,参数列表,类,接口中使用
泛型中有一个<?>通配符,然后还有泛型限定<? extends 父类> 表示接受父类以及父类所有子类
<? super 子类> 表示接受子类以及所有子类的父类。
在http://www.2cto.com/kf/201211/169210.html 这里说的比较详细。偷过来了,不懂的时候就仔细看看。
6、枚举
枚举也是一种事物,把它看做类的话应该就是构造方法被私有化的类了,所以枚举是可以用来做单例设计,说到枚举,java中的switch()语句所接收的类型只可以是int或者枚举类型。
枚举共有的方法:values(),返回枚举中所有元素的数组。
valueOf(string) 通过字符串来获得枚举中相应的元素。
枚举的使用很简单,在构造枚举时把它当做一个类来对待就行了。需要注意的是,枚举中的所有元素列表必须放在枚举代码块的最前面。
7、注解
注解可以看做是依附在目标身上的一个类,类中就会有属性,这个属性的定义形式和普通类不一样,通过代码来看吧
package javaInhance;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(value = RetentionPolicy.RUNTIME)//定义注解的生命周期
@Target(value = { ElementType.TYPE })//定义该注解能依附的目标类型
public @interface ItcastAnnotation {
String clolor() default "red";
String value();
AnnotationUFO annotationAttr() default @AnnotationUFO("lwm");
Class getC();
RetentionPolicy runTime() default RetentionPolicy.SOURCE;
int i() default 1;
}
获得类上的注解
package javaInhance;
@ItcastAnnotation(getC = String.class, value = "haha", [email protected]("zxj"))//添加注解
public class AnnotationTest {
public static void main(String[] args) {
if (AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)) {//判断指定注解是否存在
ItcastAnnotation annotation = (ItcastAnnotation) AnnotationTest.class
.getAnnotation(ItcastAnnotation.class); //获得指定注解
System.out.println(annotation.clolor());
System.out.println(annotation.value());
System.out.println(annotation.getC());
System.out.println(annotation.runTime());
System.out.println(annotation.i());
System.out.println(annotation.annotationAttr().value());
}
}
注解或许可以做更多复杂的事情,有意义的事情,希望以后能接触到,毕竟现在就算知道注解是怎么用的,也不知道什么时候该用它。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
上一篇: python中判断对象类型的函数——isinstance
下一篇: 编程作业--魔兽世界之二:装备