1. 二进制字面量
二进制字面量也就是可以在java代码中通过二进制的形式来表示,用0b开头
例如:在控制台打印出6
public static void test1(){
System.out.println(0b110);
}
2. 数字字面量可以出现下划线
我们通常表示比较大的数值的时候,会三位为一组,用逗号隔开,但是在java中不能这样做,在jdk1.7之后,可以用下划线来代替逗号分隔
例如:打印100万
public static void test2(){
System.out.println(100_0000);
}
注意:java处理之后打印出来的数据是没有下划线的。
3. switch语句可以用字符串
public static void test3(String name){
switch (name) {
case "张三":
System.out.println("我是张三");
break;
case "李四":
System.out.println("我是李四");
break;
default:
System.out.println("我就是我,我谁也不是");
break;
}
}
4. 泛型简化、菱形泛型
在JDK7之前,声明泛型对象的代码如下:
List<String> list = new ArrayList<String>();
而在JDK7中,可以使用如下代码:
List<String> list = new ArrayList<>();
因为编译器可以从前面(List)推断出推断出类型参数,所以后面的ArrayList之后可以不用写泛型参数,只用一对空着的尖括号就可以。Java 7 只支持有限的类型推断:只有构造器的参数化类型在上下文中被显著的声明了,才可以使用类型推断,否则不行,例如:
List<String> list = new ArrayList<>();
list.add("A");
list.addAll(new ArrayList<>()); //这样声明不合法
List<? extends String> list2 = new ArrayList<>(); //这样声明合法
list.addAll(list2);
5. 异常多个合并,每个异常用或|
try{
...
}catch(异常名1 | 异常名2 | ... 变量 ) {
...
}
注意:这个方法虽然简洁,但是也不够好。
A:处理方式是一致的。(实际开发中,好多时候可能就是针对同类型的问题,给出同一个处理)
B:多个异常间必须是平级关系。
例如:
try {
System.out.println(a / b);
System.out.println(arr[3]);
} catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
System.out.println("出问题了");
}
6. try-with-resources语句
JDK7提供的自动关闭资源的功能为管理资源(如文件流、数据库连接等)提供了一种更加简便的方式。这种功能是通过一种新的try语句实现的,叫try-with-resources,有时称为自动资源管理。try-with-resources的主要好处是可以避免在资源(如文件流)不需要的时候忘记将其关闭。
语法:
try(resource-specification) {
// 使用资源
}
这里,resources-specification是声明并初始化资源(如文件)的语句,包含变量声明,用被管理对象的引用初始化该变量。这里可以创建多个资源,用分好分隔即可。当try块结束时,资源会自动释放。如果是文件,文件将被关闭,因此不需要显式调用close方法。try-with-resources语句也可以不包含catch语句和finally语句。
注意:
并非所有的资源都可以自动关闭。只有实现了java.lang.AutoCloseable接口的那些资源才可以自动关闭。该接口是JDK7新增的,定义了close方法。java.io.Closeable接口继承了AutoCloseable接口。这两个接口被所有的流类实现,包括FileInputStream和FileOutputStream。因此,在使用流(文件流)时,可以使用try-with-resources语句。
public static void startTest() {
try (MyAutoCloseA a = new MyAutoCloseA();
MyAutoCloseB b = new MyAutoCloseB()) {
a.test();
b.test();
} catch (Exception e) {
System.out.println("Main: exception");
System.out.println(e.getMessage());
Throwable[] suppressed = e.getSuppressed();
for (int i = 0; i < suppressed.length; i++)
System.out.println(suppressed[i].getMessage());
}
}
对文件的操作
public void test2() throws IOException {
String filepath = "D:\\gui-config.json";
try (
FileReader fileReader = new FileReader(filepath);
BufferedReader br = new BufferedReader(fileReader)
) {
String curline = null;
while ((curline = br.readLine()) != null) {
System.out.println(curline);
}
}
}
7. Path 与 Paths
java.nio.file.Path接口代表一个平台无关的平台路径,描述了目录结构中文件的位置。Paths提供的get()方法用来获取Path对象.
Path get(String first,String ... more):用于将多个字符串串联成路径
Path常用方法:
方法 | 描述 |
Boolean endsWith(String path) | 判断是否以path路径结束 |
boolean startWith(String path) | 判断是否以path路径开始 |
boolean isAbsolute() | 判断是否是绝对路径 |
Path getFileName() | 返回与调用Path对象关联的文件名 |
Path getName(int idx) | 返回的指定索引位置idx的路径名称 |
int getNameCount() | 返回Path根目录后面元素的数量 |
Path getParent() | 返回Path对象包含整个路径,不包含Path对象指定的文件路径 |
Path getRoot() | 返回调用Path对象的根路径 |
Path resolve(Path p) | 将相对路径解析为绝对路径 |
Path toAbsolutePath() | 作为绝对路径返回调用Path对象 |
String toString() | 返回调用Path对象的字符串表示形式 |
8. Files类
java.nio.file.Files用于操作文件或目录的工具类。常用方法有:
1)用于文件操作的方法
方法 | 描述 |
Path copy(Path src,Path dest,CopyOption ... how) | 文件复制 |
Path createDirectory(Path path,FileAttribute<?> ... attr) | 创建一个目录 |
Path createFile(Path path,FileAttribute<?> ... arr) | 创建一个为路径 |
void delete(Path path) | 删除一个文件 |
Path move(Path src,Path dest,CopyOption ... how) | 将src移动到destory位置 |
long size(Path path) | 返回path指定文件的大小 |
2)用于判断
方法 | 描述 |
boolean exists(Path path,LinkOption ... opts) | 判断文件是否存在 |
boolean isDirectory(Path path,LinkOption ... opts) | 判断是否是目录 |
boolean isExecutable(Path path) | 判断是否是可执行文件 |
boolean isHidden(Path path) | 判断是否是隐藏文件 |
boolean isReadable(Path path) | 判断文件是都可读 |
boolean isWritable(Path path) | 判断文件是否可写 |
boolean notWxists(Path path,LinkOption ... opts) | 判断文件是否不存在 |
public static<A extends BasicFileAttributes> A readAttributes(Path path,Class<A> type,LinkOption ... option) | 获取与path指定的文件相关联的属性 |
3)用于操作内容
方法 | 描述 |
SeekableByteChannel newByteChannel(Path path,OpenOption ... how) | 获取与指定文件的连接,how指定打开方式 |
DirectoryStream newDirectoryStream(Path path) | 打开Path指定的目录 |
Inputstream newInputStream(Path path,OpenOption ... how) | 获取InputStream对象 |
OutStream newOutputStream(Path path,OpenOption ... how) | 获取OutputStream对象 |