[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)의 새로운 기능

  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/


답변

Java7에서 Java 프로그래밍 언어 향상

  1. 바이너리 리터럴
  2. switch 문의 문자열
  3. 리소스 또는 ARM ( 자동 리소스 관리 )을 사용해보십시오.
  4. 다중 예외 처리
  5. 억제 된 예외
  6. 리터럴에서 밑줄
  7. Diamond 구문을 사용한 일반 인스턴스 생성을위한 유형 추론
  8. Varargs 메서드와 함께 수정 불가능한 형식 매개 변수를 사용할 때 컴파일러 경고 및 오류 개선

공식 참조
java8 위키 참조에 대한 공식
참조


답변

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

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


답변

일반 인스턴스 생성을 위해 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에서 중요한 추가 사항 이라고 생각 합니다.