JDK5新特性

JDK1.5新特性

一,静态导入

package com.zsj.test;

import static java.lang.Math.max;

public class StaticImport {

public static void main(String[] args) {

       System.out.println(max(3.0, 5.0));

}

}

二、动态参数

package com.zsj.test;

public class DynamicArgs {

    //overload vs override

public static void main(String[] args) {

System.out.println(add(0, 2, 3, 5));

}

public static int add(int x,int ... args){

int sum = 0;

for(int i=0;i<args.length;i++){

sum+=args[i];

}

return sum;

}

}

三、增强for循环

package com.zsj.test;

public class StrongFor {

public static void main(String[] args) {

int [] as = null;

int sum = 0;

for(int arg:as){

sum += arg

}

}

}

四、装箱与拆箱

package com.zsj.test;

public class AutoBox {

public static void main(String[] args) {

       Integer iobj = 3;//装箱

       System.out.println(iobj+12);//拆箱

       Integer i1 = 13;

       Integer i2 = 13;

       System.out.println(i1==i2);//true

       Integer i3 = 137;

       Integer i4 = 137;

       System.out.println(i3==i4);//false

       //-128~127才可以装箱,存在共享池里。此也是一种设计模式(享元模式flyweight多个小对象装成一个对象

        Integer i5 = Integer.valueOf(3);

       Integer i6 = Integer.valueOf(3);

       System.out.println(i5==i6);//true

}

}

五、枚举

1、模拟枚举

   package com.zsj.test;

public class WeekDay {

private WeekDay(){}

public final static WeekDay SUN = new WeekDay();

public final static WeekDay MON = new WeekDay();

public WeekDay nextDay(){

if(this==SUN){

return MON;

}else{

return SUN;

}

}

public String toString() {

       return this==SUN?"SUN":"MON";

}

}

package com.zsj.test;

public class Enumeration {

public static void main(String[] args) {

WeekDay weekDay = WeekDay.SUN;

System.out.println(weekDay.nextDay());

}

}

2、模拟枚举改善

package com.zsj.test;

public abstract class WeekDay {

private WeekDay(){}

public final static WeekDay SUN = new WeekDay(){

public WeekDay nextDay() {

return null;

}

};

public final static WeekDay MON = new WeekDay(){

public WeekDay nextDay() {

return null;

}

};

//用抽象方法定义nextDay就将大量的if..else语句转移成一个个独立的类

public abstract WeekDay nextDay(); 

//public WeekDay nextDay(){

//if(this==SUN){

//return MON;

//}else{

//return SUN;

//}

//}

public String toString() {

       return this==SUN?"SUN":"MON";

}

}

3、枚举的入门

package com.zsj.test;

public class Enumeration {

public static void main(String[] args) {

      WeekDay1 weekDay1 = WeekDay1.MON;

      System.out.println(weekDay1);//MON[自动实现了toString()方法]

      System.out.println(WeekDay1.valueOf("SUN"));//SUN

}

public enum WeekDay1{

SUN,MON,TUE,WEN,THI,FRI,SAT

}

}

4、枚举的构造方法

package com.zsj.test;

public class Enumeration {

public static void main(String[] args) {

      WeekDay1 weekDay1 = WeekDay1.MON;

      System.out.println(weekDay1);//MON[自动实现了toString()方法]

      System.out.println(WeekDay1.valueOf("SUN"));//SUN

}

public enum WeekDay1{

SUN(1),//调用第二个构造方法

MON(),TUE,WEN,THI,FRI,SAT;

private WeekDay1(){//构造方法只能是私有的

System.out.println("construct first");

};

private WeekDay1(int day){//构造方法只能是私有的

System.out.println("construct second");

};

}

}

5、定义抽象方法的枚举类

spacer.gif 

(一)public enum Light{

RED{   //实现的子类

public Light nextLamp() {

return GREEN;

}

},GREEN{

public Light nextLamp() {

return YELLOW;

}

},YELLOW{

public Light nextLamp() {

return GREEN;

}

};

public abstract Light nextLamp();

}

(二)public enum Light{

RED(5){   //实现的子类

public Light nextLamp() {

return GREEN;

}

},GREEN(6){

public Light nextLamp() {

return YELLOW;

}

},YELLOW(3){

public Light nextLamp() {

return GREEN;

}

};

public abstract Light nextLamp();

private int time;

private Light(int time){

this.time = time;

}

}

(三)、枚举只有一个成员时,可以作为一个单例的实现方式

六、反射

  1package com.zsj.test;

public class ReflectTest{

   public static void main(String[] args) throws Exception{

 //获得各类型的字节码

   String str1 = "abc";

   Class cls1 = str1.getClass();

   Class cls2 = String.class;

   Class cls3 = Class.forName("java.lang.String");

   System.out.println(cls1==cls2);//true

   System.out.println(cls2==cls3);//true

   System.out.println(cls1.isPrimitive());//false是否为基本类型

   System.out.println(int.class.isPrimitive());//true

   System.out.println(int.class==Integer.class);//false

   System.out.println(int.class==Integer.TYPE);//true

   System.out.println(int[].class.isPrimitive());//fasle

   System.out.println(int[].class.isArray());//true

   }

}

2、反射就是将java类中各个成分映射成相应的类

七、内省(Introspector)javabeanà特殊的java

package com.zsj.test;

import java.beans.BeanInfo;

import java.beans.PropertyDescriptor;

import java.lang.reflect.Method;

public class Introspector {

public static void main(String[] args) throws Exception {

Point point = new Point(3,5);

String propertyName = "x";

PropertyDescriptor descriptor = new PropertyDescriptor(propertyName,point.getClass());

Method methodX = descriptor.getReadMethod();

Object getX = methodX.invoke(point);

System.out.println(getX);//3

Method methodX1 = descriptor.getWriteMethod();

Object setX = methodX1.invoke(point,7);

System.out.println(setX);//7

//BeanInfo beanInfo = java.beans.Introspector.getBeanInfo(Point.class);

//PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();

//if(PropertyDescriptor pdd: pds){

//if(pdd.getName().equals(propertyName)){

//Method methodX = descriptor.getReadMethod();

//Object getX = methodX.invoke(point);

//}

//}

}

}

BeanUtils

Java7新特性如Map map = {name:sss,age:dfdf};

八、注解(jdk5新特性)

hashSet不能加入重复的对象,然后是通过equalshashCode判断的

九、泛型(jdk1.5新特性)

package com.zsj.test;

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

import java.util.Map.Entry;

public class Gerneric {

public static void main(String[] args) {

HashMap<String, Integer> map = new HashMap<String, Integer>();

map.put("asas",23);

map.put("ds", 12);

Set<Map.Entry<String, Integer>> entrySet = map.entrySet();

for(Entry<String, Integer> entry : entrySet){

System.out.println(entry.getKey() + " " + entry.getValue());

}

}

}

只有引用类型才能作为泛型方法的实际调用

在返回值之前定义一类型<T> 

 


你可能感兴趣的:(新特性,jdk5)