作者:拔剑少年
简书地址:https://www.jianshu.com/u/dad4d9675892博客地址:https://it18monkey.github.io转载请注明出处
泛型 (Generics)
List<Integer> list=new ArrayList<Integer>();增强循环(Enhanced for Loop)
int[] array = {1, 2, 3, 4, 5}; for (int i : array) { System.out.println(i); }自动封箱拆箱(Autoboxing/Unboxing )。八大基本类型和它们的包装类能够自动的相互转换。
枚举(Typesafe Enums)。
ps:枚举是一种实现线程安全的单例模式的好方式。
enum TestEnum{ one, two; TestEnum() { } }可变参数 (Varargs)
语法:(type... arguments)
可变参数本质仍然是用一个数组存储参数,只是java隐藏了这一过程。需要注意的是如果一个方法声明中含有可变参数,那必须放在最后一个位置。
/** * 可变参数测试 * * @param args */ public static void testVarargs(String... args) { //本质就是个数组 System.out.println(args[1]); for (String arg : args) { System.out.println(arg); } }静态导入(Static Import)。通过import类来使用类里的静态变量或方法(直接通过名字,不需要加上类名.),简化了代码的书写。
//单个导入 import static java.lang.Math.PI; //批量导入 import static java.lang.Math.*;ps:过去的版本中只能通过继承类或实现接口才能使用。
注解(Annotations)。关键字@interface。
//注释注解的注解又叫做元注解 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyAnnotations { //注解内可以添加方法,也可以不添加 //注解方法的返回值只能是基本类型,String,Class类,枚举,注解,可以有默认值。 int id(); String name() default "whh"; Class classType(); TestEnum enumType(); }新的线程模型和并发库(java.util.concurrent)。
二进制前缀0b或者0B。整型(byte, short, int, long)可以直接用二进制表示。
//二进制字面值前缀0b 或0B int i = 0b010;//10进制值为2 int j = 0B010;字面常量数字的下划线。用下划线连接整数提升其可读性,自身无含义,不可用在数字的起始和末尾。
//数字间的下划线不影响实际值 int k = 1_1;//值为11 switch 支持String类型。泛型实例化类型自动推断。
Map<String, List<String>> myMap = new HashMap<String, List<String>>(); // 之前 Map<String, List<String>> myMap = new HashMap<>(); // 现在try-with-resources语句。
/* * 声明在try括号中的对象称为资源,在方法执行完毕后会被自动关闭,相对与之前必须在finally关闭资源,这一特性大大提高了代码的简洁性。 * 所有实现java.lang.AutoCloseable接口的类都作为资源被自动关闭。 */ try (BufferedReader reader=new BufferedReader(new FileReader("d:1.txt"))){ return reader.readLine(); } 单个catch中捕获多个异常类型(用| 分割)并通过改进的类型检查重新抛出异常。局部变量类型推断(Local-Variable Type Inference)
//之前的代码格式 URL url = new URL("http://www.oracle.com/"); URLConnection conn = url.openConnection(); Reader reader = new BufferedReader( new InputStreamReader(conn.getInputStream())) //java10中用var来声明变量 var url = new URL("http://www.oracle.com/"); var conn = url.openConnection(); var reader = new BufferedReader( new InputStreamReader(conn.getInputStream()));var是一个保留类型名称,而不是关键字。所以之前使用var作为变量、方法名、包名的都没问题,但是如果作为类或接口名,那么这个类和接口就必须重命名了。
var的使用场景主要有以下四种:
本地变量初始化。增强for循环中。传统for循环中声明的索引变量。Try-with-resources 变量。Optional类添加了新的方法orElseThrow(无参数版)。相比于已经存在的get方法,这个方法更推荐使用。
转载于:https://www.cnblogs.com/ffaiss/p/11460540.html