Java 17 이상의 새로운 기능
Java 17은 밀봉 클래스, 스위치 패턴 매칭 (미리보기), 애플릿 API 제거, 새로운 MACOS 렌더링 파이프 라인, 기본적으로 JDK 내부의 강력한 캡슐화 및 인큐베이터 이외의 기능 및 메모리 API와 같은 주요 기능을 도입했습니다. Java 17 이외에, 버전 18 ~ 22는 간단한 웹 서버 (인큐베이터), 가상 스레드 (Java 19, 21의 미리보기), 레코드 및 어레이 패턴 (Java 21의 미리보기), 이름없는 변수 및 패턴 (Java 21의 미리보기), 스코어 값 (Java 21의 미리보기) 및 String Templates (Java 22)를 추가했습니다. 앞으로 Project Loom, Panama, Valhalla 및 Amber는 동시성, 네이티브 상호 운용성, 성능 및 개발자 생산성 혁신을 주도하고 있으며 Java 21은 Java 17 이후 다음 LTS로, 더 단순하고 표현력이 뛰어나며 확장 가능한 언어의 빠른 진화를 나타냅니다.
2021 년 9 월에 발표 된 Java 17은 Java 11 이후 다음 장기 지원 (LTS) 버전으로 주요 이정표를 기록했습니다. 그 이후로 Java Ecosystem은 정기적 인 기능 릴리스 (2024 년 기준 Java 18 ~ 22)로 계속 발전하여 향후 혁신을위한 무대를 설정했습니다. Java 17의 새로운 기능과 그 이상으로 형성되는 것은 다음과 같습니다.

Java 17의 주요 기능
Java 17은 몇 가지 중요한 변화를 가져 왔으며, 그 중 다수는 안정된 이전 버전의 인큐베이터 또는 미리보기 기능이었습니다.
1. 봉인 된 클래스 (안정)
봉인 된 클래스를 사용하면 주어진 클래스 또는 인터페이스를 확장하거나 구현할 수있는 클래스를 제한 할 수 있습니다. 이것은 캡슐화를 향상시키고 도메인 모델을보다 예측 가능하게 만듭니다.

공개 밀봉 인터페이스 모양은 원, 사각형, 삼각형 {} 허가합니다. 공개 최종 클래스 서클은 모양 {}을 구현합니다. 공개 최종 클래스 사각형은 모양 {}을 구현합니다. 공개 비 밀봉 클래스 삼각형 구현 모양 {} // 추가 확장 허용
이것은 패턴 일치 및 모델링 대수 데이터 유형에 특히 유용합니다.
2. 스위치 용 패턴 매칭 (미리보기)
Java 17에서는 아직 안정적이지 않지만이 미리보기 기능은 switch
유형에 따라 객체를 해체 할 수 있도록합니다.

문자열 결과 = 스위치 (obj) { 케이스 정수 I-> "정수 :"i; CASE String S-> "String :"S; CASE NULL-> "NULL"; 기본 -> "알 수없는"; };
보일러 플레이트를 줄이고 가독성을 향상시킵니다.
3. 애플릿 API 제거
오랫동안 대출 된 애플릿 API가 제거되었습니다. 보안 및 브라우저 지원 문제로 인해 애플릿은 몇 년 동안 쓸모가 없었습니다.
4. 새로운 MACOS 렌더링 파이프 라인
Java 17은 MACOS 용 새로운 Apple Silicon 친화적 인 렌더링 파이프 라인을 소개하여 M1 및 이후 칩의 그래픽 성능을 향상 시켰습니다.
5. 기본적으로 JDK 내부를 강력하게 캡슐화합니다
--illegal-access=deny
기본값이되었습니다. 이것은 내부 JDK API ( sun.misc.Unsafe
와 같은)의 더 강력한 캡슐화를 시행하여 개발자가 적절한 대안을 사용하도록 강요합니다.
6. 외국 기능 및 메모리 API (인큐베이터)
인큐베이터 API로 도입 된 이는 JNI를 기본 코드 및 메모리와 상호 작용하는보다 안전하고 효율적인 방법으로 대체하는 것을 목표로합니다.
Java 17을 넘어 새로운 것 (Java 18 ~ 22)
Java 17 이후 6 개월의 릴리스주기는 혁신을 가속화했습니다. 다음은 최근 버전의 주목할만한 기능입니다.
Java 18 : 간단한 웹 서버 (인큐베이터)
JDK에 포함 된 가벼운 HTTP 서버로 프로토 타이핑 및 테스트에 유용합니다.
Jwebserver -P 8080
외부 의존성이 필요하지 않습니다 - 빠른 파일 공유 또는 휴식 엔드 포인트 테스트를위한 Great.
Java 19 & 21 : 가상 스레드 (미리보기 → 두 번째 미리보기 → 세 번째 미리보기)
프로젝트 직기의 일부인 가상 스레드는 OS가 아닌 JVM이 관리하는 경량 스레드입니다. 그들은 고 처리량 동시 응용 프로그램을 쉽게 확장 할 수 있도록합니다.
try (var executor = executors.newvirtualthreadperTaskexEcutor ()) { intstream.range (0, 10_000) .foreach (i-> { executor.submit (() -> { Thread.sleep (1000); 반환 i; }); }); } // 자동 셔 다운
이것은 동시 코드를 극적으로 단순화 할 수 있습니다. 많은 경우 복잡한 스레드 풀이나 반응 형 프로그래밍이 필요하지 않습니다.
Java 21 : 레코드 패턴 및 배열 패턴 (미리보기)
switch
또는 if
에서 직접 레코드 및 배열을 해체하기 위해 패턴 일치를 향상시킵니다.
if (obj instanceof point (int x, int y) && x> 0) { System.out.println ( "긍정적 인 점 :"Y); }
중첩 파괴를 줄이고 코드 선명도를 향상시킵니다.
Java 21 : 이름없는 변수 및 패턴 (미리보기)
_
사용하여 패턴에서 사용하지 않는 변수를 무시할 수 있습니다.
if (obj instanceof point (int x, _) && x> 0) {...}
특정 구성 요소 만 관리 할 때 코드를 정리합니다.
Java 21 : 스코프 값 (미리보기)
스코프 값은 스레드에서 데이터를 안전하게 공유합니다. 특히 스레드 로컬이 비효율적 일 수있는 가상 스레드 환경에서 유용합니다.
scopedValue.define ( "user.id", 123); scopedValue <string> user_id = scopedValue.newinstance (); // 가상 스레드에서 문자열 id = user_id.get (); // 안전하게 상속되었습니다
컨텍스트 전파에 적합합니다 (예 : 웹 앱의 요청 스코핑 데이터).
Java 22 : 문자열 템플릿 (미리보기)
문자열에서 인라인 표현식에 대한 STR
프로세서를 소개합니다.
문자열 이름 = "Alice"; int age = 30; 문자열 info = str. "안녕하세요, \ {name}! 당신은 \ {age} 년입니다.";
String.format()
또는 연결보다 안전하고 깨끗합니다.
또한 현지화와 서식하기위한 FMT
와 같은 사용자 정의 프로세서도 지원합니다.
앞으로 살펴보면 : 파이프 라인에 무엇이 있습니까?
몇 가지 주요 이니셔티브는 Java의 미래를 형성하는 것입니다.
- 프로젝트 직기 : 가상 스레드 및 구조적 동시성은 Java 23 또는 24에서 표준 일 수 있으며 동시 응용 프로그램을 작성하는 방법을 변화시킵니다.
- Project Panama : 외국 기능 및 메모리 API를 구축하는 기본 코드 및 데이터와의 JVM 상호 운용성을 향상시키는 것을 목표로합니다.
- Project Valhalla : 가치 유형 및 일반 전문화 탐색-데이터가 많은 응용 프로그램의 성능을 크게 향상시킬 수 있습니다.
- Project Amber : 패턴 매칭, 레코드 및 봉인 된 유형과 같은 생산성 기능에 중점을 둡니다.
요약
Java 17은 밀봉 된 클래스, 더 나은 캡슐화 및 Loom과 Panama의 초기 미리보기를 갖춘 현대 Java를 확고히했습니다. 17 세를 넘어서 언어는 빠르게 발전하고 있습니다.
LTS 버전은 2 년마다 예상되므로 (Java 21은 17 세 이후의 다음 LTS입니다), 이제는 이러한 기능을 생산에서 업그레이드하고 탐색하기에 좋은시기입니다.
기본적으로 Java는 여전히 서 있지 않습니다. 한 번에 한 번에 한 번의 릴리스가 더 단순하고 빠르며 강력 해지고 있습니다.
위 내용은 Java 17 이상의 새로운 기능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

해시 맵은 Java의 해시 테이블을 통해 키 값 쌍 스토리지를 구현하며, 그 핵심은 데이터 위치를 빠르게 배치하는 데 있습니다. 1. 먼저 키의 hashcode () 메소드를 사용하여 해시 값을 생성하고 비트 작업을 통해 배열 인덱스로 변환합니다. 2. 다른 객체가 동일한 해시 값을 생성하여 충돌을 일으킬 수 있습니다. 현재 노드는 링크 된 목록의 형태로 장착됩니다. JDK8 후 링크 된 목록이 너무 길고 (기본 길이 8) 효율을 향상시키기 위해 빨간색과 검은 색 트리로 변환됩니다. 3. 사용자 정의 클래스를 키로 사용하는 경우 equals () 및 hashcode () 메소드를 다시 작성해야합니다. 4. 해시 맵은 용량을 동적으로 확장합니다. 요소 수가 용량을 초과하고 하중 계수 (기본 0.75)를 곱하면 확장 및 재사용; 5. 해시 맵은 스레드 안전이 아니며 Multithreaded에서 Concu를 사용해야합니다.

Java의 문자 인코딩 문제를 처리하려면 키는 각 단계에서 사용되는 인코딩을 명확하게 지정하는 것입니다. 1. 텍스트를 읽고 쓰는 시점에 항상 인코딩을 지정하고 InputStreamReader 및 OutputStreamWriter를 사용하고 시스템 기본 인코딩에 의존하지 않도록 명시 적 문자 세트를 전달하십시오. 2. 네트워크 경계에서 문자열을 처리 할 때 양쪽 끝이 일관되도록하고 올바른 컨텐츠 유형 헤더를 설정하고 라이브러리와 인코딩을 명시 적으로 지정하십시오. 3. String.getBytes () 및 Newstring (byte [])을주의해서 사용하고 플랫폼 차이로 인한 데이터 손상을 피하기 위해 항상 Standardcharsets.utf_8을 수동으로 지정하십시오. 요컨대,

Java에서는 비교 가능성이 기본 정렬 규칙을 내부적으로 정의하는 데 사용되며 비교기는 여러 정렬 로직을 외부로 정의하는 데 사용됩니다. 1. 클래스 자체가 구현 한 인터페이스입니다. 비교 () 메소드를 다시 작성하여 자연 순서를 정의합니다. 문자열 또는 정수와 같은 고정되고 가장 일반적으로 사용되는 분류 방법이있는 클래스에 적합합니다. 2. 비교기는 외부 정의 된 기능 인터페이스이며, 동일한 클래스에 여러 정렬 방법이 필요한 상황에 적합한 Compare () 메소드를 통해 구현되며, 클래스 소스 코드를 수정할 수 없거나 정렬 로직이 종종 변경됩니다. 둘의 차이점은 비교할 수있는 분류 논리 만 정의 할 수 있으며 클래스 자체를 수정하면서 비교할 필요가 있다는 것입니다.

Java에는지도를 가로 지르는 세 가지 일반적인 방법이 있습니다. 1. Entryset을 사용하여 키와 값을 동시에 얻으십시오. 이는 대부분의 시나리오에 적합합니다. 2. 키즈 또는 값을 사용하여 각각 키 또는 값을 가로 지르십시오. 3. 코드 구조를 단순화하려면 Java8의 foreach를 사용하십시오. Entryset은 모든 키 값 쌍이 포함 된 세트 세트를 반환하고 각 루프는 맵을 가져옵니다. 열 객체는 키와 값에 자주 액세스하기에 적합합니다. 키나 값 만 필요한 경우 각각 Keyset () 또는 values ()를 호출하거나 키를 가로 질러 Map.Get (키)를 통해 값을 얻을 수 있습니다. Java 8은 foreach ((키, 값)-& gt를 사용할 수 있습니다

injava, thestatickeywordmeansamembeLongstotheclassitself, nottoinstances.StaticvariablesAresharedAcrossAllInstances 및 OutObjectCreation, 유용한 ForgloBalTrackingorConstants.StaticMethodsOperateateAteAteClassEvel, canceCcessnon-StaticMbers, statice

TOSETJAVA_HOMEONWINDOWS, FIRSTLOCATETEJDKINSTALLATIONPATH (예 : C : \ ProgramFiles \ java \ jdk-17), thencreateasystemenvaria blenamedjava_homewiththatpath.next, updatePathVariableByadding%java \ _home%\ bin, andverifythesetupusingjava-versionandjavac-v

JDBC 트랜잭션을 올바르게 처리하려면 먼저 자동 커밋 모드를 끄고 여러 작업을 수행 한 다음 결과에 따라 커밋 또는 롤백을 수행해야합니다. 1. 트랜잭션을 시작하려면 Conn.SetAutoCommit (False)에게 전화하십시오. 2. 인서트 및 업데이트와 같은 여러 SQL 작업을 실행합니다. 3. 모든 작업이 성공한 경우 Conn.commit ()에게 전화하여 데이터 일관성을 보장하기 위해 예외가 발생하면 Conn.Rollback ()에게 전화하십시오. 동시에, 재 시도는 리소스를 관리하고, 예외를 올바르게 처리하고, 연결 유출을 피하기 위해 긴밀한 연결을 사용하는 데 사용해야합니다. 또한 연결 풀을 사용하고 부분적으로 롤백을 달성하기 위해 저장 포인트를 설정하고 성능을 향상시키기 위해 거래를 가능한 한 짧게 유지하는 것이 좋습니다.

가상 스레드는 동시성과 IO 집약적 시나리오에서 상당한 성능 이점을 가지고 있지만 테스트 방법과 해당 시나리오에주의를 기울여야합니다. 1. 정확한 테스트는 실제 비즈니스, 특히 IO 차단 시나리오를 시뮬레이션하고 JMH 또는 Gatling과 같은 도구를 사용하여 플랫폼 스레드를 비교해야합니다. 2. 처리량 간격은 분명하며, 일정이 가볍고 효율적이기 때문에 10 만 동시 요청보다 여러 배에서 10 배나 높을 수 있습니다. 3. 테스트 중에, 높은 동시성 수치를 맹목적으로 추구하고, 비 차단 IO 모델에 적응하고, 대기 시간 및 GC와 같은 모니터링 지표에주의를 기울일 필요가있다. 4. 실제 애플리케이션에서는 웹 백엔드, 비동기 작업 처리 및 많은 동시 IO 시나리오에 적합하지만 CPU 집약적 작업은 플랫폼 스레드 또는 포크 플랫폼에 여전히 적합합니다.
