Java 7의 새로운 기능


답변:


211

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);
    }
}

4
찾기 어려운 코드 예제를위한 +1 코드. 더 추가 할 수 있습니까?
Zasz 2011-08-09

3
개선 된 유형 추론은 참조가 입력되는 이상한 변경이있는 C #의 슬픈 사본 인 것처럼 보이지만 개체는 그렇지 않습니까 ?? 무슨 코미디!
Zasz 2011-08-09

1
@Zasz, 그래 있는지, 그것은 지속적인 개선에
didxga

그래서 질문은 OP입니다, 당신의 의견은 무엇입니까? 이러한 향상된 기능은 생산성 측면에서만 가능합니까, 아니면 프로그램의 성능을 실제로 향상시킬 수 있습니까? 바이트 코드가 변경되지 않으면 1.5로 표시된 바이트 코드와 함께 새로운 언어 향상 기능을 사용할 수 있습니까?
Dmitriy R

언어 개선은 아니지만 Objectsnull 참조를 확인하지 않아도되는 정적 메서드 가있는 새 클래스가 있습니다. 예 : if (obj != null && obj.equals(anotherObj))가됩니다if (Objects.equals(obj, anotherObj))
Carcamano

13

Java Standard Edition (JSE 7)의 새로운 기능

  1. JLayer 클래스로 구성 요소 장식 :

    JLayer 클래스는 Swing 컴포넌트를위한 유연하고 강력한 데코레이터입니다. Java SE 7의 JLayer 클래스는 정신적으로 java.net의 JxLayer 프로젝트 프로젝트와 유사합니다. JLayer 클래스는 처음에는 JXLayer 프로젝트를 기반으로했지만 API는 별도로 발전했습니다.

  2. switch 문의 문자열 :

    JDK 7에서는 switch 문의 표현식에 String 객체를 사용할 수 있습니다. Java 컴파일러는 일반적으로 연결된 if-then-else 문보다 String 개체를 사용하는 switch 문에서 더 효율적인 바이트 코드를 생성합니다.

  3. 일반 인스턴스에 대한 유형 추론 :

    컴파일러가 컨텍스트에서 형식 인수를 유추 할 수있는 한 제네릭 클래스의 생성자를 호출하는 데 필요한 형식 인수를 빈 형식 매개 변수 집합 (<>)으로 바꿀 수 있습니다. 이 꺾쇠 괄호 쌍을 비공식적으로 다이아몬드라고합니다. Java SE 7은 일반 인스턴스 생성을위한 제한된 유형 추론을 지원합니다. 생성자의 매개 변수화 된 유형이 컨텍스트에서 분명한 경우에만 유형 추론을 사용할 수 있습니다. 예를 들어, 다음 예제는 컴파일되지 않습니다.

    List<String> l = new ArrayList<>();
    l.add("A");
    l.addAll(new ArrayList<>());

    이에 비해 다음 예제는 컴파일됩니다.

    List<? extends String> list2 = new ArrayList<>();
    l.addAll(list2);
  4. 향상된 유형 검사로 여러 예외 유형 포착 및 예외 다시 던지기 :

    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 절은 블록이 처리 할 수있는 예외 유형을 지정하며 각 예외 유형은 세로 막대 (|)로 구분됩니다.

  5. java.nio.file 패키지

    java.nio.file패키지 및 관련 패키지 java.nio.file.attribute는 파일 I / O 및 파일 시스템에 액세스하기위한 포괄적 인 지원을 제공합니다. zip 파일 시스템 공급자는 JDK 7에서도 사용할 수 있습니다.

출처 : http://ohmjavaclasses.blogspot.com/


6

3

John Skeet이 말한 것 외에도 Java 7 프로젝트에 대한 개요가 있습니다. 기능에 대한 목록과 설명이 포함되어 있습니다.

참고 : JDK 7은 2011 년 7 월 28 일에 출시되었으므로 이제 공식 Java SE 사이트 로 이동해야합니다 .


참고로, 이것은 좋은 프레젠테이션이지만 꽤 오래되고 다소 구식입니다.
Alex Miller

이 링크를 시도했을 때 히브리어로 오류 페이지가 나타납니다. 최신 사본이 어디에 있습니까?
Simon Nickerson

1

언어 변경 :

-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의 새로 추가 된 기능을 설명하는 링크입니다. 각 기능에 대한 가능한 작은 예를 통해 설명이 명확합니다.

http://radar.oreilly.com/2011/09/java7-features.html


0

일반 인스턴스 생성을 위해 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"가있는 이진 리터럴


0

ForkJoinPool 및 Executor Framework의 관련 개선 사항은 Java 7에서 중요한 추가 사항 이라고 생각 합니다.


-2

다음 목록에는 Java SE 7의 향상된 기능 페이지에 대한 링크가 포함되어 있습니다.

Swing
IO and New IO
Networking
Security
Concurrency Utilities
Rich Internet Applications (RIA)/Deployment
    Requesting and Customizing Applet Decoration in Dragg able Applets
    Embedding JNLP File in Applet Tag
    Deploying without Codebase
    Handling Applet Initialization Status with Event Handlers
Java 2D
Java XML  JAXP, JAXB, and JAX-WS
Internationalization
java.lang Package
    Multithreaded Custom Class Loaders in Java SE 7
Java Programming Language
    Binary Literals
    Strings in switch Statements
    The try-with-resources Statement
    Catching Multiple Exception Types and Rethrowing Exceptions with Improved Type Checking
    Underscores in Numeric Literals
    Type Inference for Generic Instance Creation
    Improved Compiler Warnings and Errors When Using Non-Reifiable Formal Parameters with Varargs Methods
Java Virtual Machine (JVM)
    Java Virtual Machine Support for Non-Java Languages
    Garbage-First Collector
    Java HotSpot Virtual Machine Performance Enhancements
JDBC

참고 1 참고 2


1
Java 공식 페이지에서도 찾을 수있는 목록 대신 더 짧은 설명이나 예제를 제공해야합니다.
Ken Block
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.