Java 7の新機能


回答:


211

JDK 7リリースノートからのJava SE 7の機能と拡張機能

これは、OpenJDK 7機能ページからのJava 7新機能の要約です

vm JSR 292:動的に型付けされた言語のサポート(InvokeDynamic)
        厳格なクラスファイルチェック
lang JSR 334:小さな言語の機能強化(Project Coin)
コアアップグレードクラスローダーアーキテクチャ
        URLClassLoaderを閉じるメソッド
        並行性とコレクションの更新(jsr166y)
i18n Unicode 6.0
        ロケールの強化
        個別のユーザーロケールとユーザーインターフェイスロケール
ionet JSR 203:Javaプラットフォーム向けの新しいI / O API(NIO.2)
        zip / jarアーカイブ用のNIO.2ファイルシステムプロバイダー
        SCTP(ストリーム制御伝送プロトコル)
        SDP(Sockets Direct Protocol)
        Windows Vista IPv6スタックを使用する
        TLS 1.2
sec楕円曲線暗号(ECC)
jdbc JDBC 4.1
Java 2DのクライアントXRenderパイプライン
        6u10グラフィック機能用の新しいプラットフォームAPIを作成する
        SwingのNimbusルックアンドフィール
        Swing JLayerコンポーネント
        Gervillサウンドシンセサイザー[NEW]
XMLスタックを更新する
mgmt拡張MBean [更新]

Java 1.7の新機能のコード例

リソースを試すステートメント

この:

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

3
改善された型推論は、参照が型付けされている奇妙な変更を伴うC#からの悲しいコピーのようですが、オブジェクトはそうではありませんか?コメディー!
Zasz

1
@Zasz、はい、確かに、それは継続的な改善にあります
didxga

質問はOPです。あなたの意見は何ですか?これらの機能強化は生産性の面だけにありますか、それともプログラムのパフォーマンスを本当に向上させることができますか?バイトコードが変更されない場合、バイトコードが1.5とマークされた状態で新しい言語拡張を使用できますか?
Dmitriy R

言語の改善ではありませんが、新しいObjectsクラスがあり、null参照をチェックする必要がないように静的メソッドが用意されています。例:にif (obj != null && obj.equals(anotherObj))なるif (Objects.equals(obj, anotherObj))
Carcamano 2016年

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以降では、1つの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のために、ファイルシステムにアクセスするための包括的なサポートを提供しています。JDK 7ではzipファイルシステムプロバイダーも利用できます。

出典: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公式ページでも確認できる短い説明や例を提供する必要があります。
ケンブロック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.