黑马程序员_泛型等其他JDK1.5新特性

来源:互联网 发布:淘宝怎么冲销量 编辑:程序博客网 时间:2024/05/21 11:33

-----------android培训java培训、期待与您交流! ------------

 

泛型 

通过引入泛型,将获得编译时类型的安全和运行时更小地抛出ClassCastExceptions的可能。1.5中Collection类库的大部分类都被改进为Generic类。使用集合时为类型参数指定一个确定类型值,类型值为Java编译器所用,确保代码类型安全,使用迭代器时无需对返回结果强制转型。代码检验通过后,编译器对现有代码有个转换工作,即去除代码中的类型值信息,在必要处添加转型代码。

    类型值信息只为Java编译器在编译时所使用,确保代码无类型安全问题,验证通过后即被去除,对JVM而言,集合跟1.5之前版本一样。

    泛型是为提高Java代码类型安全性,Java代码与Java编译器之间新增的一种约定规范。Java编译器在编译结果*.class文件中供JVM读取的部分里没有保留Generic的任何信息;JVM看不到泛型的存在。

注意:

         1、对于JVM而言,只有一个泛型类,所以泛型类的类变量和类方法的定义中不能使用T,T只能出现在实例变量和实例方法中;

         2、泛型是类型擦除的,即类型参数T只在编译时被编译器理解,因此也就不能与运行时被JVM理解并执行其代表的操作的操作符如new、instanceof联用,泛型类可有多个类型参数,且类型参数名一般为大写单字符;

         3、为保证与之前版本兼容,允许使用原类,等同于List<Object> ,不过编译器会产生警告提醒潜在的风险;

         4、注意泛型没有继承说,如存放String的List不是存放Object的List的子类;

         5、不能创建参数化的Generic类的数组,泛型类中声明引用成员变量时不能立即创建;

         6、可使用通配符?作类型参数,但不能往Collection<?>容器实例中加入任何非null元素,因为存放的对象的具体类型不确定,而null可看作任一类的实例,允许加入,Object类是所有类的超类,故从c中取出的对象都统一作为Object实例;

         7、不同场景使用不同的通配符 。注:一般当参数类型间或参数类型与返回值类型间存在某种依赖关系,则采取泛型方法,否则采用类型参数通配符方式。

         8、使用多重边界限定。现在有一个业务需求,收钱时需要是我们本公司的员工(继承User),同时亦需要具备收银员的功能(实现Cashier),则使用<T extends User & Cashier>,限定了上界,只有User和Cashier的子类才可以作为参数传递到方法当中。

        

增强for

   在遍历数组和集合元素时,使用增强for循环更简洁,可读性更强;

   格式:for(数据类型 变量名:被遍历的数组或集合)

   局限:只能遍历数组和集合元素,不能对数组和集合进行操作。

增强for:1、必须有被遍历的目标,可与泛型结合使用;建议遍历数组时使用传统for,传统for可使用角标。

 

自动装箱与自动拆箱

   该特性自动完成了了基本数据类型与基本数据类型包装类之间的类型转换操作。

 

静态导入

使用静态导入,在使用类方法和类变量时无需添加前缀类名;

用static修饰import,static关键字置于import关键字后,可导入某具体类中所有的静态成员。

注意:若出现重名现象,当类名重名时,需指明具体的包名;当静态方法名重名时,需指定具体的类名。

 

可变参数

         可变参数,即数组参数的简写形式,用…取代了[]符号。省去了手动创建数组对象的操作,使用时只要将操作的元素作为参数传递即可,隐式将这些参数封装成了数组。

注意:使用可变参数时,可变参数一定要定义在参数列表的最后面。

0 0