Java変数と修飾子

Javaの変数の型

Javaの変数の定義:型変数名、[変数名=値] =値

  • ローカル変数:変数法

    ローカル変数は、メソッド内で宣言しました

    アクセス修飾子は、ローカル変数のために使用することはできません

    スタックに割り当てられたローカル変数

    ローカル変数は既定値はありませんが、そう宣言された後、それが初期化されなければなりません

  • 変数の例:独立変数の方法ではなく、静的変形
    インスタンス変数は、クラス内で宣言され、体外方法

    オブジェクト滅びるのインスタンス変数

    アクセス修飾子は、インスタンス変数を変更することができます

    プライベートに設定されたインスタンス変数は、あなたはアクセス修飾子を使用してサブクラスのインスタンス変数に見えるようにすることができます

    インスタンス変数は、直接変数名によってアクセスが、静的メソッドと他のクラスにおいては、オブジェクト名のインスタンス変数名を使用することができます

  • クラス変数:修正静的を使用する方法以外の独立変数

    クラス変数は、静的変数、staticキーワードステートメントとして知られているメソッドの本体の外側で宣言されます

    静的変数に加えて、外めったに定数として使用されていない宣言、定数は変数を参照するには、のパブリック/プライベート+最終/静的として宣言されています

    静的変数が使用できますClassName.varアクセス

    クラスオブジェクトの作成どのように多くどんなにクラスは、クラス変数のコピーを1つだけ持っています

public class Variable{
    static int Class_var = 0;//类变量
    String instance_str = 'this is';//实例 变量
    public void method(){
        int i=0; //局部变量
    }
}
    //salary是静态的私有变量
    private static double salary;
    // DEPARTMENT是一个常量
    public static final String DEPARTMENT = "开发人员";

Javaの修飾子

アクセス修飾子

修飾子は、一般的に前に、クラス、メソッド、または変数を定義するために使用しました

  • デフォルト:デフォルト、書き込み何もありません、私たちは、同じパッケージ内に、オブジェクトの使用を見ることができます:クラス、インタフェース、変数、メソッド

    変数は暗黙のうちに公共のデフォルトのアクセス許可の場合のpublic static final、インタフェース・メソッドとして宣言されているインタフェース

    实例:
    String version = "1.5.1";
    boolean processOrder() {
       return true;
    }
  • プライベート:同じクラス内に見えます。オブジェクトの使用:クラス変数、インタフェース、メソッドを、

    プライベートメソッドとして宣言され、変数は、所有しているクラスによってアクセスすることができ、クラスとインタフェースは、プライベート宣言することはできません

    唯一の型クラスのパブリックgetterメソッドの変数によって宣言されたプライベートアクセスクラス外からアクセスされています

    public class Logger {
       private String format;
       public String getFormat() {
          return this.format;
       }
       public void setFormat(String format) {
          this.format = format;
       }
    }
    //format为私有变量,可以通过共有的getFormat()和setFormat()进行操作
  • 公共:クラス、インタフェース、変数、メソッド:すべてのクラス、オブジェクトの使用に見えます

    publicクラス、変数、メソッド、コンストラクタ、およびインタフェースとして宣言されていると、アクセスの他のタイプとすることができます

    様々なパッケージでは、クラスはバッグの中に導入する必要があります

  • 保護:変数、オブジェクト、メソッド:オブジェクトを使用した統一パッケージ視界内のすべてのクラスとサブクラスのために。クラスは、(内部クラスを除いて)変更することができない、インターフェイスを変更することはできません

    保護の必要性は、以下の2点で分析します

    • 同じパッケージ内のベースクラスのサブクラス:変数は保護、方法として宣言され、そして他のクラスにアクセスするために同一のパッケージ内に構成されています
  • ベースクラスのサブクラスは、同じパッケージ内にない:サブクラスにおいて、単語クラスのインスタンスは、その保護された方法は、基本クラスから継承された基本クラスにアクセスすることができ、保護されたメソッドのインスタンスにアクセスできません。

アクセス修飾子のアクセス

修飾子 現在のクラス (同じパッケージ内)の子孫クラス 同一包内 (異なるパッケージでの)派生クラス 他のパッケージ
保護されました Y / N
デフォルト N N
民間 N N N N

質問:親クラスにアクセスするには、サブクラス内の同じパッケージ変数はアクセスできませんされていません

非アクセス修飾子

  • static修飾子:クラス変数とクラスメソッドを変更するために使用、

    静的変数:

    staticキーワードは、オブジェクト、クラスのインスタンスの多くのオブジェクトは、静的変数、彼の唯一のコピーどんなにの独立した静的変数を宣言するために使用される静的変数は、また、クラス変数として知られているが

    静的メソッド

    静的キーワードは、静的メソッドの宣言のオブジェクトを分離するために使用されます。静的メソッドは、非静的変数のクラスを使用することはできません。

    アクセス方法

    アクセスクラス変数およびメソッドをとして使用することができるクラス/ obj.variablename及びクラス/ obj.methodnameアクセス方法。

       private static int numInstances = 0;
       protected static int getCount() {
          return numInstances;
      }
  • final修飾子

    最後の変数

    指定された初期値を表示しなければならないインスタンス変数の最終的な変更は、クラス定数と静的一緒にを作成することによって、変化してはなりません

      final int value = 10;
      // 下面是声明常量的实例
      public static final int BOXWIDTH = 6;
      static final String TITLE = "Manager";
    //final类的声明
      public final class Test {
       // 类体
    }

    最後の方法

    最終の方法親クラスの書き換えが、覆われていないことができる、主な目的は、この方法の最終的な方法が変更されないようにするためであります

    最後のカテゴリ:

    finalクラスはサブクラスによって継承されていません

  • abstract修飾子

    抽象クラス

    抽象クラスはインスタンス化オブジェクトに使用することはできない、抽象クラスの唯一の目的は、クラスの将来の拡張のために宣言されています

    クラス抽象と抽象クラスがメソッドを含む場合、このような抽象クラスなければならないので、最終修正することができません

    抽象クラスは、抽象メソッドと非抽象メソッドが含まれていてもよいです

    abstract class Caravan{
       private double price;
       private String model;
       private String year;
       public abstract void goFast(); //抽象方法
       public abstract void changeColor();
    }

    抽象メソッド

    抽象メソッドは、サブクラスで抽象メソッドを実装する必要があります、その方法ではありません

    抽象クラスは、メソッドは抽象クラスとして抽象クラスである必要があり、抽象メソッドを含めることはできません

    抽象メソッドは最終的なものであり、staticとして宣言することはできません

    サブクラスでも抽象クラスでない限り、すべての親クラスのサブクラス継承のすべてのメソッドに抽象クラスは、実装する必要があります。

    public abstract class SuperClass{
        abstract void m(); //抽象方法
    }
    
    class SubClass extends SuperClass{
         //实现抽象方法
          void m(){
              .........
          }
    }

    同期修飾子

    同じ時間を宣言するためのsynchronizedキーワードの方法は、一つのスレッドのみアクセスすることができ、それは4つのアクセス修飾子のために使用することができます

    public synchronized void showDetails(){
    .......
    }

    transient修飾子

    修正一時的なインスタンス変数を含むオブジェクトをシリアライズすると、Java仮想マシンは、変数をスキップします

    修飾子は、文が定義変数、前処理およびクラス変数のデータ・タイプに含まれています

public transient int limit = 55;   // 不会持久化
public int b; // 持久化

volatile修飾子

メンバ変数の変更は、スレッドが共有メモリに書き戻す値を変更するように強制されたとき、それはスレッドをアクセスされるたびに強制される揮発性修飾メンバ変数、共有メモリからメンバ変数の値を再読み込み、そう任意の時点で、2つの異なるスレッドは、常にメンバ変数の同じ値を参照することができます

public class MyRunnable implements Runnable
{
    private volatile boolean active;
    public void run()
    {
        active = true;
        while (active) // 第一行
        {
            // 代码
        }
    }
    public void stop()
    {
        active = false; // 第二行
    }
}

通常の状況下では、スレッドが別のスレッドの呼び出し停止中()メソッド、(オープン実行可能スレッドで)run()メソッドを呼び出します。バッファ値の最初のアクティブラインが使用される場合には、第2アクティブラインがfalseの場合、サイクルを停止させます

おすすめ

転載: www.cnblogs.com/Mr-l/p/11870622.html