JDK18 기능


여기에 이미지 설명을 삽입하세요.

JAVA18 개요

Java 18은 2022년 3월 22일에 공식 출시되었습니다. Java 18은 장기 지원 버전이 아닙니다. 이번 업데이트에서는 총 9가지 새로운 기능이 제공됩니다.

공식 주소

이미지.png

1. 기본 UTF-8 문자 인코딩

JDK는 항상 UTF-8 문자 인코딩을 지원했지만 이번에는 UTF-8이 기본 인코딩으로 설정되었습니다. 즉, 인코딩이 필요한 모든 JDK API는 별도의 지정 없이 기본적으로 UTF-8 인코딩을 사용합니다. 이렇게 하면 코딩 문제로 인한 문제를 방지할 수 있습니다. 다른 시스템, 다른 지역, 다른 환경에 따라 다릅니다.

2. 간단한 웹 서버

JDK18에서 간단한 웹 서비스를 제공합니다. 즉, bin 디렉토리에 명령어가 제공된다 jwebserver. 정적 웹 서버를 시작하려면 이 명령을 실행하세요 简单的、最小的. CGI 및 서블릿을 지원하지 않으므로 테스트, 교육, 데모 및 기타 요구 사항에 가장 적합한 사용 시나리오입니다.

이미지.png

3.JavaDoc의 강화

Java 18에는 JavaDoc에 대한 새로운 개선 사항이 추가되었습니다. 이전 버전에서는 이미 JavaDoc에 코드 조각을 추가하는 기능을 제공했지만 강조 표시에 대한 지원은 제공하지 않았습니다. Java18에서 제공되는 기능

/**
 * JavaDoc特性讲解
 *  {@snippet :
 *      if(v.isPresent()){
 *          System.out.println("Hello ... ")
 *      }
 *  }
 */
public class Test01 {
    
    

    /**
     * 正则高亮:
     * {@snippet :
     *   public static void main(String... args) {
     *       for (var arg : args) {                 // @highlight region regex = "\barg\b"
     *           if (!arg.isBlank()) {
     *               System.out.println(arg);
     *           }
     *       }                                      // @end
     *      }
     *   }
     */
    public static void main(String[] args) {
    
    
        System.out.println(Charset.defaultCharset());
        System.out.println("波哥....");
    }

    /**
     * 两数求和:
     * {@snippet :
     *   public Integer add(int a,int b){
     *      System.out.println("add ..."); // @replace regex='".*"' replacement="..."
     *      return a + b;
     *   }
     * }
     */
    public Integer add(int a,int b){
    
    
        System.out.println("add ...");
        return a + b ;
    }
}

이미지.png

이미지.png

4. 반사 기능의 새로운 기능

Java 18은 java.lang.reflect.Method 및 생성자의 구현 논리를 개선하여 더 빠르고 더 나은 성능을 제공합니다. 이번 변경으로 관련 API는 변경되지 않습니다. 즉, 개발 중에 리플렉션 관련 코드를 변경하지 않고도 더 나은 리플렉션 성능을 경험할 수 있습니다.

OpenJDK는 신규 및 기존 구현의 반영 성능 벤치마크 결과를 공식적으로 제공합니다.

이미지.png

5.Vector API(3개의 인큐베이션)

벡터 계산을 위한 새로운 API가 Java 16에 도입되었습니다. 이 API는 런타임 시 지원되는 CPU 아키텍처로 안정적으로 컴파일되어 더 나은 컴퓨팅 기능을 달성할 수 있습니다. Java 17에서는 문자 연산, 바이트 벡터와 부울 배열 간 변환 등의 향상된 기능을 통해 벡터 API 성능이 향상되었습니다. 성능은 현재 JDK 18에서 계속 최적화될 예정입니다.

6. 인터넷 주소 확인 SPI

java.net.InetAddress플랫폼에 내장된 확인자 이외의 확인자를 사용할 수 있도록 호스트 이름 및 주소 확인을 위한 SPI(서비스 공급자 인터페이스)를 정의합니다 .

    public static void main(String[] args) throws Exception {
    
    
        InetAddress inetAddress = InetAddress.getByName("cart.msb.com");
        System.out.println(inetAddress.getHostAddress());
    }

7. 외부 기능 및 메모리 API(2차 인큐베이션)

새로운 API를 사용하면 Java 개발자는 JNI를 사용하지 않고도 외부 함수를 호출하고 기본 라이브러리를 호출하여 JVM 외부의 코드 및 데이터와 상호 작용할 수 있습니다.

이는 인큐베이션 기능으로, 자바 코드를 컴파일하고 실행하기 위해 추가해야 하는 기능으로 --add-modules jdk.incubator.foreign, 자바 18에서는 관련 API를 개선해 사용하기 쉽게 만들었다.

8.스위치 표현

Java 17부터 Switch에 대한 개선이 진행 중인데, Java 17의 JEP 406에서는 코드 양을 줄이기 위해 Switch 표현식을 강화했습니다.

다음은 몇 가지 예입니다.

// JDK 17 以前
static String formatter(Object o) {
    
    
    String formatted = "unknown";
    if (o instanceof Integer i) {
    
    
        formatted = String.format("int %d", i);
    } else if (o instanceof Long l) {
    
    
        formatted = String.format("long %d", l);
    } else if (o instanceof Double d) {
    
    
        formatted = String.format("double %f", d);
    } else if (o instanceof String s) {
    
    
        formatted = String.format("String %s", s);
    }
    return formatted;
}

Java 17 이후에는 다음과 같은 작성 방법으로 개선이 가능합니다.

// JDK 17 之后
static String formatterPatternSwitch(Object o) {
    
    
    return switch (o) {
    
    
        case Integer i -> String.format("int %d", i);
        case Long l    -> String.format("long %d", l);
        case Double d  -> String.format("double %f", d);
        case String s  -> String.format("String %s", s);
        default        -> o.toString();
    };
}

스위치는 다음과 결합될 수 있습니다 null:

static void testFooBar(String s) {
    
    
    switch (s) {
    
    
        case null         -> System.out.println("Oops");
        case "Foo", "Bar" -> System.out.println("Great");
        default           -> System.out.println("Ok");
    }
}

다음과 같은 경우에 복잡한 표현식을 추가할 수 있습니다.

static void testTriangle(Shape s) {
    
    
    switch (s) {
    
    
        case Triangle t && (t.calculateArea() > 100) ->
            System.out.println("Large triangle");
        default ->
            System.out.println("A shape, possibly a small triangle");
    }
}

다음과 같은 경우 유형 판단을 수행할 수 있습니다.

sealed interface S permits A, B, C {
    
    }
final class A implements S {
    
    }
final class B implements S {
    
    }
record C(int i) implements S {
    
    }  // Implicitly final

static int testSealedExhaustive(S s) {
    
    
    return switch (s) {
    
    
        case A a -> 1;
        case B b -> 2;
        case C c -> 3;
    };
}

Supongo que te gusta

Origin blog.csdn.net/qq_28314431/article/details/132950697
Recomendado
Clasificación