LoginSignup
3
0

More than 3 years have passed since last update.

Java 変数修飾子についての 簡単な説明 と 自分なりの解釈

Last updated at Posted at 2021-03-23

普段からよく目にするJavaの変数修飾子

  • public
  • private
  • static
  • final

上記4つのみ対象にしています

public

  • 簡単な説明
    どこからでもアクセス可能な変数

  • 自分なりの解釈
    基本的には明示されていないもの
    メンバ変数(フィールド変数)で変数宣言時に外部から参照できる理由は
    省略されて見えないだけ

publicについて
public class Main { 
    //明示してないがpublic
    int a;

    //明示してpublic
    public int b;

    public static void main (String[] args) {   
    }
}

private

  • 簡単な説明
    同一クラスからのアクセスのみ許可

  • 自分なりの解釈
    簡単な説明の通り、同一クラスからのアクセスのみ許可するもの
    外部クラスから参照したい場合は、メソッド経由(getter or setter)で参照が可能

privateについて
public class Main {

    //private変数
    //メソッドを経由して外部からアクセスする
    private int privateVariable;

    //public変数
    //外部からアクセス可能
    public int publicVariable;

    public static void main (String[] args) {
    }

    //setterメソッド
    public void setPrivateVariable(int privateVariable) {
        this.privateVariable = privateVariable;
    }

    //getterメソッド
    public int gettPrivateVariable() {
        return privateVariable;
    }

static

  • 簡単な説明
    静的変数

  • 自分なりの解釈
    クラスをインスタンス化せずに参照可能な変数。クラス名.変数名で参照可能
    また、static変数に値を代入した値は他のインスタンス間でも共有できる

staticについて(Subクラス)
public class Sub {

    //非スタティック変数(インスタンス変数とも呼ばれる)
    int sampleVariableA = 0;

    //スタティック変数(クラス変数とも呼ばれる)
    static int sampleVariableB = 0;

}
staticについて(Mainクラス)
public class Main {

    public static void main (String[] args) {

        //Subクラスをインスタンス化
        Sub subA = new Sub();
        Sub subB = new Sub();

        //subAのsampleVariableA(非スタティック変数に +1)
        subA.sampleVariableA =subA.sampleVariableA+1;

        //1を表示
        System.out.println(subA.sampleVariableA);

        //subBのsampleVariableAには +1 していない為
        //0を表示
        System.out.println(subB.sampleVariableA);

        //sampleVariableBはインスタンス化していない
        //sampleVariableB(スタティック変数)に +1
        Sub.sampleVariableB = Sub.sampleVariableB+1;

        //スタティック変数は共有しているので下記の3つは全て同じく1と表示する
        System.out.println(Sub.sampleVariableB);
        System.out.println(subA.sampleVariableB);
        System.out.println(subB.sampleVariableB);
    }

final

  • 簡単な説明
    値の変更ができない変数

  • 自分なりの解釈
    finalで宣言された変数に対しては一度だけしか値を代入することができない為、
    定数として扱われる。
    また、Javaの命名規則により
     すべて大文字
     複合文字の場合は区切りをアンダースコア "_" で結合。(スネークケース記法)
    で宣言する

finalについて
public class Main {

    public static void main (String[] args) {

        //定数として宣言
        final  int SAMPLE_CONSTANT_A = 1;

        //一度だけしか値を代入することができない為
        //↓下記はコンパイルエラーとなります!!
        SAMPLE_CONSTANT_A = 2;


        //定数として宣言
        final int SAMPLE_CONSTANT_B;

        //後から値を代入することもできる
        SAMPLE_CONSTANT_B = 1;
    }
}

最後に

  • protected 同一クラス、同一パッケージ、サブクラスからのアクセスを許可
  • transient オブジェクトがSirialization時には情報として含まない

そのほかにも上記、が変数修飾子としてそんざいしますが、自分がこれまでに触れる機会が少なかったので、自分なりの解釈は一旦今回は省きます。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0