JAva static class静的クラス

6066 ワード


一般的にstaticでクラスを修飾することはできません.クラスをstaticで修飾する必要がある場合は、通常staticで修飾されるのは匿名の内部クラスです.
1つのクラスに別のクラスを作成します.メンバー内部クラスと呼ばれます.このメンバー内部クラスは静的(staticキーワードで修飾)でも非静的でもよい.静的な内部クラスは定義・使用時に様々な制限があるためである.だから実際の仕事で使うことは多くありません.
開発中に、内部クラスで最も多く使用されるのは、非静的メンバーの内部クラスです.しかし,特定の場合,静的内部クラスもその独特な役割を果たすことができる.一、静的内部クラスの使用目的.内部クラスを定義するときは、その前に権限修飾子staticを付けることができます.このとき,この内部クラスは静的内部クラスに変化する.しかし、様々な理由から、使用上の制限などの要因(具体的な使用制限については、以下の内容で詳しく述べる)では、実際の作業で使われることは多くありません.しかし、価値がないというわけではない.特定の場合、この静的内部クラスが少なくなってはだめです.コード・プログラムのテストを行うときに、Javaソース・ファイルごとにプライマリ・メソッド(プライマリ・メソッドはアプリケーションのエントリであり、必須)を設定すると、追加のコードがたくさん表示されます.また,最も主要な場合,このメインプログラムのコードはJavaファイルにとって単なる形式であり,それ自体はこのようなメインメソッドを必要としない.しかし、この主な方法が少なくなったら絶対にだめだ.この場合、Javaソースファイルごとに同様のプライマリメソッドを設定することなく、プライマリメソッドを静的内部クラスに書き込むことができます.これはコードテストに非常に役立ちます.一部の大規模なアプリケーション開発では、一般的な技術手段です.そのため,この静的内部クラスはあまり一般的ではないが,プログラム開発者はそれを把握しなければならない.ある肝心な時に、大きな役割を果たすことができるかもしれない.
 
public class MainInStaticClass {

    static class Main {

        static void main() {

            //

            new MainInStaticClass().print();

        }

    }

    public static void main(String[] args) {

        new MainInStaticClass().print();

    }

    public void print() {

        System.out.println("main in static inner class");

    }

}

public class TestMain {

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        // new MainInStaticClass().print();

        MainInStaticClass.Main.main();

        new MainInStaticClass.Main();

    }

}

 
二、静的内部クラスの使用制限.内部クラスを静的クラスとして定義する方法は、他のクラスを静的クラスとして定義する方法とほぼ同じであり、参照ルールもほぼ一致します.しかし、その細部には依然として大きな違いがある.具体的には,主にプログラム開発者の皆さんの注意を引く点がいくつかあります.1つは、静的変数と静的メンバーを含む静的メンバーの定義です.一般に、内部クラスが静的内部クラスとして定義されていない場合、メンバー変数またはメンバーメソッドを定義する際に、静的メンバー変数と静的メンバーメソッドとして定義することはできません.すなわち、非静的内部クラスでは静的メンバーを宣言することはできません.現在studentクラスで内部クラスageが定義されているように、このクラスをstaticキーワードで修飾していない、すなわち静的クラスとして定義していない場合、この内部クラスでstaticキーワードを使用してメンバーメソッドまたはメンバー変数を修飾することは許されません.コンパイルするときは通じない.したがって、プログラム開発者は、ある内部クラスを静的クラスに修飾してから、このクラスで静的メンバー変数とメンバーメソッドを定義できることに注意する必要があります.これは静的内部クラスにある特性です.そのため,この静的な内部クラスが少なくなると,多くの作業が完了しない場合がある.あるいは、あるユーザーのニーズを実現するには、大きな輪を回る必要があります.これも静的な内部クラスが存在する重要な原因の一つである.二つ目は、メンバーの参照に大きな制限があることです.一般的な非静的内部クラスでは、外部クラスのメンバー変数とメンバーメソッドに任意にアクセスできます.これらのメンバーメソッドがprivate(プライベートメンバー変数またはメソッド)に修飾されても、その非静的内部クラスは任意にアクセスできます.非静的内部クラスの特権です.他のクラスでは、プライベートとして定義されたメンバー変数またはメソッドにアクセスできないためです.しかし、内部クラスが静的であると定義されると、銀が外部クラスのメンバーメソッドまたはメンバー変数を使用する場合、多くの制限があります.静的内部クラスのオブジェクトから外部クラスの非静的メンバー(メンバー変数とメンバーメソッドを含む)にアクセスできない場合.これはどういう意味ですか.外部クラスに2つの変数が定義されている場合、1つは非静的変数であり、1つは静的変数である.したがって、静的内部クラスでは、メンバーメソッドの内部でも他の場所でも、外部クラスの静的変数のみを参照することができ、非静的変数にアクセスすることはできない.静的内部クラスでは、静的メソッド(静的内部クラスでのみ静的メソッドを定義できる)を定義し、静的メソッドで外部クラスのメンバーを参照できます.しかし、内部クラスのどこで参照しても、外部クラスの静的メンバーメソッドまたはメンバー変数のみを参照できるという共通点があります.静的でないメンバー変数とメンバーメソッドは、静的内部クラスではアクセスできません.これが静的内部クラスの最大使用制限です.通常の非静的内部クラスではこの制限はありません.このため,静的内部クラスはいくつかの特定の場合にのみ適用されることが決定された.その応用範囲は非静的な内部クラスのように広くない.3つ目は、静的内部クラスを作成する際に、静的内部クラスのインスタンスを外部クラスのインスタンスにバインドする必要がないことです.通常、1つのクラスでメンバー内部クラスを作成する場合、内部クラスのインスタンスが外部クラスのインスタンスにバインドされる必要があるという強制的な規定があります.すなわち、内部クラスを作成する前に、外部クラスでnewキーワードを使用してこの内部クラスのオブジェクトを作成します.これにより、外部クラスから内部クラスオブジェクトを初期化すると、内部クラスオブジェクトが外部クラスオブジェクトにバインドされます.すなわち,通常の非静的内部クラスのオブジェクトは外部クラスオブジェクトに依存する.ただし、メンバー開発者が作成したときに静的内部クラスを作成する場合は、これは別です.通常、プログラマは静的内部クラスを定義する際に、外部クラスにバインドされたインスタンスを定義する必要はありません.すなわち、外部クラスで静的な内部クラスを定義するには、キーワードnewを使用して内部クラスのインスタンスを作成する必要はありません.つまり、静的クラスの内部オブジェクトを作成するときに、その外部クラスのオブジェクトは必要ありません.
 
new MainInStaticClass.Main();

 
具体的には、なぜそうなるのか、一般的なプログラム開発者は、このルールを覚えておく必要はありません.静的内部クラスを定義するときは、蛇足を描く誤りを犯さないでください.以上の解析から,静的内部クラスと非静的内部クラスは大きく異なることが分かった.一般的なプログラム開発者は、非静的な内部クラスオブジェクトが外部クラスに暗黙的に参照を保存し、作成した外部クラスオブジェクトを指すことを理解することができます.このような理解にかかわらず,プログラム開発者は静的内部クラスと非静的内部クラスの違いを肝に銘じる必要がある.静的メンバーメソッドとメンバー変数を作成できるかどうか(静的内部クラスは静的内部クラスではなく静的メンバーを作成できます)、外部クラスにアクセスするメンバーの制限(静的内部クラスは、静的内部クラスではなく外部クラスの静的メンバー変数とメンバーメソッドにのみアクセスできます.すなわち、静的または非静的外部クラスメンバーメソッドとメンバー変数にもアクセスできます..この2つの違いは、静的内部クラスと非静的外部クラスの最大の違いであり、静的内部クラスが存在する理由でもあります.この違いを理解した後、プログラム開発者は、静的内部クラスをどのような場合に使用すべきかを知る必要があります.プログラムテストの場合、各Javaソースファイルにマスターメソッドのコードを書くのを避けるために、マスターメソッドを書くことができます静的内部クラスに入り、コードの書き込み量を減らし、コードをより簡潔にします.
つまり、静的内部クラスはJava言語では特殊なクラスであり、通常の静的クラスや非静的内部クラスとは大きく異なる.プログラム開発者としては、それらの違いを知り、実際の作業で適切な場所で適切なクラスを採用しなければならない.しかし、総じて静的内部クラスの使用頻度はそれほど高くない.場合によっては、この内部静的クラスがなければ、倍功半の逆効果になる可能性があります.