Java [ 基础 ] Java 8以上新特性 ✨

✨探索Java基础 Java 8以上新特性✨

Java 8 及以上的新特性

Java 8 引入了一些重大更新和新特性,这些特性极大地增强了Java的功能和性能。随着Java 9、10、11、12及以后的版本发布,Java持续引入更多的改进和新功能。本文将介绍Java 8及以上版本的一些关键新特性。

Java 8 新特性

1. Lambda 表达式

Lambda表达式提供了一种更简洁的方式来表示单方法接口(即函数式接口)的实现。

示例代码:

import java.util.Arrays;
import java.util.List;

public class LambdaExample {
    
    
    public static void main(String[] args) {
    
    
        List<String> names = Arrays.asList("John", "Jane", "Jack");
        // 使用Lambda表达式打印每个名字
        names.forEach(name -> System.out.println(name));
    }
}
2. 函数式接口

函数式接口是只包含一个抽象方法的接口,可以使用Lambda表达式来创建其实例。

示例代码:

@FunctionalInterface
interface Greeting {
    
    
    void sayHello(String name);
}

public class FunctionalInterfaceExample {
    
    
    public static void main(String[] args) {
    
    
        // 使用Lambda表达式实现函数式接口
        Greeting greeting = (name) -> System.out.println("Hello, " + name);
        greeting.sayHello("John");
    }
}
3. Stream API

Stream API 提供了一种高效且易于使用的方式来处理集合数据,可以执行过滤、排序、映射等操作。

示例代码:

import java.util.Arrays;
import java.util.List;

public class StreamExample {
    
    
    public static void main(String[] args) {
    
    
        List<String> names = Arrays.asList("John", "Jane", "Jack");
        // 使用Stream过滤以J开头的名字并打印
        names.stream()
             .filter(name -> name.startsWith("J"))
             .forEach(System.out::println);
    }
}
4. 默认方法和静态方法

接口可以包含默认方法和静态方法,默认方法允许在不破坏现有实现的情况下向接口添加新方法。

示例代码:

interface MyInterface {
    
    
    // 默认方法
    default void defaultMethod() {
    
    
        System.out.println("默认方法");
    }

    // 静态方法
    static void staticMethod() {
    
    
        System.out.println("静态方法");
    }
}

public class DefaultStaticMethodExample implements MyInterface {
    
    
    public static void main(String[] args) {
    
    
        DefaultStaticMethodExample example = new DefaultStaticMethodExample();
        // 调用默认方法
        example.defaultMethod();
        // 调用静态方法
        MyInterface.staticMethod();
    }
}
5. 新的日期时间API

Java 8 引入了新的日期和时间API,包括LocalDateLocalTimeLocalDateTime等类。

示例代码:

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;

public class DateTimeExample {
    
    
    public static void main(String[] args) {
    
    
        // 获取当前日期
        LocalDate date = LocalDate.now();
        System.out.println("当前日期: " + date);
        
        // 获取当前时间
        LocalTime time = LocalTime.now();
        System.out.println("当前时间: " + time);
        
        // 获取当前日期和时间
        LocalDateTime dateTime = LocalDateTime.now();
        System.out.println("当前日期和时间: " + dateTime);
    }
}

Java 9 新特性

1. 模块系统 (Project Jigsaw)

Java 9 引入了模块系统,使得开发者可以更好地组织和封装代码,提升了应用程序的可维护性和安全性。

示例代码:

// module-info.java
module com.example.module {
    
    
    requires java.base;
    exports com.example.module;
}
2. JShell

JShell 是Java 9 新增的交互式工具,允许开发者在没有编写完整类的情况下,快速测试代码片段。

示例代码:

jshell> System.out.println("Hello, JShell!");
Hello, JShell!

Java 10 新特性

1. 局部变量类型推断

Java 10 引入了var关键字,使得编译器可以自动推断局部变量的类型。

示例代码:

public class VarExample {
    
    
    public static void main(String[] args) {
    
    
        var message = "Hello, Java 10!";
        System.out.println(message);
    }
}

Java 11 新特性

1. 单文件程序执行

Java 11 允许直接运行单文件Java程序,无需编译步骤。

示例代码:

java HelloWorld.java
2. 新的字符串方法

Java 11 添加了一些新的字符串方法,如isBlank()lines()strip()等。

示例代码:

public class StringMethodsExample {
    
    
    public static void main(String[] args) {
    
    
        String str = "  ";
        System.out.println(str.isBlank()); // true
        
        String str2 = "Hello\nWorld";
        str2.lines().forEach(System.out::println);
        
        String str3 = "  hello  ";
        System.out.println(str3.strip()); // "hello"
    }
}

Java 12 新特性

1. Switch表达式 (预览功能)

Java 12 引入了增强的Switch表达式,使得Switch语句更简洁和强大。

示例代码:

public class SwitchExpressionExample {
    
    
    public static void main(String[] args) {
    
    
        int day = 2;
        String dayName = switch (day) {
    
    
            case 1 -> "Monday";
            case 2 -> "Tuesday";
            default -> "Invalid day";
        };
        System.out.println(dayName); // Tuesday
    }
}

面试题及解答

以下是一些关于Java 8及以上新特性的面试题及其解答。

面试题 1:什么是Lambda表达式,如何使用它?

解答: Lambda表达式是一种简洁的表示单方法接口(函数式接口)实现的方法。可以使用它来简化匿名内部类的代码。语法格式为 (参数列表) -> {方法体}

示例代码:

List<String> names = Arrays.asList("John", "Jane", "Jack");
names.forEach(name -> System.out.println(name));
面试题 2:什么是函数式接口?请举例说明。

解答: 函数式接口是只包含一个抽象方法的接口,可以用Lambda表达式来实现。使用@FunctionalInterface注解可以标记函数式接口。

示例代码:

@FunctionalInterface
interface Greeting {
    
    
    void sayHello(String name);
}
面试题 3:什么是Stream API,它有哪些常用操作?

解答: Stream API 是一种处理集合数据的高效工具。常用操作包括filtermapsortedforEach等。

示例代码:

List<String> names = Arrays.asList("John", "Jane", "Jack");
names.stream()
     .filter(name -> name.startsWith("J"))
     .forEach(System.out::println);
面试题 4:Java 8 引入了哪些新的日期时间类?请简单介绍。

解答: Java 8 引入了新的日期时间API,包括LocalDateLocalTimeLocalDateTime等类,用于更方便地处理日期和时间。

示例代码:

LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dateTime = LocalDateTime.now();
面试题 5:Java 10 引入了什么新的关键字?它有什么作用?

解答: Java 10 引入了var关键字,用于局部变量类型推断。编译器会自动推断变量的类型。

示例代码:

var message = "Hello, Java 10!";
System.out.println(message);

结论

本文介绍了Java 8 及以上版本引入的一些关键新特性。从Lambda表达式到模块系统,再到局部变量类型推断和增强的Switch表达式,每一个新特性都大大提升了Java的开发体验。

觉得有用的话可以点点赞 (/ω\),支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦 >人< 。

猜你喜欢

转载自blog.csdn.net/jgk666666/article/details/140252557