JDK5.0新特性

1.静态导入
作用:用于简化程序对类静态属性和方法的调用。
语法:import static 包名.类名.静态属性|静态方法|*
例如:
import static java.lang.System.out
import static java.lang.Math.*

2.自动拆箱/装箱
自动装箱:指开发人员可以把一个包装类对象直接赋值给基本的数据类型,
Integer i=1; //装箱
自动拆箱:指开发人员可以把一个基本数据类型直接赋给对应的包装类,
int j=i; //拆箱
典型应用:
List list=new ArrayList();
list.add(1);
int j=(Integer)list.get(0);

3.增强for循环
jdk5.0之前的版本在遍历数组或集合中的元素是,需先获取数组的长度或集合的迭代器,比较麻烦

jdk5.0之后增强了for循环,以简化此类操作,增强的for循环只能用在数组或实现Iterable接口的集合上。
格式语法:
for(变量类型 变量:需迭代的数组或集合){
    ......
    操作
    ......
}

//Map双列集合的遍历方式
//HashMap 倒序输出
//LinkedHashMap 正序输出
Map map=new HashMap();
map.put(“1”, “zhangsan”);
map.put(“2”, “lisi”);
map.put(“3”, “wangwu”);
//传统的方式
/*Set set=map.keySet();
Iterator iterator=set.iterator();
while (iterator.hasNext()) {
String key = (String) iterator.next();
String value=(String) map.get(key);
System.out.println(key+value);
}*/

    //增强的for取map 方式1
    for(Object obj:map.keySet()){
        String keyString=(String) obj;
        String valueString=(String) map.get(keyString);
        System.out.println(keyString+valueString);
    }
    //增强的for取map 方式2
    for(Object obj:map.entrySet()){
        Map.Entry entry= (java.util.Map.Entry) obj;
        String key=(String)entry.getKey();
        String value=(String) map.get(key);
        System.out.println(key+value);
    }
※购物车时商品的先后顺序一定会用的,重点知识

需要注意的问题:增强for只适合取数组,要想改变数组的值,就要用传统的方试

4.可变参数
例子:
@Test
public void testSum(){
sum(1,2,3,4,5,6,7,8,9,10);
}
public void sum(int …nums){ //nums为可变参数
//可变参数,可以看做数组
int sum=0;
for(int i:nums){
sum+=i;
}
System.out.println(sum);
}

需要注意的问题: 可变参数就是数组,在传入参值的时候注意参数类型
可变参数只能处于参数列表的最后,所以一个方法最多只能有一个可变参数

5.枚举
1)作用:一些程序在运行时,它需要的数据不能是任意的,而且是一定范围内的值,jdk5.0后开始 用枚举来实现,在这之前是采用自定义类来解决的。
2)定义一个枚举,关键字:enum,一个枚举也可以构造函数,字段和方法
3)带抽象方法的枚举:在创建字段枚举时,需要将抽象方法实现
4)枚举类:
是一种特殊形式的java类, 枚举中声明的每一个枚举值代表枚举类的一个实例对象,
与java中的普通类一样,在声明枚举时,也可以声明属性,方法,和构造函数,但构造函数必须为私有(这点不难理解),枚举类也可以实现接口,获继承抽象类,
(若枚举类中只有一个枚举值,可当做单态设计模式)
5)java中声明的枚举类
java.lang.Enum类的子类,继承了Enum类的所有方法,常用方法:
请查看(API帮助文档)

  1. 反射(※※※※※※※※)

    描述:一个类有多个组成部分,例如:成员变量,方法,构造方法等,反射就是加载类,并解剖出类的各个组成部分
    疑问:在开发过程中什么情况下才需要使用反射,并解剖出类的各个成员?
    1)做框架用到
    2)学框架用
    加载类:
    1)java中有一个Class类用于代表某一个类的字节码。
    2)Class既然代表某一个类的字节码,它当然就要提供加载某个类字节码的方法:forName(“类的 完整名称”)。例如:Class clazz=Class.forName(“类名”);就完成了加载类
    forName方法用于加载某个类的字节码到内存当中,并使用class对象进行封装
    (扩展:带包的类名称称之为类的完整名称)
    3)另外等到class对象的两种方式:
    类名.class
    对象.getClass()
    以Person类为例:
    //加载类的方式一
    Class clazz1=Class.forName(“/blockDemo/src/cn/itcast/reflect/Person.java”);

        //加载类的方式二
        Class clazz2=new Person().getClass();
    
        //加载类的方式三
        Class clazz3=Person.class;
    

    4)反射类的构造函数:Constructor c = clazz.getConstructor(参数类型.class);//公有
    Constructor c=clazz.getDeclaredConstructor(参数类型.class);//私有
    实例化对象的方法:c.newInstance(构造方法参数)
    有参,无参,公有,私有都能解剖
    面试题目:类中的私有成员外部可以访问吗? 不可以,私有的只能内部可以访问,
    但是,反射可以做到访问私有,利用暴力反射。
    反射类的方法:Method method = clazz.getMethod(参数类型.class); //公有
    Method method = clazz.getDeclareMethod(参数类型.class); //私有
    执行方法:invoke();
    反射类的字段: Field field = clazz.getField(字段名);//公有
    Field field = clazz.getDeclareField(字段名);//私有
    详细代码请参考文件夹code中blockDemo。

  2. 内省※(Introspector)
    1)为啥要学内省?
    开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术来操作此
    类过于麻烦,所有sun公司开发了一套API,专门用来操作java对象的属性。
    2)什么是java对象的属性和属性的读写方法?

    3)内省访问javaBean属性的两种方式:
    a.通过PropertyDescriptor类操作Bean属性
    b.通过Introspector类获得Bean对象的BeanInfo,然后通过BeanInfo来获取属性的描述器
    (PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应getter/setter方法,
    然后通过反射机制来调用这些方法。
    (注意:一个类的属性不是由字段来决定,而是由get或set来决定)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值