約束されたように、次の5つの点に注目します。あまり知られていないJava機能。 前編6.名前の競合。異なるパッケージから同じ名前の複数のクラスをインポートすると、名前の競合が発生します。 この場合、クラスを参照するときは、その修飾名、つまりパッケージの名前を含む完全な名前、たとえば
java.langを示す必要があり
ます 。
ひもあなたはそれについて何もできないのですか? それはあなたができることが判明しました。 Listクラスがjava.awtパッケージとjava.utilパッケージの両方に存在するという事実にもかかわらず、次のコードは問題なくコンパイルされます。
import java.awt.*; import java.util.*; import java.util.List; public class { public static void main(String... ) { List = Collections.emptyList(); System.out.println(); } }
必要なクラス、この例ではjava.util.Listをインポートするだけで十分です。
ここでは、お気付きのとおり、キリル文字の識別子が使用されています。 はい! 一部の人にとっては啓示になりますが、Java ...そのようなJavaです。 識別子は、数字、アンダースコア、および米国通貨に加えて、絶対に
任意の文字で構成できます(ただし、最後の文字($)はお勧めできません。システムのニーズに対応しています)。 しかし、私たちはそれを必要としますか? 難読化の目的でない限り。 英語、ロシア語、ギリシャ語のアルファベットの「A」文字から生成できるさまざまな識別子を想像してください...
7.コレクションの初期化。コレクションの初期化を簡素化し、コードの認識を容易にするために、どのようなトリックを使用する必要はありません。 SDKの5番目のバージョンに登場したメソッドの
可変引数 (
varargs )と、標準APIの開発者による注意深い更新のおかげで、状況は少し良くなりました。
List<Integer> theNumbers = new LinkedList<Integer>(); Collections.addAll(theNumbers, 4, 8, 15, 16, 23, 42);
しかし、このコードは1行ではなく2行を使用し、論理的に関連しているようには見えません。 Googleコレクションなどのサードパーティのライブラリを使用したり、独自の自転車を発明したりできますが、より適切なオプションがあります。
List<Integer> theNumbers = new LinkedList<Integer>(Arrays.asList(4, 8, 15, 16, 23, 42));
また、同じバージョンのJavaで静的インポートが出現すると、この構成をもう1語短くすることができます。
import static java.util.Arrays.*;
ただし、コレクション内の要素の数が変わらない場合、次のように簡単に記述できます。
import static java.util.Arrays.*;
これらのトリックを使用すると、収集インターフェイスの収集相続人を初期化できますが、残念ながらこれはカードでは機能しません。 解決策はあります
が、記事の
前の部分をご覧ください。
8.サブスクリプション。特にArrayListとLinkedListの継承元であるjava.util.Listインターフェイスには、List.subList()という素晴らしいメソッドがあります。 見た目では新しいリストではなく、このメソッドが呼び出され
たリストの
ビューを返すため、両方のリストが保存されたアイテムを分離します。 これから、優れた特性が続きます。
someList.subList(3, 7).clear();
この例では、3番目から7番目までの4つの要素(包括的ではない)がsomeListのリストから削除されます。
サブリストは、非常に強力なプログラミングのイディオムである
範囲として使用できます。 たとえば、最初または最後の要素を除いて、コレクションをどのくらいの頻度で移動する必要がありましたか? Foreachはさらに強力になりました。
import static java.util.Arrays.*;
サブリストは、本質から生じる機能のため、注意して使用する必要があります(詳細についてはドキュメントを参照してください)。
9.カフェベイビー。コンパイルされたすべてのクラスとインターフェースは、拡張子が.classの特別なファイルに保存されます。 Java仮想マシンによって解釈されるバイトコードが含まれています。 これらのファイルをすばやく認識するために、最初の4バイトに、16進数で0x
CAFEBABEのようなラベルが含まれています。
まあ、最初の言葉ですべてが明確です-あなたが知っているように、Javaは熱帯の島にちなんで命名されませんでしたが、同じ名前のコーヒー、および16進数システムで使用される文字の中で、文字「J」と「V」は見つかりませんでした しかし、開発者を導き、2番目の単語を発明したのは、推測しかできません:)
10.例外的な状況。そして最後に、小さなコード:
try { throw null; } finally { return; }
NullPointerExceptionをスローし、...迷子になり、跡形もなく消えます! 警戒してください。