JDK7在语法上的几处小变化
更新时间:2023-07-24 02:22:01 阅读量: 实用文档 文档下载
- jdk7和8的区别推荐度:
- 相关推荐
JDK7在语法上的几处小变化
JDK7在语法上的几处小变化
1,菱形语法(泛型实例化类型自动推断)
List<String> list = new ArrayList<>(); // 这个左右尖括号真的很像菱形
2,在目前版本中,不可具体化的泛型(任意类型)可变参数,在编译时,会在调用处产生警告,JDK7里将这个警告挪到了方法定义处。
变化前:
static <T> List<T> asList(T... elements) { ... }
static List<Callable<String>> stringFactories() {
Callable<String> a, b, c;
...
// 警告处
return asList(a, b, c);
}
变化后:
// 警告处
static <T> List<T> asList(T... elements) { ... }
static List<Callable<String>> stringFactories() {
Callable<String> a, b, c;
...
return asList(a, b, c);
}
3,字符串终于可以 switch 啦。
String s = ...
switch(s) {
case "quux":
processQuux(s); //没有break,继续往下
case "foo":
case "bar":
processFooOrBar(s);
break;
case "baz":
processBaz(s); //没有break,继续往下
default:
processDefault(s);
break;
}
4,支持二进制语法和单位级别的数字表示方式。
// 8位byte
byte aByte = (byte)0b00100001;
// 16位short
short aShort = (short)0b1010000101000101;
// 32位int
int anInt1 = 0b10100001010001011010000101000101;
支持单位级别的数字,提高可读性
long underScores = 9_223_372_036_854_775_807L; // 每三位加一下划线,等同于 9,223,372,036,854,775,807
5,从语法层面上支持集合,不再是数组的专利。
final List<Integer> piDigits = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9];
final Set<Integer> primes = { 2, 7, 31, 127, 8191, 131071, 524287 };
final Map<Integer, String> platonicSolids = { 4 : "tetrahedron",
6 : "cube", 8 : "octahedron", 12 : "dodecahedron", 20 : "icosahedron"
};
6,JSR 292 动态类型语言支持。
Dynamic x = (动态语言脚本);
Object y = x.foo("ABC").bar(42).baz();
7,动态资源管理。
在目前版本的java中,当你操作流时,一定会加try..finally以保证出现异常时,流能被正确关闭。
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
br.close();
}
在JDK7里,你只需要将资源定义在try()里,Java7就会在readLine抛异常时,自动关闭资源。
另外,资源类必须实现 Disposable 接口。支持管理多个资源。
try (BufferedReader br = new BufferedReader(new FileReader(path)) {
return br.readLine();
}
JDK7新增的工具方法列表
在开源java工具包里,最有名的当属apache commons。其中,以commons lang包
最为开发者熟知。
但是它作为第三方包存在,或多或少给开发者带来一些不便利。
面包牛奶总是会有的,从java7开始,lang包中的一些优秀工具方法,将被正式引入JDK。
下面是各个已确定被引入的工具类或方法说明。
1, 新增类 java.util.Objects (JDK对
JDK7在语法上的几处小变化
工具类的命名一向是以s结尾,例如Collections, Arrays)
A, 空指针安全的 equals, hashCode, toString, defaultNull 方法。
即入参传入NULL,工具方法不会抛空指针异常。
调用方法举例:
Boolean result = Objects.equals(obj1, obj2);
B, 比较对象的大小(需要实现Comparable)。
T Objects.max(T comparable1, T comparable2)
T Objects.min(T comparable1, T comparable2)
2, 系统工具类新增一些取环境信息的工具方法。 (ng.System)
以往,你需要通过 System.getProperties(“user.dir”) 这样来取。现在只需要调用一下工具方法就可以了。
File System.getJavaIoTempDir() // IO临时文件夹
File System.getJavaHomeDir() // JRE的安装目录
File System.getUserHomeDir() // 当前用户目录
File System.getUserDir() // 启动java进程时所在的目录
3, 包装类型安全转换到原始类型的工具方法。
boolean Boolean.booleanValue(Boolean obj, boolean defaultValue)
char Character.charValue(Character obj, char defaultValue)
byte Byte.byteValue(Byte obj)
byte Byte.byteValue(Byte obj, byte defaultValue)
short Short.shortValue(Short obj)
short Short.shortValue(Short obj, short defaultValue)
int Integer.intValue(Integer obj)
int Integer.intValue(Integer obj, int defaultValue)
long Long.longValue(Long obj)
long Long.longValue(Long obj, long defaultValue)
float Float.floatValue(Float obj)
float Float.floatValue(Float obj, float defaultValue)
double Double.doubleValue(Double obj)
double Double.doubleValue(Double obj, double defaultValue)
4, 针对包装类型的Boolean,提供了更具可读性和空指针安全的工具方法。
boolean Booleans.isTrue(Boolean booleanObj)
boolean Booleans.isFalse(Boolean booleanObj)
boolean Booleans.isNotTrue(Boolean booleanObj)
boolean Booleans.isNotFalse(Boolean booleanObj)
5, Boolean类型反转,空指针安全
Boolean Booleans.negate(Boolean booleanObj)
True => False , False => True, Null => Null
6, Boolean参与位运算
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)
7, 两个char间的equals
boolean Character.equalsIgnoreCase(char ch1, char ch2)
8, 声明一批空数组常量,各种类型
Boolean[] Boolean.EMPTY_ARRAY
boolean[] Boolean.EMPTY_PRIMITIVE_ARRAY
Character[] Character.EMPTY_ARRAY
char[] Character.EMPTY_PRIMITIVE_ARRAY
Byte[] Byte.EMPTY_ARRAY
byte[] Byte.EMPTY_PRIMITIVE_ARRAY
Short[] Short.EMPTY_ARRAY
short[] Short.EMPTY_PRIMITIVE_ARRAY
Integer[] Integer.EMPTY_ARRAY
int[] Integer.EMPTY_PRIMITIVE_ARRAY
Long[] Long.EMPTY_ARRAY
long[] Long.EMPTY_PRIMITIVE_ARRAY
Float[] Float.EMPTY_ARRAY
float[] Float.EMPTY_PRIMITIVE_ARRAY
Double[] Double.EMPTY_ARRAY
double[] Double.EMPTY_PRIMITIVE_ARRAY
String[] String.EMPTY_ARRAY
Class[] Class.EMPTY_ARRAY
Object[] Objects.E
JDK7在语法上的几处小变化
MPTY_OBJECT_ARRAY
甚至通过Class类型来取空数组。
Boolean.class.emptyArray();
9, 数组长度判定工具类,空指针安全
boolean Arrays.isEmpty(Object[] array)
int Arrays.size(Object[] array)
10, 集合长度判定工具类,空指针安全
boolean Collections.isEmpty(Collection coll)
int Collections.size(Collection coll)
boolean Collections.isEmpty(Map map)
int Collections.size(Map map)
11, 空指针安全的ClassName获取
String Class.getName(Class cls)
String Class.getSimpleName(Class cls)
String Class.getPackageName(Class cls)
12, 可以直接解析locale信息字符串的工具方法
Locale parse(String localeStr)
13, 提供根据语言取国家列表或根据国家取语言列表的工具方法
List Locale.countriesByLanguage(String langaugeStr)
List nguagesByCountry(String countryStr)
14, 安全的加减乘除
int Math.safeToInt(long value)
int Math.safeNegate(int value)
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)
long Math.safeSubtract(long value1, int value2)
long Math.safeSubtract(long value1, long value2)
int Ma
th.safeMultiply(int value1, int value2)
long Math.safeMultiply(long value1, int value2)
long Math.safeMultiply(long value1, long value2)
正在阅读:
JDK7在语法上的几处小变化07-24
2009年浙江高考理科综合试题版01-03
人教版四年级数学第二学期期末检测(2)04-23
2015届《步步高》高考生物复习资料考能排查练(四)03-08
数字信号处理实验指导书思考题答案实验图01-11
中国近代史发展线索06-09
CAD2010激活步骤(必看)08-05
建设工程安全生产技术复习题(第二版)10-21
PEST模型简介09-16
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 法上
- 变化
- JDK7
- 信用卡申请人声明
- 翠林山庄2013年社区规划
- 橡胶与金属骨架粘合失效原因分析及解决方法探讨
- 供热工程-第八章 热水供热系统的供热调节
- 数字电子技术基础试卷及答案正确修改版
- 小学标准化评估细则
- 2014八年级下册物理总复习
- 四年级英语上学期期末学业水平测试
- CISP真题及参考答案
- 聚烯烃弹性体的流变性能
- 中国药科大学 人体解剖生理学
- 配套文件6 福建农林大学关于专业技术职务聘任申报材料的规定(试行)
- 家族家谱会议上的讲话稿
- 人教版小学四年级数学下册易错题
- 多普勒效应实验数据处理
- 初二数学竞赛训练题
- 外研五年级英语下册Module8测试题
- 水质工程学总复习
- 基于系统动力学的医院系统集成平台建设分析
- 重点名校高考作文备考--议论文结构模式:六段式(精校完美打印版)