1。JavaJDK1.5の新機能
1。ジェネリック:
リスト<String> strs = new ArrayList <String>(); //コレクションのストレージタイプを指定します。上記のコレクションにデータを保存する場合、文字列のデータを保存する必要があります。そうしないと、コンパイラがエラーを報告します
2.実際に
たとえば、上記のコレクションを実際に通過することができます。これにより、簡単かつ明確になります。
for(string s:strs){system.out.println(s);}注:for-eachを使用してコレクションをトラバースする場合、トラバースへのコレクションはIteratorインターフェイスを実装する必要があります
3。自動解除機能と梱包機能
コードコピーは次のとおりです。
それはどういう意味ですか?
JDK1.5基本データ型ごとにカプセル化クラスを定義します。 Javaの基本的なデータ型には、たとえば、int-> integerなど、独自のオブジェクトもあります。
ダブル - > double、
長い - > long、
char->文字、
フロート - >フロート、
ブール - > boolean、
短い - >短い、
バイト - > byte
自動パッケージ:基本タイプをオブジェクトに変換します。たとえば、int-> integer
自動開梱:オブジェクトを基本的なデータ型に変換します。たとえば、整数 - > int
JDK1.5の前にコレクションが基本的なデータ型を保存できなかったという問題を解決できるようになりました。
4。列挙:
列挙は、JDK1.5によって導入された比較機能です。キーワードは列挙です
例:信号を表す列挙を定義します
パブリックエインムミューナム{赤、緑、黄色}5。変数パラメーター
それはどういう意味ですか?例を挙げましょう。JDK1.5の前に、同じタイプの複数のパラメーターをメソッドに渡したいとき、それを解決するための2つの方法がありました。1。配列を直接渡し、2。
例えば:
public void printcolor(string red、string green、string yellow){}または
public void printcolor(string [] colors){}この方法でメソッドパラメーターを作成することは、私たちが望む効果を実現できますが、これは少し面倒ではありませんか?さらに、パラメーターの数が不確かな場合はどうすればよいですか? Java JDK1.5によって提供される変数パラメーターは、この問題を完全に解決できます。たとえば、:
public void printcolor(string ... colors){}
このように定義できますが、どういう意味ですか?パラメーターが同じタイプの場合、フォーム「タイプ + 3ポイント、その後パラメーター名」を使用できます。これの利点は、パラメータータイプが同じである限り、渡されるパラメーターの数に制限がないことです。変数パラメーターはパラメーターリストの最後の項目でなければなりません(この機能はオブジェクトと基本データ型の両方に適用されます)
6。静的インポート
利点:静的インポートを使用すると、現在のクラスで直接見えるインポートクラスのすべての静的変数と静的メソッドを作成できます。これらの静的メンバーを使用すると、クラス名を与える必要はありません。
短所:過剰使用により、コードの読みやすさが低下します
7。スレッドコンカレンシーライブラリ
Thread Concurrency Libraryは、Java 1.5によって提案されたマルチスレッドの高度な機能です。パッケージにあります:java.util.concurrent
含む
1。ThreadMutexツールクラスの説明:Lock、RedWriteLock
2。スレッド通信の説明:条件
3。スレッドプール
executorservice
3.キューを同期します
arrayblockingqueue
4。コレクションを同期します
concurrenthashmap、copyonwritearraylist
5。スレッド同期ツール
セマフォ
Thread Concurrencyライブラリにはまだ多くの(非常に重要な)内容があるため、ここには1つずつリストしません。興味のある友達はヘルプ文書をチェックできます。
2。JDK1.6の新機能
1.DeskTopクラスおよびSystemTrayクラス
前者を使用して、システムのデフォルトブラウザを開いて指定されたURLを参照し、システムデフォルトの電子メールクライアントを開き、指定された電子メールアドレスにメールを送信し、デフォルトアプリケーションを使用してファイルを開いたり編集したりします(たとえば、TXTを使用してTXTを使用してファイルを開きます)。後者は、システムトレイ領域にトレイプログラムを作成するために使用できます。
2。JaxB2を使用して、オブジェクトとXML間のマッピングを実装します
JaxBは、XMLバインディングのJavaアーキテクチャの略語であり、JavaオブジェクトをXML形式に変換でき、その逆も同様です。
オブジェクトとリレーショナルデータベースORM間のマッピングを呼び出します。実際、オブジェクトとXML間のマッピングはOXMと呼ばれることもあります(オブジェクト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およびWebサービスも注釈を通じて開発を簡素化します。さらに、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ドキュメントを処理するには2つの方法があります。DOM(ドキュメントオブジェクトモデル)とSAX(XMLの単純API)。
JAXB2(JSR 222)およびJAX-WS 2.0(JSR 224)がJDK1.6.0を使用しているため、SunはSTAXをJAXPファミリーに追加し、JAXPバージョンを1.4にアップグレードすることにしました(JAXP1.4はJAXP1.3のメンテナンスバージョンです)。 JDK1.6のJAXPバージョンは1.4です。 STAXは、プルパルシングXMLドキュメントを使用するAPIであるXMLの略語のストリーミングAPIです。 STAXは、イベントイテレーターに基づいてAPIを提供し、プログラマーがXMLドキュメントの解析プロセスを制御できるようにします。このプログラムは、このイベントのイテレーターを横断して、各解析イベントを処理します。解析イベントは、プログラムによって引き出されていると見なすことができます。つまり、プログラムはパーサーに解析イベントを生成し、イベントを処理し、パーサーに次の解析イベントを生成させます。このループは、ドキュメントの終了文字に遭遇するまでです。 SAXはまた、イベントに基づいてXMLドキュメントを処理しますが、プッシュモードを使用して解析します。パーサーが完全なXMLドキュメントを解析した後、解析イベントのみを生成し、それらをプログラムに押してこれらのイベントを処理します。 DOMは、XMLドキュメント全体をメモリツリーにマッピングする方法を採用して、親ノード、チャイルドノード、ブラザーノードのデータを簡単に取得できますが、ドキュメントが大きい場合はパフォーマンスに深刻な影響を与えます。
4.コンパイラAPIを使用します
これで、JDK1.6(JSR 199)のコンパイラAPIを使用して、Javaソースファイルを動的にコンパイルできます。コンパイラAPIは反射関数を組み合わせて、Javaコードの動的生成を実現し、これらのコードをコンパイルおよび実行します。これは少し動的な言語機能です。
この機能は、JSP Webサーバーなどの動的なコンパイルが必要な一部のアプリケーションに非常に役立ちます。 JSPを手動で変更するとき、効果を確認するためにWebサーバーを再起動したくありません。この時点で、コンパイラAPIを使用して、JSPファイルの動的コンパイルを実装できます。もちろん、現在のJSP WebサーバーはJSPホット展開もサポートしています。現在のJSP Webサーバーは、runtime.execまたはProcessBuilderを介してJavacを呼び出して、操作中にコードをコンパイルします。この方法では、コンピレーションを行うために別のプロセスを生成する必要がありますが、これは十分にエレガントではなく、コードを特定のオペレーティングシステムに依存させるのが簡単です。コンパイラAPIは、使いやすい標準APIのセットを介して動的なコンパイルを行うためのより豊かな方法を提供し、クロスプラットフォームです。
5。LightWeightHTTPサーバーAPI
JDK1.6は、単純なHTTPサーバーAPIを提供します。これによれば、HTTPおよびHTTPSプロトコルをサポートし、HTTP1.1の実装の一部を提供する独自の組み込みHTTPサーバーを構築できます。実装されていない部分は、既存のHTTPサーバーAPIを拡張することで実装できます。プログラマーは、それ自体でhttphandlerインターフェイスを実装する必要があります。 HTTPSERVERは、クライアントリクエストを処理するためにHTTPhandler実装クラスのコールバックメソッドを呼び出します。ここでは、HTTPリクエストとその応答をExchangeと呼びます。これはHTTPExchangeクラスに包まれています。 httpserverは、httpexchangeをhttphandler実装クラスのコールバックメソッドに渡す責任があります。
6。プラグ可能な注釈処理API(プラグ可能な注釈処理API)
プラグインアノテーション処理API(JSR 269)は、注釈を処理するための標準APIを提供します(JSR 175)
実際、JSR 269は注釈を扱うためだけに使用されるわけではありません。より強力な機能は、Java言語自体のモデルを確立することだと思います。メソッド、パッケージ、コンストラクター、タイプ、変数、列挙、タイプと要素への注釈などのJava言語要素(2つの違いは何ですか?)をマッピングし、それによってJava言語のセマンティクスをオブジェクトにマッピングします。これらのクラスは、javax.lang.modelパッケージの下で見ることができます。そのため、JSR 269が提供するAPIを使用して、機能が豊富なメタプログラム環境を構築できます。 JSR 269は、注釈プロセッサを使用して、操作中ではなく、コンピレーション中に注釈を処理します。注釈プロセッサは、コンパイラのプラグインに相当するため、挿入注釈処理と呼ばれます。注釈プロセッサが注釈(プロセスメソッドの実行)を処理するときに新しいJavaコードが生成された場合、コンパイラは再び注釈プロセッサを呼び出します。 2番目の処理に対して新しいコードが生成された場合、新しいコードが生成されなくなるまでアノテーションプロセッサを呼び出します。プロセス()メソッドが実行されるたびに、「ラウンド」と呼ばれるため、注釈処理プロセス全体をラウンドシーケンスと見なすことができます。
JSR 269は、主にツールまたはコンテナのAPIとして設計されています。たとえば、注釈ベースのユニットテストフレームワーク(TestNGなど)を確立して、注釈を使用して、テスト中に実行する必要があるテスト方法を特定したいと考えています。
7.コンソールを使用してコンソールプログラムを開発します
JDK1.6は、文字ベースのコンソールデバイスにアクセスするために特別に使用されるjava.io.consoleクラスを提供します。プログラムがWindowsまたはLinuxの下でターミナルの下で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やWebサービスなど)が注釈部分を使用してXMLファイルを置き換えて、実行パラメーター(またはEJBの宣言的取引などの宣言プログラミングをサポート)を構成します。これらのテクノロジーが一般的な目的のために独自の所有物を個別に定義する場合、それは明らかに少し複製された構造です。したがって、他の関連するJavaテクノロジーの一連の公開注釈を定義することは価値があります。重複する構造を避けながら、Java SEとJava EEのさまざまな技術の一貫性を確保することもできます。
次のリスト10の注釈の一般的な注釈保持保持ターゲット説明生成されたsourceannotation_type、コンストラクター、フィールド、local_variable、メソッド、パッケージ、パラメーター、タイプ。注釈によって生成されたソースコードは、生成されたリソースのラベルに使用されます。コンテナは、これに従って外部リソースの依存関係を注入します。フィールドベースの注入とセッターベースの注入の2つの方法があります。リソースランタイム。タイプラベル複数の外部依存関係を同時に。コンテナは、これらのすべての外部依存関係をポストクトラントタイムメソッドに注入します。このメソッドは、容器がすべての依存関係を注入した後に実行され、依存性噴射後に初期化作業を実行します。 1つのメソッドのみにラベルを付けることができるメソッドは、Pestruct Predestroy Runtimeメソッドとラベル付けされています。オブジェクトインスタンスがコンテナから削除される前に、実行するコールバックメソッドにラベルを付ける必要があります。このセキュリティの役割は、コンテナのセキュリティの役割と一致する必要があります。 Rolesallowed Runtime Type、メソッドは、ラベル付きクラスまたはメソッドの実行を可能にするセキュリティロールのラベルに使用されます。このセキュリティの役割は、コンテナセキュリティの役割と一致する必要があります。メソッドを使用すると、すべての役割がラベル付きクラスまたはメソッドを実行できます。 Denyallランタイムタイプ。メソッドでは、ラベル付きクラスまたはメソッドを実行することはできません。これは、クラスまたはメソッドがJava EEコンテナで実行できないことを示します。 decrarerolesランタイムタイプは、アプリケーションでテストできるセキュリティロールを定義するために使用されます。通常、Isuserinroleを使用してセキュリティの役割を検証するために使用されます。
知らせ:
1。ロールアラウルド、プリミタル、およびdenyallは、クラスまたはメソッドの役割に適用できません。 Java SE6.0には、上記の表に最初の5つの注釈の定義クラスのみが含まれており、これらの注釈を処理するためのエンジンは含まれていません。この作業は、プラグ可能な注釈処理API(JSR 269)によって行うことができます。
1.6の新機能と比較して、1.7の新機能は、私たちが楽しみにしていて具体的なものであるため、私たちをより興奮させます。
3。JDK1.7の新機能
1。バイナリ額面
Java7では、シェーピングのタイプの値(Byte、Short、Int、Long)は、バイナリタイプで表すことができます。バイナリ値を使用する場合、OBまたはOBを前に追加する必要があります。たとえば
int a = 0b01111_00000_11111_00000_10101_01010_10;短いB =(短い)0B01100_00000_11111_0;バイトc =(byte)0b00000_0001;
2。スライディングラインのデジタル変数のサポート
JDK1.7は、数値タイプの変数にスライドラインを追加できます。
しかし、追加できない場所がいくつかあります
1.数の開始と終了
2。小数点の前後
3。たとえば、fまたはlの前:
int num = 1234_5678_9;
float num2 = 222_33f;
long num3 = 123_000_111L;
3。文字列のスイッチのサポート
あなたはいつも以前に疑問符を持っていましたか?なぜJavaでC#が利用可能であるのですか? ha、しかし、JavaはJDK1.7の後にも大丈夫です。たとえば
文字列status = "orderstate"; switch(status){case "OrderCancel":System.out.println( "Order Cancellation");壊す; case "Orderuccess":System.out.println( "サブスクリプション成功");壊す;デフォルト:system.out.println( "ステータス不明"); }4.リソースとトリー
リソースを試してみると、1つ以上のリソースを定義する試行宣言です。このリソースは、プログラムが処理された後に閉じる必要があるオブジェクトを指します。処理が完了した後、すべてのリソースが閉じられていることを確認してください。
リソースと一緒に使用できるリソースは次のとおりです。
java.lang.autoclosableインターフェイスjava.io.closableインターフェイスを実装するオブジェクト。
例えば:
public static string readfirstlinefromfile(string path)throws ioexception {try(bufferedreader br = new bufferedReader(new fileReader(path))){return br.readline(); }}
Java 7以降のバージョンでは、BufferedReaderはjava.lang.autoclosableインターフェイスを実装します。
BufferedReaderは、リソース宣言のtryで定義されているため、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(); }}利点:1つのキャッチを使用して複数の例外を処理することは、複数のキャッチを使用して1つの例外を処理することによって生成されたバイトコードの1つの例外を処理するよりも小さくて効率的です。
6。ジェネリックを作成するときに推論を入力します
コンパイラがコンテキストからタイプパラメーターを推測できる限り、一般的なパラメーターを空の角度ブラケットのペアに置き換えることができます<>。このブラケットのペアは、個人的にダイヤモンドと呼ばれます。 Java SE 7の前に、一般的なオブジェクトを宣言するときにこれを行う必要があります
List <String> list = new ArrayList <String>();
そして、Java SE7の後、これを行うことができます
リスト<文字列>リスト= new arrayList <>();
コンパイラは以前の(リスト)からタイプパラメーターを推測できるため、後続のアレイリストの後に一般的なパラメーターを記述することはできなくなり、空の角度ブラケットのペアを使用します。もちろん、「ダイヤモンド」<>を携帯する必要があります。そうしないと、警告があります。
Java SE7は限られたタイプの推論のみをサポートします。コンストラクターのパラメーター化されたタイプがコンテキストで大幅に宣言されている場合にのみ、タイプ推論を使用できます。それ以外の場合は機能しません。
リスト<文字列>リスト= new arrayList <>(); list.add( "a"); //これはlist.addall(new ArrayList <>()); //これはリスト<になりますか?文字列> list2 = new arrayList <>(); list.addall(list2);
7。(なし)
8.環境情報を取得するためにいくつかの新しいツールと方法を追加します
例えば:
file System.getuserhomedir()//現在のユーザーディレクトリファイルsystem.getUserdir()// javaプロセス5 file system.getjavaiotempdir()// io一時的なフォルダーファイルsystem.getjavahomedir()// jreインストールディレクトリ
9。安全な追加、減算、乗算、および分割
例えば:
int math.safetoint(long value)int math.safenegate(int value)long math.safesubtract(long value1、int value2)long math.safesubtract(long value1、long値Math.safenegate(long value)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バージョンについてわからない場合は、新しい機能を使用しないでください。そうしないと、これに問題がある可能性があります。