最終的に、静的なキーワードのジャワの基礎

I.はじめに

  約2キーワードは、比較的高い周波数のより一般的な用途の開発をする必要があります。その上インターフェース、定数、静的メソッドと。しかし、これは頻繁に使用が明確に理解を理解できなければならない、1は真央を再生するためにZichouを言うことができるという意味ではありません。さて、一般的なこれらの二つは、レビューや知識を容易にするために暴行した後、要約レコードを行うには、キーワードを使用しています。

第二に、キーワード決勝

  最終的に、文字通り「最終」として、一般的にJavaで「不変」に指定。クラスは、プロセス、プロセスパラメータ、および変数を変更するために使用することができます。

  1、修飾クラス

   最終修正クラスでは、クラスを代表して継承することはできません。これは、クラスを使用することを継承していないと判定された場合、それは最終的な形として設計することができることを意味します。典型的な例は、Stringクラスです。

  2、修飾法

  最終修正方法が継承することができますが、書き換えることはできません。これは、オーバーロードすることができます。

  3、パラメータ変更方法

  パラメータは内部実行方法で表される最終的な修正方法は、パラメータの値を変更しないことが可能です。オブジェクトが参照されている場合でも、属性値は、アプリケーションオブジェクトを変更することができます。

  図4に示すように、変数を変更します

  変更され、最終的な変数で不変の代表である、ということが多いと言われて「定数。」一度に最終修正、割り当ては、クラスのライフサイクルの後、あなたはそれを変更することはできませんできるようにします。

  データとオブジェクトデータの基本タイプ:どちらの場合も、変数が変更されます。データの基本タイプを変更すると、値は不変です。オブジェクトへの参照変更されたオブジェクトデータでは不変であるが、オブジェクト内の属性値を変更することができます。

  最終的に修正される変数は、使用前に初期化する必要があり、一つの方法は、宣言時にデフォルト値を与えることです。もう一つは、コンストラクタを介して設定することです。

  図5に示すように、サンプルコード

com.cfangパッケージ; 

インポートjava.util.Calendarの、

インポートlombok.Data; 
インポートロンボク。EXTERN .slf4j.Slf4j; 

@ SLF4J 
パブリック クラスT3 { 
    

    公共 静的 ボイドメイン(文字列[]引数){
         // -修飾された変数 
        の最終int型の B = 0 ;
         / * * 
         *コンパイラエラー:最終のローカル変数Bは、それはブランクでなければなりません割り当てられ、使用していない割り当て化合物Aであってもなくてもよい
         * / 
//         B = 2; 
        
        // -メソッドのパラメータの変更 
        DemoClsのCLSを= 新新DemoCls(); 
        cls.setAge(10 )。
        log.info(" democls年齢:{} " 、cls.getAge())。
        int型 = 10 ; 
        sayHello(CLS)。
        log.info(" 後のsayHelloを呼び出し、年齢democls:{} " 、cls.getAge())。
    } 
    
    プライベート 静的 ボイドのsayHello(最終int型A、最終DemoClsのCLS){
         / * * 
         *编译报错:割り当てることができない、最終的なローカル変数。これは、複合代入使用して空白にしてはいけません
         * / 
//         A = 11;
//         CLS =新しいDemoCls();
        
        cls.setAge(11。;)
    } 
} 

@Data 
クラスDemoCls {
     プライベート int型年齢; 
} 

// -改変する方法
SLF4Jの@
 クラス人{
     公共決勝無効saySth(){ 
        log.info(" 私は人間だし" ); 
    } 
} 

SLF4Jする@ 
クラス男性は、人は{拡張
     / * * 
     人から、最終的な方法では、缶のないオーバーライド:*コンパイルエラー
     *修正方法をオーバーライドすることはできません
     * / 
//     ます。public void saySth決勝(){
 //        log.info( "私は男性です");
//     } 
    
    公共の最終無効saySth(文字列のMSG){ 
        log.info(" 私は男性です" ); 
    } 
}

  前記パラメータ変更方法基準オブジェクトと、オブジェクト属性値を変更することができ、それは十分に理解されている:参照変数CLS、最終修正された参照変数が、この参照基準を定義する変数CLSは、実際に変更することができません参照オブジェクト自体の値を変更することができます。表現されると言わの意味を知ることが一目で、以下に示すように、テキスト言語の組織は、非常に明確ではないかもしれません。

  

第三に、キーワード静的

  スタティック、静的。Javaでは、一般的に静的変数、メソッド、コードブロックを修正するために使用することができます。

  1、変数を変更

  静的変数として知られている静的変数を、修正。クラスの初期化がロードされると静的変数は、メモリ内で、すべてのクラスオブジェクトでコピーを1つだけ共有されています。対応する非静的変数は、オブジェクトの各インスタンスは、それ自体に属し、複数のメモリ部分の存在は、互いに影響を及ぼしません。

  2、修飾法

  静的メソッドと呼ばれる方法、の静的修正。したがって、この静的メソッドではなく、オブジェクトのインスタンスに依存しない静的メソッドにアクセスすることができる呼び出します。インスタンスオブジェクトに依存して、この機能のため、非静的メソッド呼び出しは、静的な方法ではない非静的メンバのプロパティとメソッドことなく使用することができます。対照的に、非静的メソッドは、直接静的メンバ変数とメソッドを使用してアクセスすることができます。同様に、静的メソッドは、スーパーではありません。この一方で火災などの超密接に関連するオブジェクトおよび具体例は、それゆえ、静的およびこれ、スーパー可能性は、昼と夜のように、静的オブジェクトおよび具体的な例以来無関係:フレーズの下にまとめることができます。

  図3に示すように、修正されたコードブロック

  クラスの初期化をロードするときに、静的ブロックを修飾静的ブロックをロードするために実行、およびライフサイクル、一度だけロードされます。この特性に基づいて、プログラムの性能を最適化するように設計することができる、唯一のワンタイム初期ロードされたコンテンツの一部、静的ブロックが配置されてもよいです。

  4、サンプルコード

com.cfangパッケージ; 

インポートロンボクのextern .slf4j.Slf4j; 

@ SLF4J 
パブリック クラスT4 { 
    
    プライベート 静的 int型A、
     プライベート 静的 int型B;
     プライベート 静的 int型C、
    
    静的{ 
        log.info(" INIT値A " ); 
        A = 10 ; 
    } 
    
    { 
        / * * 
         *共通コード・ブロック、オブジェクトのインスタンスに応じて
         * / 
        log.info(" INIT値C " ); 
        C= 12であり; 
    } 

    公共の 静的な 無効メイン(文字列[]引数){
         // 静的非静的メソッド呼び出し- 
        / * * 
         *直接アクセスできない
         * / 
//         ; sayHello1()
        新しい新しいT4()sayHello1();. 
        
        // -静的メソッドを直接呼び出す
        のsayHelloを(); 
        
        // -コードの静的ブロックは、リソースの初期化 
        log.info(" 値A:{} " 、A)を、
        log.info(" 値B:{} " 、B)、
        ログ.info(" 値C:{} " 、C); 
    } 
    
    プライベート 静的 無効のsayHello(){ 
        log.info(" こんにちは言う" ;)
    } 
    
    プライベート 無効sayHello1(){ 
        log.info(" hello1を言う" );
         // -直接呼ばれる非静的メソッド
        のsayHelloを(); 
    } 
    
    静的{ 
        ログインします。情報(" INIT値B " ); 
        B = 11 ; 
    } 
}

  5、静的よくある間違い

パッケージcom.cfang。

輸入lombok.Data。
輸入ロンボク。extern .slf4j.Slf4j; 

@ SLF4J 
パブリック クラスT5 { 
    
    プライベート 静的 int型 = 10 ; 

    パブリック 静的 ボイドメイン(文字列[]引数){
         新しいT5()printVal()。
        
        // -フィールドDemoCls01.bは表示されません
        DemoCls01.b。
    } 
    
    プライベート ボイドprintVal(){
         int型、A = 11 
        log.info(" 値:{} "この .A)。
    }
} 

@Data 
クラスDemoCls01 {
     プライベート 静的 int型B。
}

  この的静的5.1、

  値:10上記のコードでは、最終的なランprintVal方法は、結果が出力されます。実際には、これはよく理解されている:現在のオブジェクトが、これはを意味するが、新しいT5()printVal()呼び出しによって、次いで、これはオブジェクト生成のインスタンスを指す自体は、すべてのクラスのオブジェクトである変数の現在の新たに作成された、静的変形例です。共有、および方法printValローカル変数が属する、オブジェクトのこのインスタンスにと関連していません。したがって、出力は10です。

  5.2、静的および可視性

  可視性は、静的変数やメソッドを変更しません。上記のコード、メインプロセス、DemoCls01.bはエラーをコンパイルします。

  5.3、静的ローカル変数

  Java仕様は、明確に述べ:staticキーワードは、ローカル変数を変更することはできません。

IVの概要

  最終的な静的は、一度属性の変更された値を表現するために組み合わせて使用​​し、それを変更することはできず、クラス名を介してアクセスすることができ、改質方法は、この方法は、新しいオブジェクトなしで呼び出すことができ、上書きできないことを示します。

  突然、インターフェースインターフェース、最終的な静的パブリックメンバ変数のデフォルト修飾子を考え、デフォルトの方法は、パブリック抽象を改質剤。

おすすめ

転載: www.cnblogs.com/eric-fang/p/11593570.html