Java 8에 대해 들었던 모든 것은 Lambda 표현을 중심으로합니다. 그러나 Java 8의 일부일뿐입니다. Java 8에는 강력한 새로운 클래스와 구문 및 처음부터 가져야 할 다른 것들이 많은 새로운 기능을 가지고 있습니다.
나는 알고 가치가 있다고 생각하는 10 가지 필수 기능을 소개 할 것입니다. 그들 중 적어도 한두 명도 당신이 시도 할 수 있도록 거기에있을 것이므로 시작합시다!
1. 기본 메소드
Java 언어의 새로 추가 된 기능은 인터페이스 방법에 메소드 본문 (기본 메소드라고 함)을 추가 할 수 있다는 것입니다. 이 방법은이 인터페이스를 구현하는 클래스에 암시 적으로 추가됩니다.
이를 통해 코드를 깨지 않고 기존 라이브러리에 새로운 기능을 추가 할 수 있습니다. 이것은 분명히 개선입니다. 반면에 인터페이스는 계약을 정의하는 데 사용되기 때문에 인터페이스와 클래스 사이의 경계를 난독 화하고 클래스는 구체적인 구현을 정의하는 데 사용되기 때문입니다. 플러스 측면에서는 인터페이스를 우아한 방식으로 더 똑똑하게 만들고 라이브러리의 복제와 확장을 피합니다. 그러나 나쁜면에서, 우리는 나중에 인터페이스 메소드가 이것을 쿼리하고 그것을 구체적인 클래스로 변환한다는 것을 알게 될 것입니다. 산산조각….
2. 프로세스 종료
외부 프로세스를 시작하는 것은 당신이하는 일의 절반입니다. 프로세스가 충돌, 매달리거나 100% CPU를 소비하면 돌아가서 디버깅해야합니다. 프로세스 클래스에는 이제 무례한 프로세스를 제어하는 데 도움이되는 두 가지 새로운 방법이 장착되어 있습니다.
첫 번째는 isalive ()를 사용하면 프로세스가 완료되기를 기다리지 않고 프로세스가 여전히 실행 중인지 확인할 수 있습니다. 두 번째로 더 강력한 방법은 Destrofforcibly ()이며, 이로 인해 시간이 오래 걸리거나 더 이상 필요하지 않은 킬 프로세스를 강요 할 수 있습니다.
3. StampedLocks
지금은 흥미로운 것이 있습니다. 아무도 코드를 동기화하는 것을 좋아하지 않습니다. 응용 프로그램의 처리량 (특히 확장 가능한 응용 프로그램)을 줄이거 나 애플리케이션이 끊어지는 것은 범인입니다. 그럼에도 불구하고 어느 시점에서 당신은 선택의 여지가 없습니다.
다중 스레드 동기식으로 임계 리소스에 대한 액세스를 제한하는 방법에는 여러 가지가 있습니다. 이 중 가장 유명한 것은 읽기 쓰기 잠금 (readwritelock)과 관련 구현입니다. 여러 스레드가 동일한 리소스에 액세스 할 수 있지만 자원을 작동하는 스레드를 차단하여 리소스 경쟁을 줄입니다. 이것은 이론적으로는 좋지만 실제로이 자물쇠는 특히 많은 수의 쓰기 스레드가있을 때 매우 느립니다.
참고 : 읽기 쓰기 잠금은 리소스 방문자를 독자와 작가의 두 가지 범주로 나눕니다. 독자는 리소스에서 읽기 전용 작업을 수행하며 작가는 리소스를 운영 할 수 있습니다.
Java 8은 StampedLock이라는 새로운 읽기 쓰기 잠금 장치를 소개합니다. 이 잠금 장치는 더 빠를뿐만 아니라 강력한 낙관주의 잠금 세트를 제공하며,이를 통해 최소 비용으로 리더 잠금을 얻을 수 있으며 선택 중에 쓰기 작업을 원하지 않습니다. 선택이 끝나면 잠금을 쿼리하여 선택 중에 쓰기 작업이 있는지 확인할 수 있습니다.이 경우 다시 시도, 잠금을 업데이트할지 또는 포기할지 여부를 선택할 수 있습니다.
이 잠금 장치는 매우 강력한 도구이며 설명하기 위해 특별한 기사가 필요합니다. 나는이 새로운 일에 대해 너무 흥분해서 현기증이 좋았습니다!
자세한 내용은 여기를 참조하십시오
4. 동시 부가자
이것은 멀티 스레드 응용 프로그램에서 일하는 사람들을위한 또 다른 작은 아기입니다. 이것은 멀티 스레드 카운터를위한 간단하고 효율적인 새로운 API로, Atomicinteger를 사용하는 것보다 빠릅니다. 너무 멋져요!
5. 선택적 값
오, Null Pointer, 모든 Java 개발자에게 악몽. 처음부터 (또는 적어도 1965 년) 아마도 가장 인기있는 예외 일 것입니다.
Scale과 Hashell에서 나온 Java 8에는 NULL이 될 수있는 참조를 캡슐화하기위한 옵션이라는 새로운 템플릿이 있습니다. NULL을 종료하는 것은 은색 총알이 아닙니다. API 디자이너가 코드 레벨 (문서 레벨이 아닌)에서 널 값이 메소드로 전달되거나 널 값을 위해 발신자를 준비하기 위해 메소드에서 반환 할 수 있음을 표시하는 방법입니다. 따라서, 이것은 새로운 API에서만 작동 할 수 있으며, 발신자가 참조가 캡슐화를 피할 수 없다고 가정 할 때 안전하지 않은 부정확성을 초래하지 않는다고 가정합니다.
나는이 기능과 매우 상충된다고 말해야합니다. 한편으로는 Null에 큰 문제가 있으므로 Null이 발생하기 전에 모든 것을 잘하는 경향이 있습니다. 그러나 반면에, 나는 그것이 성공할 것이라고 의심합니다. 선택 사항을 사용하려면 회사 전체의 지속적인 노력이 필요하지만 직접적인 가치는 없기 때문입니다. 결정적이지 않으면 버려 질 것입니다.
선택 사항에 대한 자세한 내용은 여기를 클릭하십시오
6. 무엇이든 주석을 달라
또 다른 작은 Java 언어 개선은 이제 코드의 거의 모든 것에 주석이 추가 될 수 있다는 것입니다. 과거에는 주석이 클래스 또는 메소드 선언에만 추가 될 수있었습니다. Java 8을 사용한 주석은 값을 지정된 유형으로 전달할 때뿐만 아니라 공간을 새 개체에 할당 할 때에도 변수 및 매개 변수 선언에 추가 할 수 있습니다. 이는 정적 분석 및 FindBugs와 같은 마법사 도구를 통해 Java 언어를보다 친절하고 집중하고 (Java 문서화 도구 및 API 개선과 함께)를 만드는 것입니다. 이것은 훌륭한 기능이지만 Java 7에 소개 된 Invokedymam과 같은 더 많은 것들이 있으며, 실제 가치는 커뮤니티가하는 것입니다.
7. 오버플로 작동
이제 처음부터 핵심 라이브러리에 포함되어야하는 일련의 방법이 있습니다. 내가 가장 좋아하는 습관 중 하나는 int가 2^32를 초과 할 때 오버플로를 디버그 한 다음 무작위 로이 악명 높은 버그를 계속 만들어 보는 것입니다 (예 : "어떻게이 이상한 가치를 얻었습니까?").
이번에는 은색 총알이 없지만, 오버플로가 오버플로를 암시하는 표준 +/* 연산자보다 더 내성적 인 방식으로 오버플로가 발생할 때 예외를 던지는 숫자를 작동시키는 일련의 기능이 있습니다.
8. 폴더 트래버스
반복 디렉토리 트리의 내용은 Google 검색에서 매우 일찍 나타났습니다 (이 경우 Apache.fileutils를 사용할 수 있음). Java 8
파일에 대한 10 가지 새로운 방법이 추가되었습니다. 내가 가장 좋아하는 것은 Walk ()입니다.
디렉토리 구조의 내용.
9. 강한 무작위 숫자 생성
오늘의 암호와 키의 취약성에 대한 이야기는 필수입니다. 프로그램 보안은 어려운 문제이며 실수가 쉽습니다. 이것은 또한 내가 좋아하는 것입니다
JVM에서 가장 강력한 랜덤 번호 생성기를 자동으로 선택할 수있는 새로운 Securerandom.getInstanceStrong () 메소드의 이유. 그것은 줄어 듭니다
발전기 고장 또는 약한 발전기의 가능성은 기본적으로 얻어 지므로 키 또는 암호화 값이 쉽게 갈라질 가능성이 있습니다.
10. date.toinstant ()
Java 8은 새로운 날짜 시간 API를 소개합니다. 기존 API가 좋지 않기 때문에 이해할 수 있습니다. 이제 Joda는 몇 년 동안 Java Date Time API에 집중하고 침투했습니다. 그러나 새로운 API를 사용하더라도 여전히 큰 문제가 있습니다. 이전 API를 사용하는 수많은 코드와 라이브러리가 있습니다.
우리는 모두이 문제에 직면 한 것을 알고 있습니다. 그래서 우리는 어떻게해야합니까?
Java 8은 매우 우아하게 수행했기 때문에 새로운 방법 Toinstant ()가 날짜 클래스에 추가되어 새로운 API로 변환되었습니다. 기존 날짜 API (가까운 미래에 동일)를 사용하더라도 새 API로 빠르게 업그레이드 할 수 있습니다.
이 기사에 언급되어서는 안되는 다른 특성이 무엇이라고 생각합니까, 아니면 분석에 동의하지 않습니까? 댓글을 달아주세요 - 이것이 게시의 목적입니다!
위의 것은 Java 8의 새로운 기능에 대한 정보를 편집 한 것입니다. 앞으로 관련 정보를 계속 추가 할 것입니다. 이 웹 사이트를 지원 해주셔서 감사합니다!