Javaの非アクセス制御子:static,final,abstract

3556 ワード

非アクセス制御子
非アクセス制御子
基本的な意味
修飾クラス
修飾メンバー
修飾ローカル変数
static
スタティック、非インスタンス(本質)、クラス
内部クラスを修飾可能
Yes
final
変えられない
Yes
Yes
Yes
abstract
イメージング
Yes(抽象を修飾する方法)
Yes
コントロール:static
staticフィールド
  • 静的フィールドの最も本質的な特徴は、次のとおりです.
  • はクラスのフィールドであり、いずれのオブジェクトインスタンスにも属しません.

  • オブジェクトインスタンスのメモリ区間ではなく、クラスのメモリ領域の共通メモリユニットに保存されます.
  • クラス変数は、クラス名で直接アクセスしてもよいし、インスタンスオブジェクトでアクセスしてもよい.2つの方法の結果は同じである.
  • Systemクラスのinとoutオブジェクトのように、クラスに属するドメインであり、直接クラス名でアクセスするSystem.outである.
  • class Person{
        private static int totalNum;
        private int age;
        private String name;
    }
  • 上記コードセグメントでは、クラスPersonにクラスドメインtotalNum
  • が定義されている.
  • totalNumは、特定のインスタンス・オブジェクトに関係なく、Person.totalNumおよびp.totalNum(pはPersonのインスタンス・オブジェクト)にアクセスできる合計人数を表します.

  • したがって、
  • は、staticフィールドがインスタンスオブジェクトと無関係であるため、ある意味でグローバル変数を表すために使用することができる.

  • staticメソッド
  • static修飾子で修飾する方法はクラスの静的メソッドにのみ属し、クラスメソッドとも呼ばれる.
  • これに対してstatic修飾を用いない方法は、インスタンス方法である.
  • クラスメソッドの本質は、このメソッドがクラス全体に属し、あるインスタンスに属していないことである.
  • は、staticに以下のいくつかの意味を持つ方法を宣言する.
  • static以外のメソッドがオブジェクトに属するメソッドである場合、このオブジェクトが作成されると、オブジェクトのメソッドはメモリに独自のコードセグメントを持つ.staticの方法はクラス全体に属し、メモリ内のコードセグメントはクラスの定義に従って割り当てられ、ロードされ、いずれのオブジェクトにも固有ではありません.
  • staticメソッドはクラス全体に属するため、あるオブジェクトに属するメンバー変数を操作および処理することはできず、クラス全体に属するメンバー変数のみを処理することができ、すなわちstaticメソッドは本クラスのstaticドメインまたはstaticメソッドを呼び出すことしかできない.
  • staticメソッドでは、インスタンス変数にアクセスできず、thisとsuperは使用できません.thisとsuperは具体的な例を表しているので,ある意味staticとthisは対立関係といえる.
  • このメソッドを呼び出す場合は、クラス名を使用して直接呼び出すべきであり、特定のオブジェクトを使用してもよい.例えば:Math.random(), Integer.parseInt()などがクラスメソッドであり,直接クラス名でアクセスする.


  • import static
  • import static java.lang.System.* ; staticのより強い書き方
  • out.println();は、System.out.println();が書きやすいことを示しています.

  • コントロール:final
  • finalクラス
  • クラスがfinal修飾子によって修飾され、限定される場合、このクラスは継承できない、すなわちサブクラスがあるはずがないことを示す.

  • finalメソッド
  • final修飾子で修飾する方法は、布団類で覆われない方法である.
  • finalフィールドおよびfinalローカル変数
  • finalフィールド、finalローカル変数(メソッドの変数)
  • の値は、いったん指定されると変更できません.
  • は読み取り専用量であり、1回のみ付与され、複数回付与されない.

  • 1フィールドはstatic finalの2つの修飾子によって制限されたタイミングであり、定数を表すことができ、Javaではconstは保留キーワードとして使用されているが使用されていない.
  • 例:Integer.MAX_VALUE、Math.PI

  • 賦課について
  • static finalドメインを定義する場合、初期値が与えられなければデフォルトで初期化する(数値は0、booleanはfalse、参照型はnull).
  • finalフィールドを定義する場合、staticのドメインでない場合は、1回のみ付与する必要があり、デフォルトではありません.
  • というドメインの付与方法には、変数を定義するときに初期化する方法と、各構造関数で付与する方法の2つがあります.

  • finalローカル変数を定義する場合も、定数ではない可能性がありますが、変数が存在する間は値は変更されません.



  • コントロール:abstract
  • abstractクラス
  • abstract修飾子で修飾されたクラスを抽象クラスと呼ぶ.
  • 抽象クラスはインスタンス化できません

  • abstractメソッド
  • abstractによって修飾された方法を抽象方法と呼び、抽象方法の役割はサブクラスのために統一されたインタフェースを定義することである.抽象的な方法は宣言するだけで、実現する必要はありません.すなわち、セミコロン(;){}ではなく、abstract returnType abstractMethod([ paramlist ]);
  • という形式です.
  • 抽象クラスには抽象メソッドが含まれていてもよいし、abstractメソッドが含まれていなくてもよい.ただし、クラスにabstractメソッドが含まれている場合、このクラスはabstractクラスとして宣言する必要があります.
  • 抽象メソッドは、サブクラスで実装されなければならない.そうしないと、サブクラスはabstractクラスである.