Java高新技术(1)
---------- android培训、java培训、期待与您交流!----------
1、JDK新特性
JDK1.5的新特性,可变参数,增强for循环,自动拆箱与装箱,枚举,反射,JavaBean内省,beanutils工具包(1) 静态导入:
普通的import是导入一个类,或者一个包中的所有的类
静态导入:是导入一个类中的某个静态方法或者所有静态方法。例如导入Math.random()方法,
实际开发中,我们要引用某个包下的某个类中的静态方法时,为了方便代码书写,JDK1.5提供了静态导入的新特性。
例如,我们要使用java.lang包下Math类的求最大值方法max()时,可以在类顶端加上如上代码:
的多个静态方法,或者所有静态方法时,可以全部逐一导入,也可以一次性导入,形如:
import static java.lang.Math.max;
之后,若我们要用到这个类下的max()方法,时,就可以不用加上类名了,直接用max(a,b);这种形式。若我们还需要改类下
import static java,lang.Math.*;
注意:静态导入是JDK1.5的新特性,1.5之前没有这个特性,所以以后在修改和维护JDK1.5前的程序时,这个要稍作注意。
(2) 可变参数
一个方法的参数个数不固定,可变参数的特点:只能出现在参数列表的最后,...位于变量类型和变量名之间,前后有无空格都可以,调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法中以数组的形式访问可变参数。
public class demo {
public static void main(String[] args) {
function("hello",3,1,6,2,6,3);
}
public static void function(String a,int...args){
for(int i=0; i
(3) 增强for循环
以上代码可以利用增强for循环修改为:
public class demo1 {
public static void main(String[] args) {
function("hello",3,1,6,2,6,3);
}
public static void function(String a,int...args){
for(int arg : args){
System.out.println(arg);
}
}
}
其中的集合变量可以为数组或者是实现了iterable接口的集合
2、枚举
在JDK1.5之前,Java有两种方法定义一个新的类型:类和接口,在一些特殊情况下这两种类型还是不太合适,在JDK1.5之后引入了枚举类型。
我们可以使用枚举——enmu类型来定义一个新的数据类型,这个数据类型中只有有限个对象,比如一周只有七天,一年只有十二个月等,那么就可以使用枚举来表示这种类型,
枚举类是一个特殊的类,它一样可以有自己的方法和属性,可以实现一个和多个接口,也可以定义自己的构造器。一个Java源文件中最多只能定义一个public访问权限的枚举类,且该Java源文件也必须和该枚举类的类名相同。但枚举类终究不是普通的类,它与普通类有如下的区别:
(a) 枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是继承Object类。其中java.lang.Enum类实现了java.lang.Serializable和 java.lang.Comparable两个接口。
(b) 枚举类的构造器只能使用private访问控制符,如果省略了其构造器的访问控制符,则默认使用private修饰;如果强制指定访问控制符,则只能指定private修饰符。
(c) 枚举类的所有实例必须在枚举类中显式列出,否则这个枚举类将永远都不能产生实例。列出这些实例时,系统会自动添加public static final修饰,无序显式添加。
(d) 所有枚举类都提供一个values方法,该方法可以很方便地遍历所有枚举值。
枚举类常用的方法:
protected Object clone():抛出CloneNotSupportedException
int compareTo(E o):比较此枚举与指定对象的顺序
boolean equals(Object other):当指定对象等于此枚举常量时,返回true
protected void finalize():枚举类不能有 finalize 方法
Class<E> getDeclaringClass():返回与此枚举常量的枚举类型相对应的Class对象
int hashCode():返回枚举常量的哈希码
String name():返回此枚举常量的名称,在其枚举声明中对其进行声明
int ordinal():返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)
String toString():返回枚举常量的名称,它包含在声明中
static <T extends Enum<T>> T valueOf(Class<T> enumType, String name):返回带指定名称的指定枚
举类型的枚举常量
枚举元素必须放在枚举体的第一行,枚举元素列表的后面要有分号与其他元素分隔。
带构造方法的枚举:构造方法必须是私有的,只要第一次用到了枚举类,那么其中的构造方法就会被调用,
public class demo {
public static void main(String[] args) {
WeekDays day1 = WeekDays.Tue;
}
public enum WeekDays{
Mon(1),Tue(2),Wed;
private WeekDays(){
System.out.println("one");
}
private WeekDays(int day){
System.out.println("two");
}
}
}
其输出结果为:
two
two
one
实现接口的枚举:枚举可以实现一个或多个接口,实现接口时需要实现接口中所定义的抽象方法。
interface Print{
public abstract String nextColor();
}
public class demo2 {
public static void main(String[] args) {
TrafficLamp t1 = TrafficLamp.RED;
System.out.println(t1.nextColor());
}
public enum TrafficLamp implements Print{
RED{
public String nextColor(){
return "绿色";
}
},
YELLOW{
public String nextColor(){
return "红色";
}
},
GREEN{
public String nextColor(){
return "黄色";
}
};
}
}
带抽象方法的枚举:枚举可以实现接口外,还可以带有抽象方法,每个枚举的对象只要实现了抽象方法就可以。
public class demo2 {
public static void main(String[] args) {
TrafficLamp t1 = TrafficLamp.RED;
System.out.println(t1.nextLamp());
}
public enum TrafficLamp{
RED(30){
public TrafficLamp nextLamp(){
return GREEN;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
},
GREEN(40){
public TrafficLamp nextLamp(){
return YELLOW;
}
};
public abstract TrafficLamp nextLamp();
private int times;
private TrafficLamp(int time){
this.times = time;
}
}
}
---------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------