详解Java5、Java6、Java7的新特性

发布时间 - 2026-01-11 00:40:04    点击率:

Java5:

1、泛型 Generics:

引用泛型之后,允许指定集合里元素的类型,免去了强制类型转换,并且能在编译时刻进行类型检查的好处。Parameterized Type作为参数和返回值,Generic是vararg、annotation、enumeration、collection的基石。

A、类型安全

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

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

抛弃List、Map,使用List、Map

C、不需要类型转换

List list=new ArrayList();
String str=list.get(i);

D、类型通配符“?”

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

代码:

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、Iterator限制一下它。

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可以使用在任意程序单元上

代码

 @Target({ElementType.ANNOTATION_TYPE, 
       ElementType.CONSTRUCTOR, 
       ElementType.FIELD, 
       ElementType.LOCAL_VARIABLE, 
       ElementType.METHOD, 
       ElementType.PACKAGE, 
       ElementType.PARAMETER, 
       ElementType.TYPE}) 
  public @interface TODO {} 

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... 

Java6:

1、引入了一个支持脚本引擎的新框架

2、UI的增强

3、对WebService支持的增强(JAX-WS2.0和JAXB2.0)

4、一系列新的安全相关的增强

5、JDBC4.0

6、Compiler API

7、通用的Annotations支持

 Java7:

1,switch中可以使用字串了

String s = "test"; 
switch (s) { 
case "test" : 
System.out.println("test"); 
case "test1" : 
System.out.println("test1"); 
break ; 
default : 
System.out.println("break"); 
break ; 
}

2.运用List tempList = new ArrayList<>(); 即泛型实例化类型自动推断

3.语法上支持集合,而不一定是数组

final List piDigits = [ 1,2,3,4,5,8 ];

4.新增一些取环境信息的工具方法

File System.getJavaIoTempDir() // IO临时文件夹
File System.getJavaHomeDir() // JRE的安装目录
File System.getUserHomeDir() // 当前用户目录
File System.getUserDir() // 启动java进程时所在的目录5

5.Boolean类型反转,空指针安全,参与位运算

Boolean Booleans.negate(Boolean booleanObj)
True => False , False => True, Null => Null
boolean Booleans.and(boolean[] array)
boolean Booleans.or(boolean[] array)
boolean Booleans.xor(boolean[] array)
boolean Booleans.and(Boolean[] array)
boolean Booleans.or(Boolean[] array)
boolean Booleans.xor(Boolean[] array)

6.两个char间的equals

boolean Character.equalsIgnoreCase(char ch1, char ch2)

7.安全的加减乘除

int Math.safeToInt(long value)
int Math.safeNegate(int value)
long Math.safeSubtract(long value1, int value2)
long Math.safeSubtract(long value1, long value2)
int Math.safeMultiply(int value1, int value2)
long Math.safeMultiply(long value1, int value2)
long Math.safeMultiply(long value1, long value2)
long Math.safeNegate(long value)
int Math.safeAdd(int value1, int value2)
long Math.safeAdd(long value1, int value2)
long Math.safeAdd(long value1, long value2)
int Math.safeSubtract(int value1, int value2)

8.map集合支持并发请求,且可以写成 Map map = {name:"xxx",age:18};

希望本篇文章可以帮到需要的朋友


# 详解Java5、Java6、Java7的新特性  # Java5、6、7新特性  # Java7的新特性  # 在Java8与Java7中HashMap源码实现的对比  # 深入Java7的一些新特性以及对脚本语言支持API的介绍  # Java通过Fork/Join优化并行计算  # Java Fork/Join框架  # Java7之forkjoin简介_动力节点Java学院整理  # 来做  # 会在  # 自定义  # 可以使用  # 返回值  # 加减乘除  # 给你  # 去了  # 让我们  # 你要  # 子类  # 上了  # 不需要  # 替代者  # 它是  # 能在  # 我们可以  # 有许多  # 会让  # 三种 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 桂林网站制作公司有哪些,桂林马拉松怎么报名?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  如何快速选择适合个人网站的云服务器配置?  Laravel如何发送系统通知?(Notification渠道示例)  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Laravel怎么为数据库表字段添加索引以优化查询  如何在IIS7中新建站点?详细步骤解析  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  敲碗10年!Mac系列传将迎来「触控与联网」双革新  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  如何快速生成ASP一键建站模板并优化安全性?  JavaScript如何实现继承_有哪些常用方法  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  bootstrap日历插件datetimepicker使用方法  如何快速完成中国万网建站详细流程?  Swift中循环语句中的转移语句 break 和 continue  香港服务器选型指南:免备案配置与高效建站方案解析  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  如何实现建站之星域名转发设置?  Laravel storage目录权限问题_Laravel文件写入权限设置  如何用PHP快速搭建高效网站?分步指南  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Android实现代码画虚线边框背景效果  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  浅述节点的创建及常见功能的实现  晋江文学城电脑版官网 晋江文学城网页版直接进入  长沙企业网站制作哪家好,长沙水业集团官方网站?  Laravel如何实现API资源集合?(Resource Collection教程)  微信小程序 input输入框控件详解及实例(多种示例)  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  jQuery 常见小例汇总  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  如何自定义建站之星网站的导航菜单样式?  如何快速登录WAP自助建站平台?  C语言设计一个闪闪的圣诞树  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  Python高阶函数应用_函数作为参数说明【指导】  教学论文网站制作软件有哪些,写论文用什么软件 ?  使用spring连接及操作mongodb3.0实例  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工