`
地方疙瘩人
  • 浏览: 37602 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JAVA5新特性

 
阅读更多
引用
java5就已经引入静态导入,很少见人用,很多人都没听说过,所以总结下java5-java8的新特性。

1、泛型 Generics:
        引用泛型之后,允许指定集合里元素的类型,免去了强制类型转换,并且能在编译时刻进行类型检查的好处。

        Parameterized Type作为参数和返回值,Generic是vararg、annotation、enumeration、collection的基石。



        A、类型安全
           抛弃List、Map,使用List<T>、Map<K,V>给它们添加元素或者使用Iterator<T>遍历时,编译期就可以给你检查出类型错误

        B、方法参数和返回值加上了Type

        抛弃List、Map,使用List<T>、Map<K,V>

          C、不需要类型转换


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

       String str=list.get(i);
         D、类型通配符“?”


       假设一个打印List<T>中元素的方法printList,我们希望任何类型T的List<T>都可以被打印:

    
public void printList(List<?> list,PrintStream out)throws IOException{  
for(Iterator<?> i=list.iterator();i.hasNext();){  
System.out.println(i.next.toString());  
}  
  
}  


如果通配符?让我们的参数类型过于广泛,我们可以把List<?>、Iterator<?> 修改为

      List<? Extends Number>、Iterator<? Extends Number>限制一下它。

2、枚举类型 Enumeration:

3、自动装箱拆箱(自动类型包装和解包)autoboxing & unboxing:

  简单的说是类型自动转换。

   自动装包:基本类型自动转为包装类(int ——Integer)

   自动拆包:包装类自动转为基本类型(Integer——int)

4、可变参数varargs(varargs number of arguments)

  参数类型相同时,把重载函数合并到一起了。

  如:public void test(object... objs){

for(Object obj:objs){

System.out.println(obj);

}

}

5、Annotations 它是java中的metadata(注释)

     A、Tiger中预定义的三种标准annotation

           a 、Override

           指出某个method覆盖了superclass 的method当你要覆盖的方法名拼写错时编译不通过

           b、Deprecated

           指出某个method或element类型的使用是被阻止的,子类将不能覆盖该方法

           c、SupressWarnings

           关闭class、method、field、variable 初始化的编译期警告,比如:List没有使用 Generic,则@SuppressWarnings("unchecked")去掉编译期警告。

     B、自定义annotation

          public @interface Marked{}

     C、meta-annotation

         或者说annotation的annotation

         四种标准的meta-annotation全部定义在java.lang.annotaion包中:
          a, Target
           指定所定义的annotation可以用在哪些程序单元上
           如果Target没有指定,则表示该annotation可以使用在任意程序单元上
@Retention(RetentionPolicy.RUNTIME)    
@Target({ ElementType.FIELD, ElementType.METHOD })    
public @interface RejectEmpty {    
   /** hint title used in error message */    
 String value() default "";    
}    
   
@Retention(RetentionPolicy.RUNTIME)    
@Target( { ElementType.FIELD, ElementType.METHOD })    
public @interface AcceptInt {    
 int min() default Integer.MIN_VALUE;    
int max() default Integer.MAX_VALUE;    
  String hint() default "";    
}  

b, Retention
     指出Java编译期如何对待annotation
      annotation可以被编译期丢掉,或者保留在编译过的class文件中
        在annotation被保留时,它也指定是否会在JVM加载class时读取该annotation
@Retention(RetentionPolicy.SOURCE)  // Annotation会被编译期丢弃    
public @interface TODO1 {}    
 @Retention(RetentionPolicy.CLASS)   // Annotation保留在class文件中,但会被JVM忽略    
 public @interface TODO2 {}    
@Retention(RetentionPolicy.RUNTIME) // Annotation保留在class文件中且会被JVM读取    
 public @interface TODO3 {}    

c, Documented
       指出被定义的annotation被视为所熟悉的程序单元的公开API之一
        被@Documented标注的annotation会在javadoc中显示,这在annotation对它标注的元素被客户端使用时有影响时起作用
       d, Inherited
       该meta-annotation应用于目标为class的annotation类型上,被此annotattion标注的class会自动继承父类的annotation
    D, Annotation的反射
    我们发现java.lang.Class有许多与Annotation的反射相关的方法,如getAnnotations、isAnnotationpresent
    我们可以利用Annotation反射来做许多事情,比如自定义Annotation来做Model对象验证

 @Retention(RetentionPolicy.RUNTIME)    
 @Target({ ElementType.FIELD, ElementType.METHOD })    
public @interface RejectEmpty {    
   /** hint title used in error message */    
  String value() default "";    
 }    
     
 @Retention(RetentionPolicy.RUNTIME)    
@Target( { ElementType.FIELD, ElementType.METHOD })    
 public @interface AcceptInt {    
     int min() default Integer.MIN_VALUE;    
    int max() default Integer.MAX_VALUE;    
 String hint() default "";    
} 

使用@RejectEmpty和@AcceptInt标注我们的Model的field,然后利用反射来做Model验证



6、新的迭代语句(for(int n:numbers))

7、静态导入(import static )

8、新的格式化方法(java.util.Formatter)

formatter.format("Remaining account balance: $%.2f", balance);

9、新的线程模型和并发库Thread Framework

HashMap的替代者ConcurrentHashMap和ArrayList的替代者CopyOnWriteArrayList
在大并发量读取时采用java.util.concurrent包里的一些类会让大家满意BlockingQueue、Callable、Executor、Semaphore...
分享到:
评论

相关推荐

    Java5新特性

    ### Java 5 新特性详解 #### 一、引言 随着技术的发展,编程语言也在不断地进步和完善。Java 5 的发布标志着 Java 在功能性和便利性方面迈出了重要的一步。本篇文章将详细介绍 Java 5 中的一些关键特性,这些新特性...

    java5新特性

    java5新特性

    使用模式设计及java5新特性在HibernateDAO中的应用

    标题 "使用模式设计及java5新特性在HibernateDAO中的应用" 涉及到的是软件开发中的两个关键领域:设计模式和Java编程语言的新特性,特别是在数据访问对象(DAO)层如何结合使用它们。这篇文章可能详细阐述了如何利用...

    JAVA5/JAVA6新特性

    ### Java 5新特性 #### 1. **泛型(Generics)** 泛型是Java 5最重要的特性之一,它允许在类、接口和方法声明中使用类型参数,增强了类型安全,减少了强制类型转换,提高了代码的可读性和可维护性。 #### 2. **...

    RowSetDemo.zip java 5新特性

    Java 5是一个重要的Java平台版本,它引入了许多新特性,极大地提升了开发效率和代码质量。在"RowSetDemo"这个示例中,我们主要关注的是Java 5中的一个新特性——`java.sql.RowSet`接口及其相关的实现。`RowSet`是...

    JAVA5新特性介绍.zip

    Java 5,也被称为JDK 1.5,是Java发展历程中的一个重要里程碑,引入了许多显著的新特性,极大地提升了开发效率和代码的可读性。以下是对这些关键特性的详细解释: 1. **自动拆装箱(Auto-boxing/Unboxing)**: 这一...

    jdk1.5 tiger java5 新特性

    总的来说,JDK 1.5(Java 5.0)的新特性极大地提高了Java的生产力和代码质量。从泛型到增强的for循环,再到注解和枚举,这些改进都让Java开发者能够编写出更安全、更易于维护的代码。在实际开发中,理解并充分利用...

    JAVA5新特性介绍[收集].pdf

    通过了解和熟练掌握这些新特性,开发者能够编写出更高效、更易于维护的 Java 5 代码。这些特性不仅提升了编程体验,也为后续的 Java 版本奠定了基础。学习并应用这些特性是保持 Java 技能与时俱进的关键。

    Java8 新特性

    Java8是Java编程语言的一次重大更新,引入了许多新的特性和功能,极大地提升了开发效率和代码的可读性。以下是一些主要的Java8新特性详解: 1. **Lambda表达式**:Lambda表达式是Java8中最显著的新特性,它为Java...

    黑马程序员_java8新特性详解笔记和源码

    本文将深入探讨Java 8的三大关键新特性:接口的默认方法实现、Lambda表达式以及一系列相关的变化。 一、接口的默认方法实现 在Java 8之前,接口只能定义抽象方法,而不能包含具体实现。Java 8引入了默认方法...

    JAVA1.5新特性

    JAVA 1.5的新特性是Java发展史上的一个重要里程碑,这一版本引入了一系列创新特性,旨在提升编程效率、增强代码安全性并简化开发流程。以下是对JAVA 1.5新特性的详细解析: ### 1. 泛型 (Generics) #### 概述 泛型...

    java8新特性-最新

    在Java 8中,最重要的两个新特性无疑是Lambda表达式和Stream API。这两个特性都与函数式编程思想密切相关,让Java开发者能够更加灵活地处理数据。 ### Lambda表达式 Lambda表达式是Java 8中最显著的新特性之一,它...

    java8新特性

    5. **日期与时间API(java.time)**:取代了原来的`java.util.Date`和`Calendar`,新的日期时间API提供了更加方便和直观的方式来处理日期和时间。`LocalDate`、`LocalTime`和`LocalDateTime`是其中的主要类。 6. **...

    【计算机专业文献翻译】在 JDK 早期版本中使用 Java 5 的语言特性.pdf

    总之,尽管Java 5的特性在当前看来可能并不新鲜,但考虑到许多企业仍使用旧版本的JDK,理解如何在这些环境中利用Java 5的新特性仍然是有价值的。通过巧妙的编码技巧和策略,开发者可以在不影响现有用户的同时,享受...

    JAVA8新特性讲解

    以下是关于Java 8新特性的详细讲解: 1. **函数式编程:Lambda表达式** Lambda表达式是Java 8中最显著的新特性,它允许我们将函数作为一个方法参数,或者以匿名函数的形式创建。Lambda表达式简洁且易于理解,使得...

    java7新特性与java高级编程

    Java 7是Java编程语言的一个重大更新,发布于2011年,它引入了许多新的特性和改进,旨在提升开发者的效率和代码的可读性。在这个主题中,我们将深入探讨Java 7的新特性以及Java的高级编程概念。 **1. 多线程并行流...

    删减版Java新特性(剖析Java8以来的新特性).pdf

    自 Java 8 发布后,Java 有了许多显著的新特性,极大地提升了开发效率和代码质量。以下是对 Java 8 及之后版本主要新特性的深入剖析: 1. **Lambda 表达式**: Java 8 引入了 Lambda 表达式,使得函数式编程成为...

Global site tag (gtag.js) - Google Analytics