そして、ソースが
JDKツール
ほとんどの人が、JDKには非常に多くのツールが含まれていることを知っています。 ただし、日常の作業では、java、javac、jar以外の多くの人は使用しないと思います。 binフォルダーから他に何を取得できますか:
- jstack -PIDによってJavaアプリケーションのスレッドダンプを作成できます。
- jvisualvm-監視、プロファイリング用の新しい(1.6_07 +)グラフィカルシェル。
- javap-
デコンパイラ逆アセンブラ。jvm命令を表示できます 。 - 残り: java.sun.com/javase/6/docs/technotes/tools
Java VM
JVMは、 Jython 、 JRuby 、 Groovy 、 Scalaなどの他のプログラミング言語からバイトコードにコンパイルされたコードを実行できます
システムトレイ
Java 1.6以降、システムトレイにアイコンを追加できます: http : //java.sun.com/docs/books/tutorial/uiswing/misc/systemtray。 html
動的プロキシ
1.3で追加された動的プロキシにより、指定されたインターフェイスによって実行時に新しいタイプを決定できます。
あなたはそれを知っていますか:
-ネイティブメソッドSystem.arraycopyを使用して配列の高速コピーが可能(...)
-thisキーワードを使用すると、内部クラスのフィールドとメソッドにアクセスできます。 たとえば、内部クラスに同じ名前のメソッドまたはフィールドがある場合:OuterClass.this.methodName()またはOuterClass.this.fieldName。
*非静的内部クラスの場合のみ-gribozavr
-Java 1.5は可変長引数リストを受け取りました:
public void foo( String ... bars) {
for ( String bar: bars)
System. out .println(bar);
}
-instanceofがオプションになる前にnullをチェックする:
if(null!= aObject && aObject instanceof String){
と同じ
if(aObject instanceof String)
-Serializableの魔法のシリアル化がありますが、private writeObject、readObjectメソッドを介したExternalizableオブジェクトはありません。
java.sun.com/developer/technicalArticles/Programming/serialization
-プリミティブのクラスは、int.class、float.class ...を使用して取得できます。
-プリミティブに加えて、+および+ =が機能する唯一のタイプはStringクラスです。 構築str = str +“ 1”は、コンパイラによってstr = new StringBuffer(str).append(“ 1”)。ToString()に置き換えられます。 ループ内で文字列を連結していますか?
* Java 1.5以降では、 StringBuilderが使用されます-malkolm
-Cスタイルのsprintfはjavaで使用可能です。String.format()を試してください。
String w = «world»;
String s = String .format(«Hello %s %d», w, 3);
-float i = Float.NaNの場合-式i == iはfalse
*これはIEEE 754要件で、Double.isNan()を使用してNaNのdoubleを確認できます-gribozavr
セミクローズドコンストラクター
ソース: javaekspert.blogspot.com/2007/11/semi-private-constructors.html
オブジェクトの作成を他のクラスからアクセスできないようにする(たとえば、ファクトリを使用する場合)か、一部のコンストラクタへのアクセスをブロックして、オブジェクトの「プライベートプロパティ」であると宣言する必要が非常によくあります。 ただし、単体テスト中に独自のレーキを踏む必要があります-オブジェクトを作成することは不可能です。
保護されたコンストラクターと匿名クラスを使用して、セミクローズコンストラクターが助けになります。 例:
UserクラスがUser(int id)コンストラクターの1つを非表示にし、User(String name)のみを使用可能にしたい場合、これがその権利です。 ただし、次のようにクラスを宣言します(プライベートではなく、保護されています):
public class User { // User final
protected User( int id) {…}
public User( String name) {
this (getId(name));
}
}
つまり、最初のコンストラクターを後で使用するための抜け穴を残します。つまり、
public class TestUser {
public void testUserIdConstructor() {
User hack = new User(1) {};
}
}
また、変数hackには、コンストラクターUser(1)を呼び出すことにより、Userから継承された匿名クラスのオブジェクトが割り当てられました。
自己結合ジェネリック
クラスSelfBounded <TはSelfBoundedを拡張> {
}
Bruce Eckelの記事からwww.artima.com/weblogs/viewpost.jsp?thread=136394
ジェネリックに関する巨大な FAQのロード-あなたが尋ねることを恐れていたすべて: www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html
そして再び列挙型について
Enumはインターフェイスを実装できます
public interface Room {
public Room north();
public Room south();
public Room east();
public Room west();
}
public enum Rooms implements Room {
FIRST {
public Room north() {
return SECOND;
}
},
SECOND {
public Room south() {
return FIRST;
}
}
public Room north() { return null ; }
public Room south() { return null ; }
public Room east() { return null ; }
public Room west() { return null ; }
}
ブラックマジック
別の方法では、それを言語と呼ぶことは変わりません。 ドラムロール...
sun.misc.Unsafeクラスを使用すると、アプリケーションでメモリを直接管理できます。 次のことができます。
- コンストラクターを呼び出さずにオブジェクトを作成する
- 例外をスローリストに定義せずに例外をスローします。
- メモリブロックの割り当て、解放、コピー
- 同期宣言なしでオブジェクトモニター(ロック/ロック解除)を取得して返す
-
バイトコードからクラスを宣言します-このアイテムは、カスタムClassLoaderで作業する人々を混乱させます
なぜこれだけなのか、私は尋ねたいのですか? 私は答えを見つけることができず、このクラスを甘やかすとJVMを殺すことができると思います
ソース-
http://www.docjar.com/html/api/ClassLib/Common/sun/misc/Unsafe.java。 html
もう一つの興味深いリンクは、すでにロシア語で-
http://wasm.ru/article.php?article=unsjav1
http://wasm.ru/article.php?article=unsafe_ii
オープンソースで使用:
グーグルコード検索
*ソースコードはソースコードハイライターで強調表示されました。