JAvaあなたが知らない実用的なテクニック

6268 ワード

最近、過去に学んだことを整理してみると、収穫が少なくないと思います.JAvaの中には、何気なく忘れられる機能がたくさんあります.これについても整理して、まとめて、みんなに分かち合って、間違いがあったら、批判してほしいです.
1、System.out.println(); 
プログラマーが最も多く書いた繰り返し文はこれにほかならないと信じています.これは印刷出力、デバッガによく使われ、どこにでもあると言えます.
デフォルトのSystem.outはコンソールに出力されますが、出力される情報量が大きい場合、出力の結果をどのように簡単に観察しますか?PrintStreamタイプのオブジェクトに転送され、指定したパスファイルに出力されるSystem.setOut()を設定します.
                  PrintStream out = System.out;    //    System.out     
                  PrintStream ps = new PrintStream( "D:/log.txt");  //        
                  System. setOut(ps);
                  Scanner scanner = new Scanner(System. in);
                  System. out.println( "       :" );
                  String name = scanner.nextLine();
                  System. out.println( "  :"+name); 
                  System. setOut(out);   //         
                  System. out.println( "  OK");                    
 
  
2、位运算的妙用。
   大家都知道:
     1的二进制数:00000001
     2的二进制数:00000010
     4的二进制数:00000100
     8的二进制数:00001000
     观察其中的规律,可见左移一位,相当于乘以2,右移一位,相当于除以2。所以,乘以2的n次方的数可以用位运算来提高执行效率。
        int numa = 5;
             int numb = numa<<3;
             int numc = numb>>1;
             System. out.println(numb);
             System. out.println( numc);

     もちろん、ビット演算は2つの数を交換することもできますが、整数のみをサポートします.
           int num[] = {11,33};
            num[0] = num[0]^num[1];
            num[1] = num[1]^num[0];
            num[0] = num[0]^num[1];
            System. out.println( "num[0]="+num[0]);
            System. out.println( "num[1]="+num[1]);

3、高精度の加減乗除について.BigDecimal
   これは言うまでもなく、多くのプログラマーがこのクラスをよく使う必要があると信じています.
        double money = 2;
            double price = 1.1;
            double result = money - price;
            System. out.println(result);
            
            BigDecimal deMoney = new BigDecimal( "2");
            BigDecimal dePrice = new BigDecimal( "1.1");
            BigDecimal deResult = deMoney.subtract(dePrice);
            System. out.println(deResult.toString());

      BigDecimal()の構造方法ではStringタイプのオブジェクトが渡されているのを覚えていますが、直接数値を入れると、必要な結果が得られないかもしれません.
4、二層循環を終了する:
     みんなはすべて知っていて、breakは全体の循環体を終わらせて、continueは1回の循環を終わらせて、それでは2階の循環はどのように飛び出して、私は大部分の人がすべてできると思って、みんなに復習してあげましょう.
     これが二重ループを終わらせる使い方とは言わない.
         No1:for (int i = 0; i < 10; i++) {     //    for  “    ”
                   for ( int j = 0; j < 10; j++) {
                        System. out.print( "i="+i+ ",j="+ j+"\t");
                         if(i== j) {
                               break No1;       //     “No1” for
                        }
                  }
                  System. out.println();
            }

5、「&」と「&&&」の違い:
    簡単な理解で、
     単&の場合、左側は真偽にかかわらず、右側は演算を行う.
    ダブル&の場合、左が真で、右が演算に参加し、左が偽であれば、右は演算に参加しません.     「|」と「||」の区別は同じで、ダブルまたは時、左は真で、右は演算に参加しません.
     public static void main(String[] args) {
            String name = "java";
             for( int i=0; i<5; i++) {
                   if(name.equals( "jav") && i++ ==0) {    //&&      ,       
             //    if(name.equals("jav") & i++ ==0) {          &         ,       
                         break;
                  }
                  System. out.println(i);
            }
      }   

ここには初心者がよく理解しないところがあります.異或(^)と(|)の違いは、左右がtrueの場合、結果はfalseです.(|)は,そのうちの1つがtrueである限り,結果はtrue.両者は論理的に逆である.
6、switch文選択のタイプは4種類しかありません:byte、short、int、char???    NO!
     jdk 1.7以降、switchはStringタイプの選択をサポートできます.もちろん、1.7以前のバージョンでStringタイプの選択をどのように実現するかを聞きたい場合は、文字のhashCodeを得ると、intタイプの数が返されます.
     public static void main(String[] args) {
            String name = "java";
             switch (name.hashCode()) {
             case 3254818:       //"java".hashCode()     
                  System. out. println("java");
                  break;
            }
      }

7、静的インポートimport static java.lang.Math.*;これにより、max(2,3)のようなMathの静的メソッドを直接呼び出すことができる.インポートしない場合はMath.max(2,3)と書きます.
8、私たちはよく文字列の判断に関する操作をします.以下のようにします.
     String name;
     //いくつかの方法でnameの値を得ました.
     name = "java";
     //おすすめしない使い方
     if(name.equals("java")) {
          doSth...
     }
     //推奨方法
     if("java".equals(name)) {
          doSth....     
     }
     なぜなら、私たちが判断する文字列がnullの場合、ポインタが異常になります.例えば、ユーザーが提出したパラメータを取得し、このパラメータを取得していない場合、判断ロジックを行い、推奨しない方法を使用すると、ポインタが異常になります.あなた以外のプログラムは確かに丈夫で、この判断にnameがnullの情が現れるはずがないと確信しています.状況.
9、boolean値を循環条件とする.
     //使用法を推奨しない
     if(x==3){
          doSth....
     }
     //推奨方法
     if(3==x) {
          doSth....     
      }
      どちらもxが3に等しいかどうかを判断する結果を判断条件としていますが、コードをうっかり書いてしまったらどうしますか.
     if(x=3){
          doSth...
     }else{
          doSth...     
     }
     万千行コードの中で、このような問題が発生してしまったら、状況が良いときは、テスト結果を見て問題を発見し、修正すればいいのです.人柄が悪いときは、プログラムが正常に動作していると思っているかもしれません.
     お勧めの方法を使って、うっかりx=3をx=3と書いてしまうと、IDEの鮮やかな赤い線が・・・あまり言われません.