Effective Java学習記録(三)

3270 ワード

四十一、重荷を慎む
public class SetList {
 
 public static void main(String[] args) {
 
  Set<Integer> set = new TreeSet<Integer>();
  List<Integer> list = new ArrayList<Integer>();
  
  for (int i = -3; i < 3; i++) {
   set.add(i);   //  -3 -2 -1 0 1 2
   list.add(i);  //  -3 -2 -1 0 1 2 
  }
  for (int i = 0; i < 3; i++) {
   set.remove(i);
   list.remove(i);  //     ,list     !
  }
  System.out.println(set + "" + list);
 }
}

一般に、同じパラメータ数を有する複数の方法では、リロード方法はできるだけ避けるべきである.場合によっては、特にコンストラクタに関連する場合、この提案に従うことは不可能かもしれません.この場合、少なくとも、同じパラメータのセットがタイプ変換されるだけで異なるリロード方法に伝達されることを避けるべきである.このような状況を回避できない場合、例えば、既存のクラスを改造して新しいインタフェースを実現しているため、同じパラメータを渡す場合、すべてのリロードメソッドの動作が一致しなければならないことを保証する必要があります.これができなければ、プログラマーはリロードされた方法やコンストラクタを効率的に使用することが難しく、なぜ正常に動作しないのか理解できません.
四十二、可変パラメータの使用を慎む
パラメータ数が不定のメソッドを定義する場合、可変パラメータメソッドは便利ですが、過度に乱用されるべきではありません.不適切な使い方をすると、混乱した結果になります!
四十三、nullではなくゼロ長の配列または集合を返す
戻りタイプが配列または集合であるメソッドはnullを返す理由がなく、ゼロ長の配列または集合を返すわけではありません.    
四十四、すべてのエクスポートされたAPI要素に対して文書注釈を作成する
APIのドキュメントを作成するには、ドキュメントコメントが最も効果的で、最も効果的な方法です.ドキュメント注釈の使用は、すべてのエクスポート可能なAPI要素にとって強制的と見なすべきである.いつものスタイルを採用して標準的な約束に従わなければならない.
四十五、局部変数の作用域を最小化
最も有利な方法は、その場所宣言を使用することです!目的は方法を小さく集中させることです.2つの操作を同じ方法にマージすると、1つの操作に関連するローカル変数が、別の操作を実行するコードの範囲内に現れる可能性があります.
四十六、for-eachサイクルは伝統的なforサイクルより優先する
for-eachサイクルは、簡潔性とバグ防御の面で従来のforサイクルとは比べものにならない優位性があり、性能損失はありません.できるだけfor-eachループを使うべきですが、次の3つは使いにくいです.1便利な集合の時に、制定された要素を削除したら、表示する反復器が必要です.2リストまたは配列を遍歴し、他の要素の値の一部またはすべてを置き換える必要がある場合は、要素の値を設定するために、リスト反復器または配列インデックスが必要です.3複数のセットを並列に巡回する必要がある場合は、すべての反復またはインデックス変数が同期して前方に移動できるように、反復またはインデックス変数を明示的に制御する必要があります.
四十七、クラスライブラリの理解と使用
 標準クラスライブラリの専門家の知識を利用して、他の人の経験を利用します;仕事にあまり関係のない問題に特別な解決策を提供する時間を無駄にする必要はありません.それらの性能は往々にして時間の推移に従って絶えず向上して、あなたがいかなる努力をする必要はありません!
四十八、正確な答えが必要な場合はfloatとdoubleは避けてください
http://blog.csdn.net/abing37/article/details/5332798
floatとdoubleはバイナリの浮動小数点演算であり,BigDecimal,intまたはlongで代用できる.
四十九、基本タイプは梱包基本タイプより優先する
基本タイプは梱包基本タイプより優先されます.基本タイプはもっと簡単で、もっと速いです.プログラムが==操作で シンボルを比較すると、同一性の比較が行われます.プログラム設計の梱包と解体タイプを混合して使用すると、解体が行われます.しかし、コレクションの要素、キー、値として、梱包タイプを使用する必要があります.パラメトリック化タイプの場合は、タイプパラメータとして梱包タイプを使用する必要があります.ThreadLocal...
五十、他のタイプがもっと適当であれば、できるだけ文字列を使わないようにする
文字列は他の値タイプの代わりに適していません.文字列は列挙タイプの代わりに適していません.文字列は集約タイプの代わりに適していません.文字列はコンピテンシーテーブルの代わりに適していません.
五十一、文字列接続の性能に注意する
string,stringbuilder
五十二、インタフェースを通してオブジェクトを引用する
フレームワークの柔軟性の向上
五十三、インタフェースは反射機構より優先する
反射メカニズムは強力なメカニズムであり,特定の複雑なシステムプログラミングタスクに対して非常に必要であるが,いくつかの欠点もある.作成したプログラムがコンパイル時に未知のクラスと一緒に動作する必要がある場合は、可能であれば反射メカニズムのみを使用してオブジェクトをインスタンス化し、オブジェクトにアクセスするときはコンパイル時に既知のインタフェースまたはスーパークラスを使用します.
五十四、ローカルメソッドを慎重に使用する
五十五、慎重に最適化する
五十六、最も一般的に受け入れられている命名慣例
五十七、異常の場合のみ使用する
現代のJVMの実現において、異常に基づくモードは標準モードよりずっと遅くて、プログラムの性能を下げて、しかもそれはまだ正常な仕事を保証することができません!だから:異常は異常の場合にのみ使用すべきである.通常の制御フローには使用できません.
五十八、回復可能な場合には被検異常を使用し、プログラミングエラーに対しては運転時異常を使用する
五十九、検査を受ける異常を不必要に使用することを避ける
 検出された異常時のJavaプログラム設計言語の良い特性.戻りコードとは異なり、異常の条件を強制的に処理し、信頼性を大幅に向上させます.過度な使用によりAPIが非常に不便になる.
六十、優先使用基準の異常
1、あなたのAPIをもっと勉強しやすくして、それはプログラマーがすでに熟知している習慣の使い方と一致しているからです.2、これらのAPIを使用するプログラムでは、多くのプログラマーが知らない異常が発生しないため、より読みやすさが向上します.