Javaでの学習を進めていると、「フィールド」といった用語を頻繁に見かけるのではないでしょうか。
本記事では、Javaにおける「フィールド」の意味合いや使い方について、初心者が混乱しやすい「クラス」や「メソッド」との違いを交えながら解説していきます。
目次
Javaのフィールドとは
Javaでは、「フィールド」という用語が利用されますが、これはクラス内で値(情報)を保持するために使用するものを指しています。
クラスとの違い
クラスはよく設計図に例えられますが、Javaのようなオブジェクト指向のプログラミング言語で、意味のあるまとまりとして「処理」や「情報」を集めたものです。
フィールドはこの「情報」の部分を表しています。
メソッドとの違い
メソッドは、上述したクラス内で「処理」を表す用語です。
「情報」を表すフィールドと「処理」を表すメソッドによって、クラスが構成されています。
Javaでフィールドを記述する方法
では実際にJavaでフィールドを利用するには、どのように記述していくのかを確認していきます。
記述法
Javaでフィールドを定義するには下記の構成で記述されます。
class クラス名 { [アクセス修飾子] データ型 フィールド名1; [アクセス修飾子] データ型 フィールド名2; // メソッド }
クラス内に、フィールド名とデータ型をセットで記述し、どのような情報を扱うのか定義します。
一般的には、フィールドをクラス内の上部に記述し、メソッドを下部に記述します。
アクセス修飾子
Javaのアクセス修飾子は、クラスやフィールド・メソッドのアクセス範囲を指定するもので、4つの指定方法が提供されています。
- public: どのクラスからもアクセス可能
- protect: 同一パッケージ内またはサブクラスからのみアクセス可能
- private: 同じクラスからのみアクセス可能
- 指定なし: 同じパッケージのクラスからアクセス可能
サンプルコードでJavaのフィールドを理解しよう
ここからはサンプルコードで、Javaのフィールドを具体例を交えながらご紹介していきます。
Javaの高単価フリーランス案件はこちら
サンプル1
1つ目のサンプルでは、同じクラス内で定義したフィールド値を、同じクラスのメソッドから変更してみます。
実装
public class Main { int number1; int number2; public static void main(String[] args) { Main m = new Main(); System.out.println("number1の値: " + m.number1); System.out.println("number2の値: " + m.number2); m.change(5, 3); System.out.println("number1の値: " + m.number1); System.out.println("number2の値: " + m.number2); } private void change(int num1, int num2) { this.number1 = num1; this.number2 = num2; } }
実行した結果が下記です。
number1の値: 0 number2の値: 0 number1の値: 5 number2の値: 3
解説
サンプルでフィールドを定義しているのは3行目と4行目で、int型の「number1」と「number2」を定義しました。
アクセス修飾子を指定していないので、同じパッケージ内のクラスであれば利用出来ることになります。
6行目の「static void main」は、Javaプログラムを実行させる際、標準で呼び出される最初のメソッドです。
static付きのメソッドからは、「this.フィールド名」形式での呼び出しが出来ないため、一度7行目のMainクラスをインスタンスして利用しています。
実際に値を変更しているのは、19~22行目のchangeメソッドですが、変更された値が保持され14・15行目のmainメソッド内の処理にも反映されていることが確認出来ます。
サンプル2
サンプルの2つ目では、アクセス修飾子を指定することでの違いについて確認してみたいと思います。
実装
public class Main { public String strPublic = "public"; protected String strProtect = "protected"; private String strPrivate = "private"; public static void main(String[] args) { Main m = new Main(); Sub s = new Sub(); Other o = new Other(); m.execute(); s.subExecute(); o.otherExecute(); } public void execute() { System.out.println("同一クラス内のexecuteメソッドから実行"); System.out.println(this.strPublic); System.out.println(this.strProtect); System.out.println(this.strPrivate); } } class Sub extends Main { public void subExecute() { System.out.println("サブクラス内のexecuteメソッドから実行"); Main m = new Main(); System.out.println(m.strPublic); System.out.println(m.strProtect); // System.out.println(m.strPrivate); アクセス修飾子の範囲外 } } class Other { public void otherExecute() { System.out.println("同一パッケージ内のexecuteメソッドから実行"); Main m = new Main(); System.out.println(m.strPublic); System.out.println(m.strProtect); // System.out.println(m.strPrivate); アクセス修飾子の範囲外 } }
実行した結果が下記です。
同一クラス内のexecuteメソッドから実行 public protected private サブクラス内のexecuteメソッドから実行 public protected 同一パッケージ内のexecuteメソッドから実行 public protected
解説
2つ目のサンプルでは、3~5行目のフィールドを異なるアクセス修飾子で設定しました。
16~21行目のexecuteメソッドは同一クラス内であるため、全てのフィールドにアクセス出来ています。
27~33行目のsubExecuteメソッドでは、サブクラスからのアクセスとなっているため、private修飾子のフィールドにはアクセス出来ません。
37~43行目のotherExecuteメソッドは、同一パッケージ内のクラスであるため、publicとprivate修飾子のフィールドにアクセス出来ています。
さいごに: Javaでフィールドを利用する場合はアクセス修飾子の違いを意識しよう
本記事では、Javaでのプログラミングにおける必須知識「フィールド」について、基本となる概要と実際の使い方についてご紹介してきました。
フィールドは情報を保持するために利用するためのものですが、アクセス範囲は修飾子により異なります。
オブジェクト指向の基本的な考えとして、必要なアクセス範囲に設定することが大切ですので、適切なアクセス修飾子を選択出来るようフィールド定義を検討してみてください。
Javaのフリーランス案件を覗いてみよう
Javaのフリーランス案件は豊富にあり、条件も高いものが多いです。Javaの実務経験が2年以上あればフリーランスになるのも可能です。経験が5年程あれば月単価70万円以上も可能です。Java案件のトレンドが気になる方は、Java案件の単価相場や募集トレンド
をご覧ください。
当メディアを運営するポテパンでJavaフリーランス案件のご紹介もやっておりますので、最新Java案件一覧も是非ご覧ください。
もし、RubyなどのWebエンジニアへの転職を考えている方は、転職に強いポテパンキャンプをご利用くださいませ。
otherExecuteメソッドに関しては、異なるパッケージに定義している場合、protected修飾子にもアクセス出来ないので意識しておきましょう。