Jdk8之后的新特性

1.jshell

(1) 简介

JShell(Java Shell)工具是 JDK1.9 出现的工具, JShell 是一个用于学习 Java 编程语言和 Java 代码原型的交互式工具。JShell 是交互式 REPL(Read-Evaluate-Print Loop,读取-求值-输出 循环)工具。它在输入时评估声明,语句和表达式,并立即显示结果。

JShell 可帮助您在开发程序时尝试代码并轻松探索选项。您可以测试单个语句,尝试不同的方法变体,并在 JShell 会话中试验不熟悉的API。JShell 不替换 IDE。在开发程序时,将代码粘贴到 JShell 中进行试用,然后将 JShell 中的工作代码粘贴到程序编辑器或 IDE 中。

(2) 常用jshell命令

  • 命令行中通过指令jshell,调取jshell工具

  • 常用指令

    指令描述
    /help获取有关使用jshell工具的信息
    /help introjshell工具的简介
    /list列出当前session里所有的有效片段
    /vars查看当前session下所有创建过的变量
    /methods查看当前session下所有创建过的方法
    /imports列出导入的包
    /history键入的内容的历史记录
    /edit使用外部编辑器来编写java代码
    /exit退出jshell工具

    代码演示:

    jshell> /list
    
       1 : int x = 8,y = 10;
       2 : int x = 8,y = 10;
       3 : System.out.println(x + y);
       4 : List<Integer> list = Arrays.asList(1,2,3,4,5,6,7);
       5 : int sum = list.stream().reduce(Integer :: sum).get();
       6 : int add(int x,int y) {
               return x + y;
           }
    
    jshell> /edit add
    
    jshell> /edit
    
    jshell> /vars
    |    int x = 8
    |    int y = 10
    |    List<Integer> list = [1, 2, 3, 4, 5, 6, 7]
    |    int sum = 28
    
    jshell> /imports
    |    import java.io.*
    |    import java.math.*
    |    import java.net.*
    |    import java.nio.file.*
    |    import java.util.*
    |    import java.util.concurrent.*
    |    import java.util.function.*
    |    import java.util.prefs.*
    |    import java.util.regex.*
    |    import java.util.stream.*
    

2.异常处理值try-catch资源关闭

(1) 介绍

JDK7的新特性

在try的后面可以增加一个(),在括号中可以声明流对象并初始化。try中的代码执行完毕,会自动把流对象释放,就不用写finally了。

格式:

try(资源对象的声明和初始化){
    业务逻辑代码,可能会产生异常
}catch(异常类型1 e){
    处理异常代码
}catch(异常类型2 e){
    处理异常代码
}

(2) 说明

  1. 在try()中声明的资源,无论是否方生异常,无论是否处理异常,都会自动关闭资源对象,不用手动关闭了。
  2. 这些资源实现类必须实现AutoCloseable或Closeable接口,实现其中的close()方法。Closeable是AutoCloseable的子接口。Java7几乎把所有的“资源类”(包括文件IO的各种类、JDBC编程的Connection、Statement等接口…)都进行了改写,改写后资源类都实现了AutoCloseable或Closeable接口,并实现了close()方法。

代码演示:

 @Test
    public void test1(){
        try(FileWriter fw = new FileWriter("test.txt");
            BufferedWriter bw = new BufferedWriter(fw);
        ){
            bw.write("I am good at Java computing!");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

3.var

(1)介绍

这是JDK10的新特性,用来声明一个已经知道类型的变量

例如:

@Test
    public void test1(){
        List<User> users = UserData.getUsers();
        for(var user : users){
            System.out.println(user);
        }
    }

(2) 不能用var的情况

  • 声明一个成员变量
  • 声明一个数组变量,并为数组静态初始化(省略new的情况下)
  • 方法的返回值类型
  • 方法的参数类型
  • 没有初始化的方法内的局部变量声明
  • 作为catch块中异常类型
  • Lambda表达式中函数式接口的类型
  • 方法引用中函数式接口的类型

4.Instanceof的模式匹配

在判断对象类型时,如果匹配,就将其转换成对应类型

例如:

public boolean equals(Object o) {
        if(o instanceof User u){    //这一句包括了强转: User u = (User)o;
            return u.getId() == this.getId() && u.getName() == this.getName();
        }
        return false;
    }

5.switch

  • 使用->可以代替break
  • 使用yield可以有返回值

代码演示:

 public static void main(String[] args){
        System.out.println("下");        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        char flag = switch (num){
            case 1 -> {
                yield '壹';
            }
            case 2 -> {
                yield '贰';
            }
            case 3 -> {
                yield '叁';
            }
            case 4 -> {
                yield '肆';
            }
            case 5 -> {
                yield '伍';
            }
            default -> {
                yield  '无';
            }
        };
        System.out.println(flag);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值