Javaの重要な機能

Javaは単純な言語です。 そして、1年間積極的に使用した後、あなたに秘密はありません。 偶然、stackoverfowで、人々 がJavaの隠し機能を共有することを決めたことを発見しました。 それは非常に面白いことが判明し、重要な機会の一種の評価が判明しました。これをロシア語への無料翻訳でさらに記録します。

ダブルブレース


記事の前半ですでに説明した「二重括弧」はゼロ化による「二重括弧」の効果は 大きなマージンです。 メソッドの詳細な説明-
http://www.c2.com/cgi/wiki?DoubleBraceInitialization
間違いなく、これはリストから最もおかしくて最も明白です。 ただし、既に述べたように、このメソッドには、このメソッドを使用するたびに匿名クラスの形式で欠点があります。 そのようなオブジェクトにequals()メソッドを使用することは不可能です。



スレッドローカル


ThreadLocal- http://java.sun.com/javase/6/docs/api/java/lang/ThreadLocal。 html
バージョン1.2以降に存在していた、忘れられがちなクラス。 ジェネリック医薬品と友達を作ることで、さらに魅力的になりました。 このクラスでは、1つの変数がスレッドごとに異なる値を持つことができます。

インスタンス初期化子


この機会があなたの視界を超えた場合-下の例は優れており、余分な言葉なしでそれを示します。 JLSリンク

public class Foo {
public Foo() {
System. out .println( "constructor called" );
}

static {
System. out .println( "static initializer called" );
}

{
System. out .println( "instance initializer called" );
}
}


* This source code was highlighted with Source Code Highlighter .


実行:
new Foo();
new Foo();

出力では次のようになります。
呼び出される静的初期化子
呼び出されるインスタンス初期化子
呼び出されるコンストラクタ
呼び出されるインスタンス初期化子
呼び出されたコンストラクタ

ジェネリック型としてのクラスセットの交差点


パブリッククラスBaz <T extends Foo&Bar> {} -JLSリンク

名前付きブロックとラベル


十分に活用されていないものもありますが、すべてがコンパイルされています。
twoCycle:
{
while ( true ) {
while ( true ) {
break twoCycle;
}
}

}


* This source code was highlighted with Source Code Highlighter .


ところで、予約語constとgotoについての面白い事実を思い出します。 どちらが重要ですが、使用できません。 より多くのタグは楽しい効果を与えます。 以下のコードは問題なくコンパイルされます(すばらしい、大声で言ったように、コンパイラはうなり声を出さずにこれを見逃さないでしょう)
class Example {
public static void main( String [] args) {
System. out .println( "Hello World!" );
http: //Phi.Lho.free.fr

System.exit(0);
}
}


* This source code was highlighted with Source Code Highlighter .


Enumはクラスです


そしてその中で、コンストラクターを定義できます。静的メソッドであり、メソッドではありません。 JLSの詳細。 また、列挙型にはすべての値を返すメソッドがあり、要素の文字列名でオブジェクトを返します。

public static E []値();
public static E valueOf(文字列名);

最後に戻ります


最終的に任意の実行を「食べる」ことができます-jamesjava.blogspot.com/2006/03/dont-return-in-finally-clause.html
public static int f() {
try {
throw new RuntimeException();
} finally {
return 0;
}
}


* This source code was highlighted with Source Code Highlighter .


System.exit(..)のみが最終的に敗北することができます

コレクション



java.util.ArraysのasListメソッドは、バージョン1.5から大幅に変更されました。 以下の式は、可変長、オートボクシング、およびジェネリックの引数のリストがなければ不可能でした。
リスト <整数> ints = Arrays.asList(1,2,3); </ p>

パラメーター化されたメソッドのタイプは、次の方法で指定できます。
コレクション。< String 、Integer> emptyMap()

静的インポートは、その曖昧さすべてのために、見事な局所性の効果を作成するのに役立ちます。
List < String > ls = List ( "a" , "b" , "c" );
List <Map< String , String >> data = List (Map( o( "name" , "michael" ), o( "sex" , "male" )));


詳細gleichmann.wordpress.com/2008/01/13/building-your-own-literals-in-java-lists-and-arraysおよびcode.google.com/p/google-collections
jqueryファンの場合は、$記号を使用してください: garbagecollected.org/2008/04/06/dollarmaps

最後に、別のサブアイテム-List.subList(int fromIndex、int toIndex)は元のオブジェクトのビューを返します。
文書化されているが、あまり一般的ではない機能。 サブリストを操作できますが、サブリストへの変更は親オブジェクトに反映されます。

URLクラス


式の値
 新しいURL( "http://www.yahoo.com").equals(新しいURL( "http://209.191.93.52")) 
-本当

最終変数の初期化


最終変数の初期化が遅れる場合があります
public Object getElementAt( int index) {
final Object element;
if (index == 0) {
element = "Result 1" ;
} else if (index == 1) {
element = "Result 2" ;
} else {
element = "Result 3" ;
}
return element;
}


* This source code was highlighted with Source Code Highlighter .


スレッドダンプ


stdoutのすべてのスレッドのダンプ:
windows:アプリケーションが実行されているコンソールでCTRL-Break
UNIX:-3 PIDを強制終了

Source: https://habr.com/ru/post/J67483/


All Articles