欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

黑马程序员--java1.5新特性

程序员文章站 2024-03-17 18:06:28
...

 

---------------------- 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