図1は、間違いなく事実を「丸め」()メソッドラウンド、その実現はMath.floor(X + 0.5)であり、床は、方法切り捨て床です。結果ラウンド(-1.7)-1、-2の代わりに。
図2に示すように、文字列strは= "I" と文字列str =新しい文字列( "I");違いがありますか?
A:①異なる記憶空間、前者の方法は、ヒープ上に格納された定数プール領域に格納されます。
②別の使用は、「i」は定数プール自体ものと同じアドレス空間へのアドレス、定数プールは、2つの異なる定数を有することを許可されていない、S1 =「I」とs2 =「i」の点を表します。
しかし、S1 =新しい文字列(「I」)とs2 =新しい文字列(「I」)の異なるアドレス空間を指します。
3、==とequals()との違いは非常に重要です。
- ==比較が引用されています
- 彼らは実際のコンテンツを比較することができます前に、等号(Objectクラスから来て継承される)デフォルトでは()メソッドは、実際のコンテンツを比較するのですが、気をつけて、等号()メソッド、唯一のequalsを書き換える()メソッドは、オブジェクト参照を比較します。
4、および論理演算子&&計算式、すなわち、「式A」全体の発現の明確な値が戻っていないだろう一度IIは、(式A)&&(式II)のような短絡の問題を有しています偽がfalseである、式全体に、それはもはや「表現II」を計算しません。
5、アクセス権
公共>保護>フレンドリー>プライベート
どこでクラスのみ、パブリックおよび友好2つの権限
保護:パッケージアクセス+サブクラスのアクセス
優しい:パッケージアクセス
説明:同じパッケージ内のサブクラスに見える修飾優しい性質は、サブクラスが別のパッケージに表示されません。変更された保護属性とメソッドは、様々なサブクラスパケットで見つけることができます。
図6に示すように、初期化処理
基底クラスと静的変数ステートメントブロックを初期化するために①基本クラス
②静的変数の初期化ステートメントブロックとサブクラス
③ベースクラスのインスタンス変数は、ステートメントのブロックを初期化と
④基底クラスのコンストラクタの
⑤セットアップサブクラスのインスタンス変数とステートメント・ブロック
⑥実行サブクラスのコンストラクタ
7、最終的なキーワードの概要
(1)最終的な修正されたデータは、定数、コンストラクタの定義で初期化されなければならない、または
(2)最終的な修正方法は、最初のインライン関数を表し(廃止を、今パフォーマンスに関する問題は、コンパイラ、仮想マシンに引き渡されました)
第二は言った:このメソッドは、エラーの上カバーに、カバーされてはなりません。
(3)最終的な修正クラスは、表すよう継承することができない(最終的な抽象クラスを変更することはできません)
8、抽象クラス
抽象クラスは、抽象メソッドにはありません。
抽象クラスとインタフェースとの間の差
- クラスがインターフェイスです
- デフォルトのパブリックインターフェイスメソッド、任意の抽象クラス
- 抽象クラスは、インタフェースがいっぱいになっていないすべての抽象メソッド、抽象メソッドであります
9、文字列、StringBuilderを、StringBufferの者の間の差
文字列とStringBuilderのは:文字列は不変である、すべての操作は、新しいStringオブジェクトが生成されます; StringBuilderのは、元の文字列に基づいて操作を可能にし、動作条件の文字列がより適しています。
StringBuilderとStringBufferのは:前者は、スレッドセーフではないが、より効率的に、後者は、スレッドセーフな、マルチスレッド環境に適しています。
10、反射
リフレクション:オブジェクトのクラスの他のメンバーは、クラスのクラスをパッケージ化し、パッケージには、一緒に反射のためのサポートを提供して反映されます。
反射原理:フィールド、コンストラクタ、メソッドのクラスにマッピングされたコードフィールド、コンストラクタ、メソッド、バイトのファイル。
Classオブジェクトを取得するには、3つの方法
- Class.forNameの(文字列名)
- ClassName.class
- オブジェクト.getClass()
クラスClassの一般的な方法
フィールドに関連付けられました:
- getField(文字列名):公共の指定したフィールドを取得
- れるGetFields():、すべてのpublicフィールドを取得するフィールド、リターン[]
- getDeclaredField(文字列名):指定された宣言フィールドを取得
- getDeclaredFields():すべてのフィールドのステートメントを取得
関連する方法:
- getMethod(文字列名、クラス.... parameterTypesと<?>):指定された公開方法について
- getMethod()メソッド:すべてのパブリックメソッドを取得します
- getDeclaredMethod(文字列名、クラス....たparameterTypes <?>):指定されたメソッドの宣言を得ます
- getDeclaredMethods():宣言を取得するためにすべてのメソッド
関連コンストラクタ:
- getDeclaredConstructor(<?>クラス....たparameterTypes):取得工法声明
- getDeclaredConstructors():すべてのコンストラクタを宣言します
その他:
- getName():クラスの名前を取得
- newInstance():新しいインスタンスを作成します。
Fieldクラスの一般的な方法
- setAccessible():検査のメンバーへのアクセスの制限の解除、プライベートメンバーへのアクセス
- (オブジェクトo)を取得:オブジェクトの開発がフィールドに対応する値を取得します
- 集合(オブジェクトo、オブジェクト値):対応するフィールド指定されたオブジェクトの設定値
メソッドクラスの一般的な方法
- この方法は、指定されたオブジェクトを呼び出し:呼び出し(オブジェクトOは、オブジェクト....引数)
コンストラクタの一般的な方法
- newInstance(オブジェクト... argsが):クラスのコンストラクタ呼び出しの新しいインスタンスを作成します。
反射のオブジェクトを作成するには2つの方法
- Class.newInstance():クラスは、デフォルトコンストラクタを持っている必要があります
- constructor.newInstance():コンストラクタはどんなこと
11、ハッシュコード()与のequals()
hashCode():デフォルトのハッシュコードは、ターゲット・アドレスを使用して計算されます
等号():デフォルトの比較アドレスの場合
12、比較可能とコンパレータ差
同等:のcompareTo(T 0)、要素の自然順序を実装し、要素は一般的に継承されています
比較:比較器は比較実施され、一般に、(O1、O2)、内部クラス
13違い、迅速な故障(フェイルファスト)とセキュリティ失敗(フェイルセーフ)メカニズム
クイックに失敗しました:すべてjava.utilパッケージでコレクションコレクションをスレッドが、作ったセットを変更するには、別のスレッドは、ConcurrentModificationExceptionをスローし、変数が変更されているかどうかをチェックすることによって達成されるフェイルファストているメカニズムを、 A。
セキュリティに失敗しました:すべてのjucのパッケージの下にコレクションはコレクションをスレッドが最初のマルチスレッド化に適したコレクションのコピーを横断、コレクションの内容をコピーします時にフェイルセーフ機構に使用されています。
14、地図パフォーマンスチューニング
表中のビットバケツ:容量
初期容量:デフォルトの16
サイズ:格納されているアイテムの現在の数
ロードファクター:0.75のサイズ/デフォルトの容量バランスとスペース効率
しきい値のツリー:ビットのいくつかの樽、デフォルト8
しきい値のアンチツリー:バケット内のアイテム数、デフォルト6
ツリー容量の大半:デフォルトの64、64、容量拡張の優先度に到達し、64に達する木の木のしきい値に達していません
15、コンテナの実装クラス
一意性:(等号を実装)
ハッシュ:実装のhashCode()
注文:Comparableインタフェースを実装します
16、ArrayListの拡張
1.5倍のアレイ容量の減少、古い配列のコピー
17、int型の範囲
-2 ^ 31__ 2 ^ 31 -1
18の配列
原理:オブジェクトは、データベースまたはファイルに格納されたバイトシーケンスに変換され、バイトシーケンスを復元することが可能であることができます。
ObjectOutputStreamのとObjectInputStreamのは、直列化のためのサポートを提供します。
シリアル化とシリアル化を実装するためのExternalizableインタフェースの必要性
後者はカスタムシリアル化を提供するが、それにもインターフェースを公開し、インターフェースは、悪意を持って変更データクラスを使用することができます。
修正静的および過渡変数は直列化可能ではありません。
クラスが含まれている場合Unserializableメンバ変数を簡単に過渡によって解決することができます。
あなたがSerialVersionUIDをを指定しない場合、仮想マシンが自動的に生成されますが、価格はシリアライズされたオブジェクトのすべての古いクラス構造を変更している場合は利用できません。
利用シナリオ
- ファイルやデータベースにメモリ内のオブジェクトを保存
- ネットワークオブジェクトに伝播
- RMI
19、IO流
InputStream
- するByteArrayInputStream
- FileInputStreamを
- たPipedInputStream
- FilterInputStream
- BufferedInputStreamを
- DataInputStreamの
OutputStream
- ByteArrayOutputStream
- FileOutputStream
- 持つPipedOutputStream
- FilterOutputStream
読者
- CharArrayInputReader
- FileReaderの
- PipedReader
- InputStreamReader
ライター
- CharArrayWriter
- FileWriter
- PipedWriter
- OutputStreamWriter
20、IOモデル
二つのプロセスのIO
- 準備ができたデータを待ち
- アプリケーション・データ・バッファにデータをコピーします。
アプリケーションのデータおよびカーネルバッファコピーを受領するまで、アプリケーションスレッド発行したIO要求、アプリケーションブロックをして結果を返す:BIOは、IOを遮断します。
NIOは、IOを非ブロック:アプリケーションスレッドがカーネルデータを受信したか否かの世論調査に引き続き、カーネルは、すぐにデータがデータエラーをコピー返すようにデータが存在しない、結果を返します。
IO多重化:複数の接続を管理するためのスレッドは、アプリケーションスレッドの呼び出しは()を選択し、カーネルポーリング複数のチャネルを遮断し、チャネルデータはすぐに戻ります。
AIO非同期IO:その後、IOのアプリケーションスレッドの問題要求、およびカーネルのすべての準備ができるまで、他の操作、待機を行うには、アプリケーションスレッドに通知します。
選択:システムの高いリアルタイムの要件は、あなたが移植性をよりよくすることができます。
投票:選択と同様の、何の最大記述子はありません。
epoll:のみ記述子の数が多いが、投票に必要な、Linux上で実行する必要があり、これらは、好ましくは、長い接続に接続されています。
21、ジェネリック
上限と下限と上限と下限
存在しない上限値は、下限値を取ることはありません
要素を撮るとき22は、リスト、セット、地図の特徴は何ですか
リスト:取得(インデックス)は、要素の適切な位置を取ります
セット:だけ反復、インターフェースは、単一の要素を取ることはありません。
地図:キーの値に基づいて、(キー)を取得
23.多型の原則
INVOKEVIRTUAL命令多型検索は、オブジェクトの実際の型の下部を見つけるために、文字と一致した方法を説明しました。
24、浮動小数点の比較はエラーを生成します0
①使用のBigDecimalクラス
②二つの数値と比較少数(すなわち、精度)を減算
③二つの数は、n個の比較のパワーに10を乗じた(N精度)されます