jdk5.0新特性

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);
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值