Java初心者用の学習めもです。
アクセス制御とgetter/setter、static修飾子、final修飾子について記載しています。
#アクセス修飾子
Javaではフィールドやメソッドに対して、アクセス制御が設定できる。
フィールドやメソッドを宣言する際に、先頭に以下の修飾子を指定する。
###アクセス修飾子一覧
- private :自分自身のクラスのみアクセスを許可
- packege private(※) :自分と同じパッケージに属するクラスのみ許可
- protected :自分と同じパッケージに属するor自分を継承した子クラスに許可
- public :全てのクラスにアクセスを許可
###POINT
・packege privateは何も書かないで指定される
・フィールドは基本privateを設定し、メソッドは基本publicとする
#getterとsetter
外部からprivateのフィールドにアクセスしたい場合などに、getter/setterを使用する。
以下のように設定することで、getメソッドとsetメソッドを準備できる。
class User {
private String name;
private int score;
public User(String name, int score) {
this.name = name;
this.score = score;
}
public int getScore() { // getter
return this.score;
}
public void setScore(int score) { // setter
if (score > 0) { //0以上の数値をセットする
this.score = score;
}
}
}
###POINT
・Testクラスのnameフィールドを読み取りたいときはgetName()メソッドを使用する
・Testクラスのnameフィールドの値を変えて使用したいときはsetName()メソッドを使用する
・setter内部に引数の妥当性チェック処理を記載することもできる
privateフィールド変数にアクセスしたい場合は、以下のように記述する。
public class Main {
public static void main(String[] args) {
User tom = new User("tom", 50); //Userクラスをインスタンス化
tom.setScore(90); //setterで設定
System.out.println(tom.getScore()); //getterで取得
}
}
#static修飾子
static修飾子は、メンバー変数・メソッドに指定することができる。
###POINT
・static修飾子を付けるとインスタンス化しなくてもクラスから使えるでメンバ(メソッドとフィールド)を定義できる
・staticメソッドを「クラスメソッド」、staticフィールドを
「クラス変数」と呼ぶ
⇀static修飾子がついていないものは、「インスタンスメソッド」、「インスタンス変数」と呼ぶ
・コンストラクタは、インスタンス化のときに自動で呼ばれる処理なので、インスタンス化しないtaticでは使えない
・イニシャライザは、クラスのロード時に自動で呼ばれる処理なので、staticで定義できる
// static
class User {
private String name;
private static int count = 0; // クラス変数
public User(String name) {
this.name = name;
User.count++;
}
static{
System.out.println("イニシャライザ"); //イニシャライザ
}
public static void getInfo() { // クラスメソッド
System.out.println("インスタンス化: " + User.count);
}
}
//Main
public class Main{
public static void main(String[] args) {
User.getInfo(); // 0
User tom = new User("tom");
User.getInfo(); // 1
User bob = new User("bob");
User.getInfo(); // 2
}
}
#final修飾子
final修飾子はクラス、メソッド、変数の宣言時に付与できる。
###POINT
・final修飾子をクラス、メソッド、フィールドに付けると変更ができなくなる
・変更不可のため、クラスの継承やメソッドのオーバーライドができなくなる
・フィールドの場合は、変更不可の「定数」として扱う
・定数を定義する際は以下のように書く
//<アクセス修飾子> static final 型名 定数名 = 値;
public class Main {
//定数
static final int INT = 123;
static final char CHAR = 'ABC';
public static void main(String[] args) {
System.out.println(INT);
System.out.println(CHAR);
}
}
ここまで。