1. Java JDK1.5의 새로운 특징
1. 제네릭 :
List <string> strs = new ArrayList <string> (); // 컬렉션의 스토리지 유형을 지정합니다. 위의 컬렉션에 데이터를 저장할 때 문자열 데이터를 저장해야합니다. 그렇지 않으면 컴파일러가 오류를보고합니다.
2. 각
예를 들어, 우리는 위의 컬렉션을 for-each를 통해 가로 질러 더 쉽고 명확하게 만듭니다.
for (string s : strs) {system.out.println (s);}참고 : For-Reach를 사용하여 컬렉션을 통과 할 때 컬렉션으로가는 컬렉션은 반복자 인터페이스를 구현해야합니다.
3. 자동 취소 및 포장 기능
코드 사본은 다음과 같습니다.
무슨 뜻입니까?
JDK1.5 각 기본 데이터 유형에 대한 캡슐화 클래스를 정의합니다. Java의 기본 데이터 유형에도 자체 객체도 있습니다 (예 : int-> integer,
double-> double,
long-> long,
char-> 캐릭터,
float-> float,
부울 -> 부울,
짧은 -> 짧은,
바이트 -> 바이트
자동 포장 : 기본 유형을 객체로 변환합니다. 예 : int-> 정수
자동 포장 : 객체를 기본 데이터 유형으로 변환합니다 (예 : 정수 -> int)
컬렉션이 JDK1.5 전에 기본 데이터 유형을 저장할 수없는 문제를 해결할 수 있습니다.
4. 열거 :
열거는 JDK1.5에 의해 도입 된 비교 기능이다. 키워드는 열거적입니다
예를 들어 : 신호등을 나타내는 열거를 정의합니다
공개 열거 MyEnum {빨간색, 녹색, 노란색}5. 변수 매개 변수
무슨 뜻입니까? 예를 들어 보겠습니다. JDK1.5 이전에 동일한 유형의 여러 매개 변수를 메소드로 전달하려고 할 때, 우리는 그것을 해결하는 두 가지 방법을 사용했습니다. 1. 배열을 직접 전달, 2. 많은 매개 변수를 전달하십시오.
예를 들어:
public void printcolor (문자열 빨간색, 문자열 녹색, 문자열 노란색) {} 또는
public void printcolor (String [] colors) {} 이런 식으로 메소드 매개 변수를 쓰는 것은 우리가 원하는 효과를 달성 할 수 있지만, 이것이 조금 번거롭지 않습니까? 또한 매개 변수 수가 불확실한 경우 어떻게해야합니까? Java JDK1.5가 제공하는 변수 매개 변수는이 문제를 완벽하게 해결할 수 있습니다.
public void printcolor (문자열 ... 색) {}
이렇게 정의 될 수 있습니다. 무엇을 의미합니까? 매개 변수가 동일한 유형 인 경우 "type + 3 점, 매개 변수 이름"형식을 사용할 수 있습니다. 이것의 장점은 매개 변수 유형이 동일하다면 전달 된 매개 변수 수에는 제한이 없다는 것입니다. 변수 매개 변수는 매개 변수 목록의 마지막 항목이어야합니다 (이 기능은 객체 및 기본 데이터 유형 모두에 적용됨).
6. 정적 가져 오기
장점 : 정적 가져 오기를 사용하면 수입 클래스의 모든 정적 변수와 정적 메소드가 현재 클래스에서 직접 볼 수 있습니다. 이 정적 멤버를 사용하면 클래스 이름을 줄 필요가 없습니다.
단점 : 과용은 코드의 가독성을 줄입니다
7. 스레드 동시성 라이브러리
Thread Concurrency Library는 Java 1.5가 제안한 멀티 스레딩의 고급 기능입니다. java.util.concurrent 패키지에 있습니다
포함하다
1. 스레드 Mutex 도구 클래스 설명 : 잠금, 레드 라이더 락
2. 스레드 커뮤니케이션 설명 : 조건
3. 스레드 풀
ExecutorService
3. 큐를 동기화하십시오
ArrayBlockingqueue
4. 컬렉션 동기화
Consurenthashmap, loveonwritearraylist
5. 스레드 동기화 도구
신호기
스레드 동시성 라이브러리에는 여전히 많은 (매우 중요한) 내용이 있으므로 여기에 하나씩 나열하지 않습니다. 관심있는 친구들은 도움말 문서를 확인할 수 있습니다.
2. JDK1.6의 새로운 특징
1. Desktop 클래스 및 SystemTray 클래스
전자는 지정된 URL을 탐색하기 위해 시스템 기본 브라우저를 열고 시스템 기본 이메일 클라이언트를 열고 지정된 이메일 주소로 이메일을 보내고 기본 응용 프로그램을 사용하여 파일을 열거 나 편집하고 (예 : Notepad를 사용하여 TXT를 사용하여 TXT를 사용하여 시스템 기본 프린터를 사용하여 문서를 인쇄 할 수 있습니다. 후자는 시스템 트레이 영역에서 트레이 프로그램을 만드는 데 사용될 수 있습니다.
2. jaxb2를 사용하여 객체와 XML 간의 매핑을 구현하십시오.
JAXB는 XML 바인딩을위한 Java 아키텍처의 약어로, Java 객체를 XML 형식으로 변환 할 수 있으며 그 반대도 마찬가지입니다.
객체와 관계형 데이터베이스 ORM 간의 매핑을 호출하며 실제로 객체와 XML 간의 매핑을 OXM (Object XML 매핑)이라고도합니다. JAXB는 Java EE의 일부라는 것이 밝혀졌습니다. JDK1.6에서 Sun은 Java SE에 넣습니다. 이는 Sun의 일반적인 연습이기도합니다. JDK1.6과 함께 제공되는 JAXB 버전은 2.0입니다. 1.0 (JSR 31)과 비교하여 JAXB2 (JSR 222)는 새로운 JDK5 기능 주석을 사용하여 개발 작업 부하를 크게 단순화하는 클래스 및 속성을 식별합니다. 실제로 Java EE 5.0에서는 EJB 및 웹 서비스도 주석을 통해 개발을 단순화합니다. 또한 JAXB2는 STAX (JSR 173)를 사용하여 하단에서 XML 문서를 처리합니다.
JAXB 외에도 XMLBEANS 및 CASTOR 등을 통해 동일한 기능을 달성 할 수 있습니다.
3. Stax를 이해하십시오
Stax (JSR 173)는 DOM 및 SAX 외에 JDK1.6.0에서 XML 문서를 처리하기위한 또 다른 API입니다.
Stax의 기원 : JAXP1.3 (JSR 206)에서 XML 문서를 처리하는 두 가지 방법이 있습니다 : DOM (Document Object Model) 및 SAX (XML의 간단한 API).
JDK1.6.0에서 JAXB2 (JSR 222) 및 JAX-WS 2.0 (JSR 224)이 Stax를 사용하기 때문에 Sun은 JAXP 제품군에 Stax를 추가하고 JAXP 버전을 1.4로 업그레이드하기로 결정했습니다 (JAXP1.4는 JAXP1.3의 유지 보수 버전입니다). JDK1.6의 JAXP 버전은 1.4입니다. Stax는 풀 패팅 XML 문서를 사용하는 API 인 XML의 약어를위한 스트리밍 API입니다. Stax는 프로그래머가 XML 문서의 구문 분석 프로세스를 제어 할 수 있도록 이벤트 반복자를 기반으로 API를 제공합니다. 이 프로그램은이 이벤트 반복자를 가로 지르며 각 구문 분석 이벤트를 처리합니다. 구문 분석 이벤트는 프로그램에 의해 철수되는 것으로 간주 될 수 있습니다. 즉, 프로그램은 구문 분석기에게 구문 분석 이벤트를 생성 한 다음 이벤트를 처리 한 다음 구문 분석기가 다음 구문 분석 이벤트를 생성하게합니다. 문서 종료 문자가 발생할 때 까지이 루프. SAX는 또한 이벤트를 기반으로 XML 문서를 처리하지만 푸시 모드를 사용하여 구문 분석합니다. Parser가 완전한 XML 문서를 구문 분석 한 후에는 구문 분석 이벤트 만 생성 한 다음 프로그램으로 밀어 이러한 이벤트를 처리합니다. DOM은 전체 XML 문서를 메모리 트리에 매핑하는 방법을 채택하여 상위 노드, 하위 노드 및 형제 노드의 데이터를 쉽게 얻을 수 있지만 문서가 크면 성능에 심각한 영향을 미칩니다.
4. 컴파일러 API를 사용하십시오
이제 JDK1.6 (JSR 199)의 컴파일러 API를 사용하여 Java 소스 파일을 동적으로 컴파일 할 수 있습니다. 컴파일러 API는 반사 기능을 결합하여 동적 생성 Java 코드를 달성하고 이러한 코드를 컴파일하고 실행하는데, 이는 약간의 동적 언어 기능입니다.
이 기능은 JSP 웹 서버와 같은 동적 컴파일이 필요한 일부 응용 프로그램에 매우 유용합니다. JSP를 수동으로 수정하면 웹 서버를 다시 시작하여 효과를 확인하고 싶지 않습니다. 현재 컴파일러 API를 사용하여 JSP 파일의 동적 컴파일을 구현할 수 있습니다. 물론 현재 JSP 웹 서버는 JSP 핫 배포도 지원합니다. 현재 JSP 웹 서버는 runtime.exec 또는 processBuilder를 통해 Javac을 호출하여 작동 중에 코드를 컴파일합니다. 이 방법은 편집을 수행하기 위해 다른 프로세스를 생성해야하며, 이는 충분히 우아하지 않으며 코드를 특정 운영 체제에 의존하게하기가 쉽습니다. 컴파일러 API는 사용하기 쉬운 표준 API 세트를 통해 역동적 인 컴파일을 수행하는 더 풍부한 방법을 제공하며 크로스 플랫폼입니다.
5. 가벼운 HTTP 서버 API
JDK1.6은 간단한 HTTP 서버 API를 제공합니다. 이에 따르면 HTTP 및 HTTPS 프로토콜을 지원하고 HTTP1.1 구현의 일부를 제공하는 자체 임베디드 HTTP 서버를 구축 할 수 있습니다. 구현되지 않은 부분은 기존 HTTP 서버 API를 확장하여 구현할 수 있습니다. 프로그래머는 Httphandler 인터페이스를 스스로 구현해야합니다. Httpserver는 클라이언트 요청을 처리하기 위해 Httphandler 구현 클래스의 콜백 메소드를 호출합니다. 여기서는 HTTP 요청과 그 응답을 Exchange를 호출합니다. httpserver는 httpexchange를 httphandler 구현 클래스의 콜백 메소드로 전달합니다.
6. 플러그 가능한 주석 처리 API (플러그 가능한 주석 처리 API)
플러그인 주석 처리 API (JSR 269)는 주석을 처리하는 표준 API를 제공합니다 (JSR 175)
실제로 JSR 269는 주석을 다루는 데 사용되는 것이 아닙니다. 더 강력한 기능은 Java 언어 자체의 모델을 설정한다는 것입니다. 메소드, 패키지, 생성자, 유형, 가변, 열거, 유형 및 요소로의 주석 (둘 사이의 차이점은 무엇입니까?)와 같은 Java 언어 요소를 매핑하여 Java 언어의 의미를 객체에 매핑합니다. javax.lang.model 패키지 에서이 수업을 볼 수 있습니다. 따라서 JSR 269에서 제공 한 API를 사용하여 기능이 풍부한 메타 프로 그램 환경을 구축 할 수 있습니다. JSR 269는 주석 프로세서를 사용하여 작동 중이기보다는 편집 중에 주석을 처리합니다. 주석 프로세서는 컴파일러의 플러그인과 동일하므로 삽입 주석 처리라고합니다. 주석 프로세서가 주석을 처리 할 때 새 Java 코드가 생성되면 (프로세스 메소드 실행) 컴파일러는 주석 프로세서를 다시 호출합니다. 두 번째 처리를 위해 새 코드가 생성되면 새 코드가 생성되지 않을 때까지 주석 프로세서를 호출합니다. 프로세스 () 메소드가 실행될 때마다이를 "라운드"라고하며 전체 주석 처리 프로세스를 라운드 시퀀스로 간주 할 수 있습니다.
JSR 269는 주로 도구 또는 컨테이너 용 API로 설계되었습니다. 예를 들어, 테스트 중에 실행 해야하는 테스트 방법을 식별하기 위해 주석을 사용하기 위해 주석 기반 장치 테스트 프레임 워크 (예 : TestNG)를 설정하려고합니다.
7. 콘솔을 사용하여 콘솔 프로그램을 개발하십시오
JDK1.6은 문자 기반 콘솔 장치에 액세스하는 데 특별히 사용되는 java.io.console 클래스를 제공합니다. 프로그램이 Linux에서 Windows 또는 터미널에서 CMD와 상호 작용하려면 콘솔 클래스를 사용하여이를 수행 할 수 있습니다. 그러나 JVM에 사용 가능한 콘솔이 기본 플랫폼과 JVM이 호출되는 방식에 따라 사용 가능한 콘솔이 항상 사용 가능한 콘솔을 얻을 수는 없습니다. JVM이 대화식 명령 줄 (예 : Windows CMD)에서 시작되고 입력 및 출력이 다른 곳에서 리디렉션되지 않으면 사용 가능한 콘솔 인스턴스를 얻을 수 있습니다.
8. 스크립팅 언어 지원
예를 들어 : Ruby, Groovy, JavaScript.
9. 공통 주석
일반적인 주석은 원래 Java EE 5.0 (JSR 244) 사양의 일부였으며 이제 Sun은 Java SE 6.0에 그 일부를 넣습니다.
주석 메타 데이터 기능 (JSR 175)이 Java SE 5.0에 추가되면 많은 Java 기술 (예 : EJB 및 웹 서비스)은 주석 부분을 사용하여 XML 파일을 대체하여 실행중인 매개 변수 (또는 EJB의 선언 트랜잭션과 같은 선언 프로그래밍 지원)를 구성합니다. 이러한 기술이 일반적인 목적을 위해 자체 otation을 개별적으로 정의하는 경우 분명히 약간의 중복 구조입니다. 따라서 다른 관련 Java 기술에 대한 일련의 공개 주석을 정의하는 것이 가치가 있습니다. 중복 구조를 피하면서 Java SE와 Java EE의 다양한 기술의 일관성을 보장 할 수 있습니다.
다음은 10 개의 주석을 나열합니다. 공통 주석 주석 보유 목표 설명 생성 된 sourceannotation_type, 생성자, 필드, local_variable, 메소드, 패키지, 매개 변수, 유형. 주석에 의해 생성 된 소스 코드는 생성 된 리소스에 레이블을 지정하는 데 사용됩니다. 컨테이너는 이에 따라 외부 리소스 종속성을 주입합니다. 필드 기반 주입과 세터 기반 주입의 두 가지 방법이 있습니다. 리소스 런타임. 유형을 입력하면 여러 외부 종속성을 동시에 표시합니다. 컨테이너는 이러한 모든 외부 종속성을 사후 구조화 방법에 주입합니다. 이 메소드는 컨테이너가 모든 종속성을 주입하여 종속성 주입 후 초기화 작업을 수행하기 위해 실행됩니다. 하나의 메소드 만 PostStroy 런타임 메소드로 표시 될 수 있습니다. 컨테이너에서 객체 인스턴스를 삭제하기 전에 실행될 콜백 메소드는 PRODSTROY RUNAS 런타임 유형으로 레이블을 지정해야합니다. 이 보안 역할은 컨테이너의 보안 역할과 일치해야합니다. relallowed 런타임 유형, 메소드는 라벨이 붙은 클래스 또는 메소드를 실행할 수있는 보안 역할을 레이블링하는 데 사용됩니다. 이 보안 역할은 컨테이너 보안 역할과 일치해야합니다. 메소드는 모든 역할을 통해 레이블이 지정된 클래스 또는 메소드를 실행할 수 있습니다. DENYALL 런타임 유형. 메소드는 라벨이 붙은 클래스 또는 메소드를 실행하는 역할을 허용하지 않으므로 클래스 또는 메소드가 Java EE 컨테이너에서 실행할 수 없음을 나타냅니다. 선언 런타임 유형은 응용 프로그램에서 테스트 할 수있는 보안 역할을 정의하는 데 사용됩니다. 일반적으로 보안 역할을 검증하기 위해 Isuserinrole을 사용하는 데 사용됩니다.
알아채다:
1. Rosallowed, Permitall 및 DeNyall은 클래스 또는 방법의 racleallowed, remitall 및 denyall에 적용될 수 없습니다. 클래스에 표시된 DeNyall은 Robolesallowed, Permitall, DeNyallrunas, Rosmitall, DeNyall 및 Degyalles가 Java SE 6.0에 추가되지 않은 Robleallowed, Permitall, DeNyallrunas, DeNyallrunas, DeNyallrunas, DeNyallrunas, Denyall 및 Degaleroles가 Java e Ee 컨테이너에 의해 수행됩니다. Java SE6.0에는 위 표에 처음 5 개의 주석의 정의 클래스 만 포함되어 있으며 이러한 주석을 처리하기위한 엔진이 포함되어 있지 않습니다. 이 작업은 플러그 가능한 주석 처리 API (JSR 269)에 의해 수행 될 수 있습니다.
1.6의 새로운 기능과 비교할 때 1.7의 새로운 기능은 우리가 기대하고 눈에 띄고 실질적으로 존재했기 때문에 더 흥분하게 만듭니다.
3. JDK1.7의 새로운 특징
1. 이진 액면가
Java7에서, 형성 유형 (바이트, 짧은, int, long)의 값은 이진 유형으로 표시 될 수 있습니다. 이진 값을 사용할 때는 OB 또는 OB를 예를 들어 다음과 같이 추가해야합니다.
int a = 0B01111_00000_111111_00000_10101_01010_10; 짧은 b = (짧은) 0B01100_00000_11111_0; 바이트 C = (바이트) 0B00000_0001;
2. 슬라이딩 라인에 대한 디지털 변수 지원
JDK1.7은 숫자 유형의 변수에 슬라이드 라인을 추가 할 수 있습니다.
그러나 추가 할 수없는 곳이 몇 개 있습니다.
1. 숫자의 시작과 끝
2. 소수점 전후
3. F 또는 L 이전 : 예를 들어 :
int num = 1234_5678_9;
float num2 = 222_33f;
긴 NUM3 = 123_000_111L;
3. String에 대한 스위치 지원
전에 항상 물음표가 있었습니까? C#이 Java에서 사용할 수있는 이유는 무엇입니까? 하, 그러나 JDK1.7 이후에 Java도 괜찮습니다.
문자열 상태 = "Orderstate"; 스위치 (상태) {case "OrderCancel": System.out.println ( "Order Cancellation"); 부서지다; "OrdersUccess": System.out.println ( "구독 성공"); 부서지다; 기본값 : System.out.println ( "상태 알 수없는"); }4. Resource와 함께
시도-자원은 하나 이상의 리소스를 정의하는 시도 선언입니다. 이 리소스는 프로그램이 처리 한 후에 프로그램이 닫아야하는 객체를 말합니다. 재 시도를 시도하면 처리가 완료된 후 모든 리소스가 닫히도록합니다.
시도-자원을 사용할 수있는 리소스는 다음과 같습니다.
java.lang.autoclosable 인터페이스 java.io.closable 인터페이스를 구현하는 모든 객체.
예를 들어:
public static string readfirstlinefrile (String Path)는 ioexception {try (bufferedReader br = new bufferedReader (new FilEreader (path))) {return br.readline (); }}
Java 7 이상 버전에서 BufferedReader는 java.lang.autoclosable 인터페이스를 구현합니다.
BufferedReader는 Try-With-Resources 선언에 정의되므로 Try 문이 정상인지 비정상적인지 여부에 관계없이 자동으로 꺼집니다. Java7 전에이 객체를 닫기 위해 최종적으로 블록을 사용해야합니다.
5. 여러 예외를 포착하고 개선 된 유형 확인으로 예외를 다시 줄입니다.
예를 들어:
public static void first () {try {bufferedReader reader = new bufferedReader (new FilerEader ( "")); 연결 con = null; 문자 stmt = con.createstatement (); } catch (ioexception | sqlexception e) {// 여러 예외를 포착하십시오. e는 최종 유형 e.printstacktrace (); }}장점 : 하나의 캐치를 사용하여 여러 예외를 사용하는 것이 하나의 예외를 처리하여 생성 된 바이트 코드에 대한 하나의 예외를 처리하기 위해 여러 어획량을 사용하는 것보다 작고 효율적입니다.
6. 제네릭을 생성 할 때 유추를 입력하십시오
컴파일러가 컨텍스트에서 유형 매개 변수를 추론 할 수있는 한 일반 매개 변수를 한 쌍의 빈 각 브래킷 <>로 바꿀 수 있습니다. 이 괄호 한 쌍은 개인적으로 다이아몬드라고합니다. Java SE 7 이전에는 일반적인 개체를 선언 할 때이 작업을 수행해야합니다.
List <string> list = new ArrayList <string> ();
그리고 Java SE7 후에는 이것을 할 수 있습니다
List <string> list = new ArrayList <> ();
컴파일러는 이전 (목록)에서 유형 매개 변수를 추론 할 수 있으므로 후속 Arraylist 후에는 더 이상 일반 매개 변수를 쓸 수 없으며 한 쌍의 빈 각 브래킷을 사용할 수 있습니다. 물론 "다이아몬드"<>를 가지고 다니면 경고가있을 것입니다.
Java SE7은 제한된 유형 추론 만 지원합니다. 컨텍스트에서 생성자의 매개 변수화 된 유형이 크게 선언 된 경우에만 유형 추론을 사용할 수 있습니다. 그렇지 않으면 작동하지 않습니다.
List <string> list = new ArrayList <> (); list.add ( "a"); // this는 작동하지 않습니다. // List <? String> list2 = new ArrayList <> ()를 확장합니다. list.addall (list2);
7. (없음)
8. 환경 정보를 얻기위한 몇 가지 새로운 도구와 방법 추가
예를 들어:
File System.GetUserHomedir () // 현재 사용자 디렉토리 파일 시스템 .getUserDir () // Java Process 5 파일 시스템을 시작할 때의 디렉토리 .getJavaiotempdir () // IO 임시 폴더 파일 시스템 .getJavahomedir () // JRE 설치 디렉토리
9. 안전한 추가, 빼기, 곱셈 및 분할
예를 들어:
int math.safetoint (긴 가치) int math.safenegate (int value) 긴 수학 .safesubract (긴 value1, int value2) 긴 수학 (긴 value1, long value2) int math.safemultiply (int value1, int value2) 긴 수학 (long value1, int value2) long value1 that. Math.Safenegate (긴 가치) int Math.Safeadd (int value1, int value2) Long Math.Safeadd (Long value1, int value2) Long Math.safeadd (long value1, long value2) int math.safesubtract (int value1, int value2)
글쎄, 지금까지 너무 많이 분류되었습니다. 나중에 추가하겠습니다.
이전 JDK 버전에 대해 확신이 없다면 새로운 기능을 사용하지 않으면 문제가있을 수 있습니다.