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> 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章