自学Java23

78 阅读2分钟

引言

  • 在记录自己自学java过程中,首先声明关于学习顺序可能并不很科学,即使我也是通过一些公开的资料来进行学习,但不会是完全无基础的教学,更像是比对着python(本人平时编程使用的是python)比较实现方法的异同学习,请酌情参考学习,有理解不对的地方欢迎指正。

java-流程控制 3

switch多重选择(python中是没有该选择的)

"switch ->"

  • 上文介绍到在switch多重选择中不写break会有"穿透"效果
  • 但是Java 12开始,switch语句升级为更简洁的表达式语法,使用类似模式匹配(Pattern Matching)的方法,保证只有一种路径会被执行,并且不需要break语句:(注意这个功能我查阅资料后说是叫预览功能默认是关闭的,找到了所谓的开启指令但是不知道在哪里配置,但是用Java15可以直接运行没有问题)
    • 补:从Java 14开始,switch语句正式升级为表达式,不再需要break,并且允许使用yield返回值。
public class Main {
    public static void main(String[] args) {
        int option = 2;
        switch (option) {
        case 1 -> System.out.println("Selected 1");
        case 2 -> System.out.println("Selected 2");
        case 3 -> {
			System.out.println("Selected 3");
			System.out.println("test more reason");
		}
        default -> System.out.println("Not selected");
        }
    }
}

javac --enable-preview --release 13 Example.java
java --enable-preview Example
  • 注意:如果有多条语句,需要用{}括起来

    • 不要写break语句,因为新语法只会执行匹配的语句,没有穿透效应。
  • 我们还可能用switch语句给某个变量赋值(这个猛一看不咋地其实还是很好用的,尤其是Java中定义变量比较严谨),注意下面代码不能直接运行!!

int opt;
switch (fruit) {
case "apple":
    opt = 1;
    break;
case "pear":
case "mango":
    opt = 2;
    break;
default:
    opt = 0;
    break;
}
  • 或者使用更简洁的方法可以直接获取返回值
public class Main {
    public static void main(String[] args) {
        String fruit = "apple";
        int opt = switch (fruit) {
            case "apple" -> 1;
            case "pear", "mango" -> 2;
            default -> 0;
        }; // 注意赋值语句要以;结束
        System.out.println("opt = " + opt);
    }
}