- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章详解Java5、Java6、Java7的新特性由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
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都可以被打印:
代码:
1
2
3
4
5
|
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) 。
参数类型相同时,把重载函数合并到一起了。 如:
1
2
3
4
5
|
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可以使用在任意程序单元上 。
代码 。
1
2
3
4
5
6
7
8
9
|
@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 。
代码 。
1
2
3
4
5
6
|
@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对象验证 。
代码 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@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中可以使用字串了 。
1
2
3
4
5
6
7
8
9
10
11
|
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.新增一些取环境信息的工具方法 。
1
2
3
4
|
File System.getJavaIoTempDir()
// IO临时文件夹
File System.getJavaHomeDir()
// JRE的安装目录
File System.getUserHomeDir()
// 当前用户目录
File System.getUserDir()
// 启动java进程时所在的目录5
|
5.Boolean类型反转,空指针安全,参与位运算 。
1
2
3
4
5
6
7
8
|
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.安全的加减乘除 。
1
2
3
4
5
6
7
8
9
10
11
12
|
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},
希望本篇文章可以帮到需要的朋友 。
原文链接:http://www.2cto.com/kf/201601/486936.html 。
最后此篇关于详解Java5、Java6、Java7的新特性的文章就讲到这里了,如果你想了解更多关于详解Java5、Java6、Java7的新特性的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
目录 C#特性 1. 概括 2. 语法 定义特性类 应用特性
是否有关于 Python 语言必须提供哪些功能的文章/论文?为什么应该使用 Python 而不是任何其他语言? Python 的优点和缺点是什么? 最佳答案 Why Python和 Why Pytho
我想弄清楚为什么 .x比*.x具有更高的特异性当后者有望获胜时。 不是*.x应该具有 0-0-1-1 的特异性(1 个类,1 个标签)而 .x只是一个类(class) 0-0-1-0 ? 考虑以下基本
在尝试评估非 instanceof 条件时,我发现了我在 Groovy 2.4.7、1.6.0 JVM 中没有预料到的行为。 总之: class Foo { static Boolean
当使用可变结构和属性时,编译器可以解决一些问题,但不能对其他相当明显的事情做同样的事情,这对我来说似乎很奇怪。 以下面的自动属性为例: Vector2 Vector { get; set; } 而不是
我对 ES3 有一定的了解,但我对 ES5 的特性不是很了解。我 - 或多或少 - 知道: Object.create(), Object.freeze() “使用严格” getter 和 sette
我最近开始将 Django 1.5.4 用于带有 MySQL 后端的 Web 应用程序。就在一开始,我遇到了某些限制,这让我想知道 Django 是否是继续前进的正确方法。 一些明显的缺点是: 缺少复
在函数模板的定义中,模板参数的实例化一般是未知的。类型特征可用于在编译时获取一些信息。例如,这是 is_pointer 的一个简单应用: template void foo(T p) { cout
我正在设计页面的样式,该页面具有除最后一个框外的带底部边框的连续框。我为所有框应用类 .box 并添加 .box_last 以仅隐藏最后一个框的边框。 .box { border-bottom-s
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我有兴趣编制一份不建议在嵌入式系统中使用的 c++ 功能列表(这可能会导致人们推荐使用 c 而不是 c++)。如果您知道,请尝试添加原因,或者将您的原因添加到其他人的答案中。 这是一个开始(我知道的唯
作为一名 Ruby 程序员,您是否曾觉得任何使用起来有点冒险的功能,可能是因为它的奇怪行为?它可能有很好的文档记录,但在调试时很难找到,或者难以记住? 我通常尽量远离 String#gsub!。文档说
我正在开发一个连接到健身 watch 的蓝牙应用程序。这是我第一次使用蓝牙。我设法使用出色的 FlutterBlue 将我的应用程序与设备连接起来图书馆。 但是我无法理解我从阅读中获得的结果。这是我阅
1. 迭代器(Iterator)的介绍 背景:指针可以用来遍历存储空间连续的数据结构,但是对于存储空间费连续的,就需要寻找一个行为类似指针的类,来对非数组的数据结构进行遍历。 定义:迭代器是一种检
嗨,伙计们,有没有动态更改 Spring 属性文件内容的好例子?如果您能给我一些示例或链接,我将不胜感激。 非常感谢 最佳答案 我想你可以使用 ReloadableResourceBundleMess
SystemVerilog 引入了一些非常有用的结构来改进编码风格。然而,正如我的一位同事经常说的,“你不是在写软件,你是在描述硬件。”考虑到这一点,当最终结果需要合成时,应该避免语言的哪些特征?这个
我定义了这些测试依赖项 / Test Dependencies lazy val wiremock = "com.github.tomakehurst" % "wir
我正在为 Android 手机和 Android watch (wearOS) 编写应用程序。这些应用程序将通过蓝牙相互通信。基本上,Android 手机上的应用程序将与 WearOS 设备绑定(bi
我正在为 Android 手机和 Android watch (wearOS) 编写应用程序。这些应用程序将通过蓝牙相互通信。基本上,Android 手机上的应用程序将与 WearOS 设备绑定(bi
我有兴趣提高我的设计能力(设计具有属性、方法等的类)。即如何决定类、方法和属性应该是什么? 你们能建议我改进这个的好 Material 吗? 最佳答案 请看: Any source of good o
我是一名优秀的程序员,十分优秀!