您的位置:首页 > 编程语言 > Java开发

jdk5.0新特性

2015-09-27 22:30 441 查看
jdk 5.0新特性

jdk5.0 中的新特性

泛型,自动拆装箱,增强for循环,枚举,可变参数

1,自动拆装箱

 装箱:把基本的数据类型转换成对应的包装类

 拆箱:把包装类转换成对应的基本数据类型

 

首先看看装箱

Integer i =15; 这样的写法,在jdk5.0之前是不能使用

拆箱:

int m = i; 

在jdk5.0之前是这样实现拆装箱的

装箱:Integer i = new Integer(2);

拆箱: int m = i.intValue();

2,泛型:

泛型一般使用在集合上面

比如我们把字符串类型的值放入到集合里面,就失去了本身的类型,变成了object类型了,需要强制转换,很容易出现

类型转换的错误

注意,泛型里面不能放基本数据类型,只能是对象,写基本的数据类型应该写相对应的包装类

泛型可以定义在类上和方法上

例如: public class Demo<T>(){

      

   }

这样,T就可以在类中使用了

使用在方法中: 如果方法的逻辑相同,只是数据类型不同,这个时候使用泛型方法

public static <T> void test(T aa){

      方法体里面就可以使用这个类型

}

3,可变参数

当我们现在实现3个数相加,4个数相加

当一个方法里面的逻辑基本相同,唯一不同的是传递参数的个数,那么就可以使用可变参数来实现

public static void  main(String[]  args){

      //实现三个数的相加

       sum(1,2,3);

    //如果现在要实现4个数的相加

    sum(1,2,3,4);

    那么怎么写?从新写一个方法吗?

    这个时候 可变参数就起作用了

    sumCommon(1,2,3);

    sumCommon(1,2,3,4);

   

}

public void sumCommon(int... nums){

      int sum = 0;

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

    sum+= nums[i]

  }

}

public static void  sum(int a ,int b ,int c){

   int sum = 0;

   sum = a+b+c;

 

}

注意的地方:

(1)可变参数西需要写在方法的参数列表中,不能单独来定义

(2)在方法的参数列表中,只能有一个可变参数

(3)方法的参数列表中,可变参数必须放在参数的最后

add1(int...nums,int a )这种写法是错了

add2(int a , int...nums)这种写法就是可以的

4,反射

首先,我们在获取class的时候有三种方式

例如:

public class Test(){

    public void test(){

   //第一种

    Test.class

    //第二种  对象.getClass()

    this.getClass()

    //第三种就是反射了

    Class.forName();

 }

}

下面我们来看看反射使用的地方 反射一般使用在我们的框架中,一般应用到xml配置文件的地方都使用了反射

利用反射可以获取类中的所有内容:属性,构造方法,普通方法

获取属性使用一个类 Filed

获取构造方法:Constructor

普通方法通过:Method

操作无参数的构造方法

public void test(){

       //得到class

      Class clazz = Class.forName("类路径");

   获取类的实例 假设有个Person类

   Person p = class.newInstance();

   p.serName("xxx");

}

操作有参数的构造方法:

public void test1(){

       //得到class

      Class clazz = Class.forName("类路径");

   获取类的实例 假设有个Person类 里面有 string  Name  String sex

   //传递的时候有参数的构造方法里面的参数类型

   Constructor cs = clazz.getConstructor(String.class,String.class);

   cs.newInstance("zhangsan","nan");

}

//使用反射来操作属性

public void test3(){

       Class clazz = Class.forName("类路径");

    Person p = clazz.newInstance();

   获取类的实例 假设有个Person类 里面有 string  Name  String sex

    //得到name属性

    clazz.getDeclareFields()//获取所有

   Field f1 =  clazz.getDeclaredField("name");

   //表示可以操作可以 私有属性

   f1.setAccessible(true);

   //设置name的值

   f1.set(p,""zhangsan);

}

操作普通方法

Method

public void test(){

  Class clazz = Class.forName("类路径");

  Person p = clazz.newInstance();

  //第一个参数,方法名称  第二个参数,通过方法设置的值的class

  Method m1 = c4.getDeclaredMethod("setName",String.class);

  //如果操作的是私有的方法

   m1.setAccessible(true);

  //操作方法设置值

   m1.invoke(p,"zhangsan");

   //当我们操作的方法是静态的方法,类名.方法名 操作方法的时候不需要实例

   在invoke方法的第一个参数里面直接写一个空

   m1.invoke(null,"zhangsan");

  

}

5,增强for循环

我们在循环一个 List的时候,在没有jdk5.0之前通常是使用

List<String> list = new ArrayList<String>();

list.add("aaa");

list.add("bbb");

(1) for(int i =0;i<list.size();i++){

      list.get(i);

}

(2) 迭代器来遍历

Iterator<String> it = list.iterator();

while(it.hasNext){

     String a  = it.next()

}

在jdk5.0后就可以使用增强for 了

(3) for(String str : list){

      System.out.println(str);

}

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: