Java 5、Java 6、Java 7の新しい特性を詳しく理解する

6540 ワード

Java5:
1、汎用Generics:
汎用型を参照すると、集合内の要素のタイプを指定でき、強制型変換を回避し、コンパイル時にタイプチェックを行うことができるメリットがあります.パラメータと戻り値としてParameterized Typeを使用し、Genericはvararg、annotation、enumeration、collectionの基石です.
A、タイプ安全
リスト、Mapを捨てて、List、Mapを使って要素を追加したり、Iterator遍歴を使ったりすると、コンパイル期間でタイプエラーをチェックできます
B、メソッドパラメータと戻り値にTypeを加算
List,Mapを捨ててList,Mapを使う
C、タイプ変換不要List list=new ArrayList();
String str=list.get(i);

D、タイプワイルドカード「?」
リスト内の要素を印刷する方法printListを仮定すると、任意のタイプのTのリストを印刷することができることを望んでいます.
コード:

public void printList(List list,PrintStream out)throws IOException{
for(Iterator i=list.iterator();i.hasNext();){
System.out.println(i.next.toString());
}
}

ワイルドカードなら?パラメータの種類が広すぎて、リスト、Iteratorを
List、Iteratorはそれを制限します.
2、列挙タイプEnumeration:
3、自動梱包解体(自動タイプ包装と解包)autoboxing&unboxing:
簡単に言えばタイプ自動変換です.
自動梱包:基本タイプは自動的に梱包類(int―Integer)に転換する
自動梱包:梱包類が自動的に基本タイプに変わる(Integer―int)
4、可変パラメータvarargs(varargs number of arguments)
パラメータタイプと同時に、リロード関数を統合しました.次のようになります.

public void test(object... objs){
for(Object obj:objs){
System.out.println(obj);
}
}

5、Annotations javaのmetadataです
A、Tigerで予め定義されている3種類の標準annotation
a 、Override
あるmethodがsuperclassのmethodを上書きしていることを指摘します.上書きするメソッド名のスペルを間違えた場合、コンパイルは通過しません.
b、Deprecated
methodまたはelementタイプの使用がブロックされていることを示し、サブクラスはメソッドを上書きできません.
c、SupressWarnings
class、method、field、variable初期化のコンパイル期間警告を閉じます.たとえば、リストにGenericが使用されていない場合、@SuppressWarnings(「unchecked」)はコンパイル期間警告を削除します.
B、カスタムannotation
public @interface Marked{}
C、meta-annotation
あるいはannotationのannotation
4つの標準のmeta-annotationはすべてjavaに定義されている.lang.annotaionパッケージ:
a, Target
定義したannotationが使用できるプログラムユニットを指定します.
ターゲットが指定されていない場合は、annotationが任意のプログラムユニットで使用できることを示します.
コード#コード#

 @Target({ElementType.ANNOTATION_TYPE, 
       ElementType.CONSTRUCTOR, 
       ElementType.FIELD, 
       ElementType.LOCAL_VARIABLE, 
       ElementType.METHOD, 
       ElementType.PACKAGE, 
       ElementType.PARAMETER, 
       ElementType.TYPE}) 
  public @interface TODO {} 

b, Retention
Javaコンパイル期間がannotationにどのように対応するかを指摘する
annotationはコンパイル期間中に失われたり、コンパイルされたclassファイルに保存されたりすることができます.
annotationが保持されている場合は、JVMがclassをロードしたときにannotationを読み込むかどうかも指定します.
コード#コード#

 @Retention(RetentionPolicy.SOURCE) // Annotation        
  public @interface TODO1 {} 
  @Retention(RetentionPolicy.CLASS)  // Annotation   class   ,   JVM   
  public @interface TODO2 {} 
  @Retention(RetentionPolicy.RUNTIME) // Annotation   class      JVM   
  public @interface TODO3 {} 

c, Documented
定義されたannotationがよく知られているプログラムユニットと見なされる公開APIの1つであることを指摘する
@Documentedでマークアップされたannotationはjavadocに表示されます.これは、annotationがマークアップした要素がクライアントで使用されているときに影響を与える場合に役立ちます.
d, Inherited
このmeta-annotationはclassをターゲットとするannotationタイプに適用され、このannotationでマークされたclassは親クラスのannotationを自動的に継承します.
D,Annotationの反射
javaを見つけたlang.Classには、getAnnotations、isAnnotationpresentなど、Annotationの反射に関連する方法がたくさんあります.
Modelオブジェクトの検証にカスタムAnnotationなど、Annotation反射を使用して多くのことを行うことができます.
コード#コード#

 @Retention(RetentionPolicy.RUNTIME) 
  @Target({ ElementType.FIELD, ElementType.METHOD }) 
  public @interface RejectEmpty { 
    /** hint title used in error message */ 
    String value() default ""; 
  }    
  @Retention(RetentionPolicy.RUNTIME) 
  @Target( { ElementType.FIELD, ElementType.METHOD }) 
  public @interface AcceptInt { 
    int min() default Integer.MIN_VALUE; 
    int max() default Integer.MAX_VALUE; 
    String hint() default ""; 
  } 

@RejectEmptyと@AcceptIntを使用して、私たちのModelのfieldをマークし、反射を利用してModelの検証を行います.
6、新しい反復文(for(int n:numbers))
7、静的インポート(import static)
8、新しいフォーマット方法(java.util.Formatter)formatter.format("Remaining account balance: $%.2f", balance);
9、新しいスレッドモデルと同時ライブラリThread Framework
HashMapの代替者ConcurrentHashMapとArrayListの代替者CopyOnWriteArrayList
大量同時読み出し時にjavaを採用する.util.パッケージのいくつかのクラスは、BlockingQueue、Callable、Executor、Semaphoreに満足しています. 
Java6:
1、スクリプトエンジンをサポートする新しいフレームワークを導入した
2、UIの強化
3、WebServiceサポートの強化(JAX-WS 2.0とJAXB 2.0)
4、一連の新しいセキュリティ関連の強化
5、JDBC4.0
6、Compiler API
7、共通のAnnotationsサポート
 Java7:
1,switchで文字列が使えるようになりました

String s = "test"; 
switch (s) { 
case "test" : 
System.out.println("test"); 
case "test1" : 
System.out.println("test1"); 
break ; 
default : 
System.out.println("break"); 
break ; 
}

2.List tempList=new ArrayList<>();すなわち、汎用インスタンス化タイプの自動推定
3.配列とは限らず、構文的に集合をサポートfinal List piDigits = [ 1,2,3,4,5,8 ];
4.環境情報を取得するためのツールの追加

File System.getJavaIoTempDir() // IO     
File System.getJavaHomeDir() // JRE     
File System.getUserHomeDir() //       
File System.getUserDir() //   java        5

5.Booleanタイプ反転、空ポインタ安全、ビット演算に参加

Boolean Booleans.negate(Boolean booleanObj)
True => False , False => True, Null => Null
boolean Booleans.and(boolean[] array)
boolean Booleans.or(boolean[] array)
boolean Booleans.xor(boolean[] array)
boolean Booleans.and(Boolean[] array)
boolean Booleans.or(Boolean[] array)
boolean Booleans.xor(Boolean[] array)

6.2つのchar間のequalsboolean Character.equalsIgnoreCase(char ch1, char ch2)
7.安全な加減乗除

int Math.safeToInt(long value)
int Math.safeNegate(int value)
long Math.safeSubtract(long value1, int value2)
long Math.safeSubtract(long value1, long value2)
int Math.safeMultiply(int value1, int value2)
long Math.safeMultiply(long value1, int value2)
long Math.safeMultiply(long value1, long value2)
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)

8.mapコレクションは同時要求をサポートし、Mapmap={name:“xxx”,age:18}と書くことができる.
この文章が必要な友达を助けることができることを望みます