見出し画像

フィールドについて vol.40

今回はフィールドについて書いていこうと思う。また、少し修飾子についても触れようと思う。

1.フィールドとは

画像1

上記の画像の様にクラスとメソッドの間に変数宣言がされている。

なぜこんなところに書くのかというと以前変数の有効範囲について説明したことがあると思うが、{}でくくられている間が有効範囲である。
今回の様にメソッドの外でありクラスの{}内にくくられているのでそのクラス内なら有効に使える変数がこのフィールドというわけだ。

言語によってはそのような変数をグローバル変数と言ったりもするが、Javaではフィールドと呼んでいる。

書き方としては、クラスとメソッドの間に

[修飾子]データ型 変数名;
もしくは
[修飾子]データ型 変数名 = 値;

フィールドが普通に使えるのか試してみよう。

Fieldクラスのstrメソッドを呼び出して確認しよう。問題なく呼び出せれば、今まで使っていた変数と同じように使えるだろう。

画像2

予想通りうまくいった。普通に変数として使えることがわかる。

これだけではどのようなメリットがあるかわからない。

2.フィールドのメリット

これまでメソッドを呼び出すときはデータが真新しいものばかりであまり使いまわしができていなかったと思う。

しかしフィールドが解決してくれる。

画像3

例えば上記の様にint型のフィールドを作り、初期値を設定するメソッド、足し算や引き算をするメソッドがある。

これまでだと、mainメソッドから二つの値を渡して計算させるか、もともと決まっている数に対しての計算をさせるかで、可変性のないものばかりであったと思う。

今回はどのように違うのか見せてみよう。

どの様にしていくかというと、

defメソッドでまず初期値を決める。
次にaddで15を足す。
そしてbackで5を引き
さらにbackで30引く。
最後にまた初期値に戻すというプログラムだ。

コンソールに表示させると

0
15
10
-20
0

のようになるだろう。実際に見てみよう。

画像4

このようにフィールドで変数の引き継ぎがうまくできている。

ここで注意点もある。

3.注意点

例を出そう。一番先出した画像と同じだが、

画像5

もしくは

画像6

Stringの前に何もついていないフィールド、もしくはpublicのついているフィールドほかのクラスからも書き換えることができてしまう。

画像7

このようにFieldクラスのフィールドをMainクラスで書き換えてしまっている。

これは意図して書き換えたからよいのだが、書き換えるべきではなったものを、書き換えてしまう可能性もなくはない。

では、どうするのか。

修飾子を変える。

4.修飾子とは

これまで使ってきたpublicなどメソッドの前やクラスの前に着けているものだ。

修飾子とも呼んでいるが、アクセス修飾子とも呼ぶ。

アクセス修飾子とは、public、protected、privateといった修飾子の総称で、クラスなど、どこからアクセス可能であるかを決定する。

画像8

この修飾子を使ってアクセスの制限をかける。

この場合はprivateを使って制限をかける。

画像9

このようにフィールドの修飾子のところをprivateにした。
そうすると

画像10

Mainクラスで変更を行おうとすると、エラーが出た。
これで他クラスからの変更を阻止できる。

また、同じクラス内でも変更できないようにできる。

5.final修飾子

以前、変数宣言のところでも紹介したfinal(定数)が使用できる。

定数は変数と違って変化しない、させることができないもののことだ。

画像11

変更しようとすると、このようにエラーになる。

これが一番の変更の宣言だ。

アクセス修飾子の場合は変更というよりも呼び出しができるできないという意味なので少し意味が変わってくる。

フィールドについてはこのようなものだ。

普通の変数とフィールドの違いは使ってみるのが一番わかりやすいので、ぜひ使ってみてほしい。

今回は以上。

では、また次回
元体育会系文系エンジニア石黒


この記事が参加している募集

習慣にしていること

この記事が気に入ったらサポートをしてみませんか?