寄せ集めを学ぶJavaで思考(第1-4)

プログラムフロー制御

シフト演算子

シフト演算子指向バイナリオペランドビット、単一の整数型で処理することができます。左シフト演算子(<<)演算子は、(低補0に)右側に指定された演算子のメジアン演算子の左オペランドの左側に移動することができます。右シフト演算を使用して「符号拡張」「符号付き」の値が正の場合、0がハイレベルに挿入され、値が負の場合、次に高い挿入。Javaはまた、使用する「符号なし」の右シフト演算子(>>>)を、追加「ゼロ伸びる」:関係なく、記号の、高い0に挿入されます。文字、バイト、または短いシフト処理のために、シフトが起こる前にした場合、自動的にintに変換。わずか5つの右下に必要。これを防ぎ、私たちは非現実的な動きは、int型の数値の桁。long値へのシフトした場合、最終的な結果はロングタイプです。この時点で、あなただけが、長い準備にわたり中央値の移動を防止するために6つのローの右側を使用します。しかし、中に「符号なし」のバイトと短い値とシフト操作のために、正しい結果が得られない可能性がある場合、右シフトは、問題に遭遇することがあります。これらは自動的にint型、および右シフトに変換されます。しかし、「ゼロ膨張は」そうな場合には、結果は次のようになります、発生しません-1。

シフトは、等号(= >>又は<< >>> =または=)の組成物を使用することができます。この場合には、指定したビット数の値だけ右にオペレータが移動の左側の計算値は、結果が戻って値の割り当ての左側に、取得したと。

public class Test {
    public static void main(String[] args) {
        int i = 8;
        i >>= 2;
        System.out.println(i);
        i <<= 1;
        System.out.println(i);
        i <<= 1;
        System.out.println(i);
        i >>>= 1;
        System.out.println(i);
        i >>>= 1;
        System.out.println(i);
    }
}
// output
/*
2 4 8 4 2
*/

三項演算子

?ブール式0:値1

public class Test {
    public static void main(String[] args) {
        int i = 10;
        System.out.println(i < 10 ? 5 : 11);
        System.out.println(i == 10 ? i / 2 : 0);
    }
}
// output
/*
11 5
*/

式の演算子の優先順位
単項演算子>算術(シフト)演算子>関係演算子>論理(ビット)演算子>条件演算子>割り当て

  • 単項演算子:+、 -
  • 算術(シフト)演算子:*、/、%、+、 - 、<<、>>
  • 関係演算子:>、<、> =、<=、== ,! =
  • 論理(ビット)演算子:&&、||、&、|、^
  • 条件(トライアド):A> B X:?Y
  • 割付:=(割り当て、及び複合など* =)

Javaで後藤ラベルの使用

後藤の乱用にもかかわらず、判読できないプログラムを引き起こす可能性がありますが、いくつかのケースでは、後藤は、構造制御フローへの最善の方法ですので、言語の多くは、多かれ少なかれ、まだのみ、Javaのためのその使用法の一部を保持タグは、ループの前に代わりに使用されます。

public class Test {
    public static void main(String[] args) {
        int i = 0;
        outer:
        for (;true;){
            inner:
            for (;i < 10;i++){
                System.out.println("i = " + i);
                if (i == 2){
                    System.out.println("continue");
                    continue ;
                }
                if (i == 3){
                    System.out.println("break");
                    i++;
                    break ;
                }
                if (i == 7){
                    System.out.println("continue outer");
                    i++;
                    continue outer;
                }
                if (i == 8){
                    System.out.println("break outer");
                    break outer;
                }
                for (int k = 0; k < 5;k++){
                    if (k ==3) {
                        System.out.println("continue inner");
                        continue inner;
                    }
                }
            }
        }

    }
}
// output
/*
i = 0
continue inner
i = 1
continue inner
i = 2
continue
i = 3
break
i = 4
continue inner
i = 5
continue inner
i = 6
continue inner
i = 7
continue outer
i = 8
break outer
*/

あなたはスイッチ... case文を使用することに注意してください、満たすためにケースに遭遇した後、チューブのないブレーク条件を満たしていない後、それがブレークに遭遇するまで休憩した後、次のステートメントを続行しますされていない場合文またはプログラムセグメントを終了します。切り替える必要があり、一般的な... case文の中で、最後の場所デフォルトの状態ではありません、代替の条件でタスクを実行します。

public class Test {
    public static void main(String[] args) {
        int i = 5;
        switch (i){
            case 3:
                System.out.println("case3: " + i);
            case 5:
                System.out.println("case5: " + i);
            case 7:
                System.out.println("case7: " + i);
            default:
                System.out.println("default: " + i);
        }
    }
}
// output
/*
case5: 5
case7: 5
default: 5
*/
public class Test {
    public static void main(String[] args) {
        int i = 5;
        switch (i){
            case 3:
                System.out.println("case3: " + i); break;
            case 5:
                System.out.println("case5: " + i); break;
            case 7:
                System.out.println("case7: " + i); break;
            default:
                System.out.println("default: " + i); break;
        }
    }
}
// output
/*
case5: 5
*/

必要な選択スイッチ要因がintまたはcharの整数値でなければならないことに留意されたいです。文字列または代わりに使用しているフロート要因ならば、それらはswitch文では動作しません。

Math.random()0-1範囲[0、1)にある値を生成します。

我々はコンストラクタを使用する場合は、私たち自身がクラス内の任意の定義をしない場合、それは私たちのためにデフォルトの引数なしのコンストラクタを作成し、我々はすべてのコンストラクタを定義する場合、またはパラメータなしで、システムは、もはや引数なしのコンストラクタを作成するために私たちを助けるために継続しないでしょう。

注:私たちは非静的メソッドに静的メソッドと静的変数にアクセスすることができますが、その逆は十分ではありませんが。静的なデータ構造は非静的であるので方法が優先されます。

Javaがガベージコレクタの再利用によって使用され、使用中はもはやメモリを占有していないオブジェクト。しかし、ガベージコレクタは唯一私が「特別な」メモリのオブジェクトを解放する方法がわからないので、新しいによって割り当てられているメモリを解放するために知っています。この問題を解決するために、Javaは(ファイナライズと呼ばれる方法を提供)、あなたは私たちのクラスのためにそれを定義することができます。理想的なケースでは、それはこのように動作しなければならない:ガベージコレクタは、オブジェクトによって占有されていたメモリを解放する準備ができたら、最初の呼び出しは、(確定)、一度だけ、次のガベージコレクションプロセスでは、実際にメモリを回復することになります。あなたは()ファイナライズ使用であれば、あなたは、ガベージコレクションのクリアとクリーニングの際に、いくつかの重要な仕事を行うことができます。

ガベージコレクションは、ガベージコレクタが存在する唯一の理由は、あなたは、もはや使用するプログラムを回復することですされているメモリと専用メモリについてです。

最も有用な場所のファイナライズの一つは、()ガベージコレクションの過程を観察することです。

クラス変数によって決定される順序で定義されたような1つのクラスでは、配列です。変数定義が多数定義されたメソッドの途中で発見された場合でも、これらの変数は、任意のメソッドを呼び出す前に(でもビルダー呼び出しの前に)初期化されます。

おすすめ

転載: www.cnblogs.com/zhhfan/p/12600360.html