List<Integer> list=new ArrayList<Integer>();
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() {
}
}
/**
* 可变参数测试
*
* @param args
*/
public static void testVarargs(String... args) {
//本质就是个数组
System.out.println(args[1]);
for (String arg : args) {
System.out.println(arg);
}
}
//单个导入
import static java.lang.Math.PI;
//批量导入
import static java.lang.Math.*;
ps:过去的版本中只能通过继承类或实现接口才能使用。
//注释注解的注解又叫做元注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotations {
//注解内可以添加方法,也可以不添加
//注解方法的返回值只能是基本类型,String,Class类,枚举,注解,可以有默认值。
int id();
String name() default "whh";
Class classType();
TestEnum enumType();
}
//以下为添加的新接口和类
Deque,BlockingDeque,NavigableSet,NavigableMap,ConcurrentNavigableMap,ArrayDeque, ConcurrentSkipListSet ,ConcurrentSkipListMap,ConcurrentSkipListMap ,AbstractMap.SimpleEntry ,AbstractMap.SimpleImmutableEntry
//二进制字面值前缀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括号中的对象称为资源,在方法执行完毕后会被自动关闭,相对与之前必须在finally关闭资源,这一特性大大提高了代码的简洁性。
* 所有实现java.lang.AutoCloseable接口的类都作为资源被自动关闭。
*/
try (BufferedReader reader=new BufferedReader(new FileReader("d:1.txt"))){
return reader.readLine();
}
java.util.concurrent.ConcurrentHashMap 类添加了新的方法以支持新的StreamApi和lambada表达式。
java.util.concurrent.atomic 包下新增了类以支持可伸缩可更新的变量。
java.util.concurrent.ForkJoinPool类新增了方法以支持 common pool。
新增了java.util.concurrent.locks.StampedLock类,为控制读/写访问提供了一个基于性能的锁,且有三种模式可供选择。
java模块系统 (Java Platform Module System)。
新的版本号格式。 M A J O R . MAJOR. MAJOR.MINOR. S E C U R I T Y . SECURITY. SECURITY.PATCH
java shell,交互式命令行控制台。
在private instance methods方法上可以使用@SafeVarargs注解。
diamond语法与匿名内部类结合使用。
下划线不能用在变量名中。
支持私有接口方法(您可以使用diamond语法与匿名内部类结合使用)。
Javadoc
//之前的代码格式
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的使用场景主要有以下四种: