[java-7] Java 7의 새로운 기능
Java 7의 어떤 새로운 기능이 구현 될 예정입니까? 그리고 그들은 지금 무엇을하고 있습니까?
답변
JDK 7 릴리스 노트의 Java SE 7 기능 및 개선 사항
다음은 OpenJDK 7 기능 페이지 의 Java 7 새로운 기능 요약입니다 .
vm JSR 292 : 동적 유형 언어 지원 (InvokeDynamic) 엄격한 클래스 파일 검사 lang JSR 334 : 작은 언어 향상 (Project Coin) 핵심 업그레이드 클래스 로더 아키텍처 URLClassLoader를 닫는 방법 동시성 및 컬렉션 업데이트 (jsr166y) i18n 유니 코드 6.0 로케일 향상 사용자 로케일 및 사용자 인터페이스 로케일 분리 ionet JSR 203 : Java 플랫폼 (NIO.2)을위한 새로운 I / O API zip / jar 아카이브 용 NIO.2 파일 시스템 공급자 SCTP (Stream Control Transmission Protocol) SDP (Sockets Direct Protocol) Windows Vista IPv6 스택 사용 TLS 1.2 sec Elliptic-curve cryptography (ECC) jdbc JDBC 4.1 Java 2D 용 클라이언트 XRender 파이프 라인 6u10 그래픽 기능을위한 새로운 플랫폼 API 생성 스윙을위한 Nimbus 룩앤필 스윙 JLayer 구성 요소 Gervill 사운드 신디사이저 [NEW] 웹 XML 스택 업데이트 관리 강화 MBeans [업데이트 됨]
Java 1.7의 새로운 기능에 대한 코드 예제
Try-with-resources 문
이:
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
br.close();
}
된다 :
try (BufferedReader br = new BufferedReader(new FileReader(path)) {
return br.readLine();
}
닫을 리소스를 두 개 이상 선언 할 수 있습니다.
try (
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest))
{
// code
}
숫자 리터럴의 밑줄
int one_million = 1_000_000;
스위치의 문자열
String s = ...
switch(s) {
case "quux":
processQuux(s);
// fall-through
case "foo":
case "bar":
processFooOrBar(s);
break;
case "baz":
processBaz(s);
// fall-through
default:
processDefault(s);
break;
}
이진 리터럴
int binary = 0b1001_1001;
일반 인스턴스 생성을위한 향상된 유형 추론
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
된다 :
Map<String, List<String>> anagrams = new HashMap<>();
다중 예외 포착
이:
} catch (FirstException ex) {
logger.error(ex);
throw ex;
} catch (SecondException ex) {
logger.error(ex);
throw ex;
}
된다 :
} catch (FirstException | SecondException ex) {
logger.error(ex);
throw ex;
}
SafeVarargs
이:
@SuppressWarnings({"unchecked", "varargs"})
public static void printAll(List<String>... lists){
for(List<String> list : lists){
System.out.println(list);
}
}
된다 :
@SafeVarargs
public static void printAll(List<String>... lists){
for(List<String> list : lists){
System.out.println(list);
}
}
답변
Java Standard Edition (JSE 7)의 새로운 기능
-
JLayer 클래스로 구성 요소 장식 :
JLayer 클래스는 Swing 컴포넌트를위한 유연하고 강력한 데코레이터입니다. Java SE 7의 JLayer 클래스는 정신적으로 java.net의 JxLayer 프로젝트 프로젝트와 유사합니다. JLayer 클래스는 처음에는 JXLayer 프로젝트를 기반으로했지만 API는 별도로 발전했습니다.
-
switch 문의 문자열 :
JDK 7에서는 switch 문의 표현식에 String 객체를 사용할 수 있습니다. Java 컴파일러는 일반적으로 연결된 if-then-else 문보다 String 개체를 사용하는 switch 문에서 더 효율적인 바이트 코드를 생성합니다.
-
일반 인스턴스에 대한 유형 추론 :
컴파일러가 컨텍스트에서 형식 인수를 유추 할 수있는 한 제네릭 클래스의 생성자를 호출하는 데 필요한 형식 인수를 빈 형식 매개 변수 집합 (<>)으로 바꿀 수 있습니다. 이 꺾쇠 괄호 쌍을 비공식적으로 다이아몬드라고합니다. Java SE 7은 일반 인스턴스 생성을위한 제한된 유형 추론을 지원합니다. 생성자의 매개 변수화 된 유형이 컨텍스트에서 분명한 경우에만 유형 추론을 사용할 수 있습니다. 예를 들어, 다음 예제는 컴파일되지 않습니다.
List<String> l = new ArrayList<>(); l.add("A"); l.addAll(new ArrayList<>());
이에 비해 다음 예제는 컴파일됩니다.
List<? extends String> list2 = new ArrayList<>(); l.addAll(list2);
-
향상된 유형 검사로 여러 예외 유형 포착 및 예외 다시 던지기 :
Java SE 7 이상에서는 단일 catch 블록이 둘 이상의 예외 유형을 처리 할 수 있습니다. 이 기능은 코드 중복을 줄일 수 있습니다. 각 catch 블록에 중복 코드가 포함 된 다음 코드를 고려하십시오.
catch (IOException e) { logger.log(e); throw e; } catch (SQLException e) { logger.log(e); throw e; }
Java SE 7 이전 릴리스에서는 변수 e의 유형이 다르기 때문에 중복 된 코드를 제거하는 공통 방법을 작성하기가 어렵습니다. Java SE 7 이상에서 유효한 다음 예제는 중복 된 코드를 제거합니다.
catch (IOException|SQLException e) { logger.log(e); throw e; }
catch 절은 블록이 처리 할 수있는 예외 유형을 지정하며 각 예외 유형은 세로 막대 (|)로 구분됩니다.
-
java.nio.file 패키지
java.nio.file
패키지 및 관련 패키지 java.nio.file.attribute는 파일 I / O 및 파일 시스템에 액세스하기위한 포괄적 인 지원을 제공합니다. zip 파일 시스템 공급자는 JDK 7에서도 사용할 수 있습니다.
답변
- 바이너리 리터럴
- switch 문의 문자열
- 리소스 또는 ARM ( 자동 리소스 관리 )을 사용해보십시오.
- 다중 예외 처리
- 억제 된 예외
- 리터럴에서 밑줄
- Diamond 구문을 사용한 일반 인스턴스 생성을위한 유형 추론
- Varargs 메서드와 함께 수정 불가능한 형식 매개 변수를 사용할 때 컴파일러 경고 및 오류 개선
답변
John Skeet이 말한 것 외에도 Java 7 프로젝트에 대한 개요가 있습니다. 기능에 대한 목록과 설명이 포함되어 있습니다.
참고 : JDK 7은 2011 년 7 월 28 일에 출시되었으므로 이제 공식 Java SE 사이트 로 이동해야합니다 .
답변
언어 변경 :
-Project Coin (small changes)
-switch on Strings
-try-with-resources
-diamond operator
라이브러리 변경 :
-new abstracted file-system API (NIO.2) (with support for virtual filesystems)
-improved concurrency libraries
-elliptic curve encryption
-more incremental upgrades
플랫폼 변경 :
-support for dynamic languages
아래는 JAVA 7의 새로 추가 된 기능을 설명하는 링크입니다. 각 기능에 대한 가능한 작은 예를 통해 설명이 명확합니다.
답변
일반 인스턴스 생성을 위해 Diamond (<>) 연산자 사용
Map<String, List<Trade>> trades = new TreeMap <> ();
switch 문에서 문자열 사용
String status= “something”;
switch(statue){
case1:
case2:
default:
}
숫자 리터럴의 밑줄
int val 12_15; 긴 전화 번호 = 01917_999_720L;
“|”를 사용하여 여러 예외를 발생시키기 위해 단일 catch 문 사용 운영자
catch(IOException | NullPointerException ex){
ex.printStackTrace();
}
Java 7은 try-with-resources 문을 제공하므로 리소스를 close () 할 필요가 없습니다.
try(FileOutputStream fos = new FileOutputStream("movies.txt");
DataOutputStream dos = new DataOutputStream(fos)) {
dos.writeUTF("Java 7 Block Buster");
} catch(IOException e) {
// log the exception
}
접두사 “0b”또는 “0B”가있는 이진 리터럴
답변
ForkJoinPool 및 Executor Framework의 관련 개선 사항은 Java 7에서 중요한 추가 사항 이라고 생각 합니다.