【Java】getterとsetterを呼び出してみる
getterとsetterとは
getterもsetterもメソッドです。 フィールドは(多分ほとんどが)privateの修飾子になっていると思います。
他の場所からアクセスされるのを防ぐためですね。
その為、他のクラスから呼び出したり(使ったり)する時にエラーが生じてきます。
そこで、他のクラスから呼び出す為にgetterメソッドとsetterメソッドを使用することになります。
書き方
getterメソッド
public フィールドの型 getフィールド名() { return this.フィールド名; }
returnがついています
setterメソッド
public void setフィールド名(フィールドの型 任意の変数名) { this.フィールド名 = 任意の変数名; }
voidがついています
呼び出して使ってみる
まずはgetterもsetterも書いていない状態です
class Main { public static void main(String[] args) { Car car = new Car(); car.work(); } }
class Car { Tanku tanku = new Tanku(); public void work(){ System.out.println(tanku.gas); } }
public class Tanku { private int gas = 10; }
Tankuクラスのgasを表示しようとしてもエラーが表示されます
実行結果
>gas は Tanku でprivate アクセスされます
まずgetterを使い表示させます
・Mainクラスは上と同じ
class Car { Tanku tanku = new Tanku(); public void work(){ System.out.println(tanku.getGas()); } }
public class Tanku { private int gas = 10; public int getGas(){ return this.gas; } }
TankクラスにgetGasメソッドを作ります。
CarクラスでgetGasメソッドを実行し値を表示させます。
実行結果
>10
表示できました
setterを使い値を書き換える
・Mainクラスは上と同じ
class Car { Tanku tanku = new Tanku(); public void work(){ int addGas = 20; car.setGas(addGas); System.out.println(tanku.getGas()); } }
public class Tanku { private int gas = 10; public int getGas(){ return this.gas; } public void setGas(int gas){ this.gas = gas; } }
実行結果
>20
値を書き換えることができました
値を足す
・Mainクラス、Carクラスは上と同じ setterのメソッド名をaddGasとします
public class Tanku { private int gas = 10; public int getGas(){ return this.gas; } public void addGas(int addGas){ this.gas = gas + addGas; } }
実行結果
>30
値を足すことができました!
あとがき
初めは定石という言葉に惑わされていましたが・・・
それでもメソッドなんですよね。
setterは値を代入するメソッド
メソッドであることをちゃんと頭に入れていたいと思います。
【Java】継承と言われても・・・
継承といわれても
継承と言われたらある程度イメージはつくと思います。 私自身も雰囲気はわかっていました。
言葉通り継承するんでしょ?と・・・
甘かったです・・・
とりあえず"extends"をつければなんとかなるだろう
付け足したい処理を"extends"側に書けば解決るするでしょ?と思っていました。
始めのイメージ
public class Blog { Janru ja = new Janru(); public static void main(String[] args) { Blog blog = new Blog(); blog.exec(); } public void exec() { ja.display(); } }
public class Janru { public void display(){ System.out.println("ジャンルのページです"); } }
public class Baseball extends Janru { public void display() { System.out.println("野球のページです"); } }
1.extendsをつける
2.メソッド名を合わせる
そうすればオーバーライドとかいう上書きがされるはずだと・・・
しかし結果は
>ジャンルのページです
半日以上経ちましたが"エラー"か"ジャンルのページです"
しか表示できませんでした。
表示に成功
試行錯誤の中、なんとか表示させることができました。 以下のように記述を変更しました。
Janru ja = new Janru(); → Janru ja = new Baseball();
実行すると
>野球のページです
表示できました!
あとがき
"extends"をつければBaseballクラスも引っ付いてくると思っていたため 簡単にオーバーライドできると勘違いしていました。 継承しているからこそ、オーバーライドされるという浅はかな思考です・・・
本で納得することと実際にコードを動かすことは大きな差だと実感
本当にこの矢印の方向の理解が大切!!
❌親クラス→子クラス
⭕️子クラス→親クラス
【Java】String.formatを使って文字列を0埋めする方法
0埋めする方法
「0埋めする」とは・・・
例えば「商品番号:3」というものを「商品番号:0003」
という形に処理することです。
書き方
いろいろな方法があるみたいですが 今回、自分が使った形を紹介します。
String.format(書式文字列, 値);
もともと「3」という表示だったものを「0003」とするには
%04d
と書きます。
サンプル
実際に使ってみました。
class Main{ public static void main(String args[]){ int a = 3; String b = String.format("%04d",a); System.out.println(b); }
>0003
全体で4桁の数になり、足りない桁は0で埋められています。
とりあえず実行してみた
%04d → %014d
>00000000000003
%04d → %14d
> 3
%04d → %04
>Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = '0'
以上のような結果が得られました。
あとがき
String.formatはまだ一度しか使っていませんが、今後とも出てきそうなので 勉強しておいて損はないと思っています。
【Java】booleanの使い方
boolean型(ブーリアン)とは
trueまたはfalseを返す。 整数や他の値は扱えず比較を行う時に使ったりします。
実際に自分が使っている書き方(サンプル)
class Main{ public static void main(String args[]) { Main main = new Main(); main.rei(); } public void rei() { int number = 1; int number2 = 1; if(trueOrFalse(number,number2)) { System.out.println("同じ値です"); } else { System.out.println("違う値です"); } } public boolean trueOrFalse(int number, int number2) { if(number == number2) { return true; } return false; } }
>同じ値です
trueOrFalseメソッドの処理が正しければtrueを返し、間違っていればfalseを返します。 また、以下のような形でも同じ結果が返ってきます。
public boolean trueOrFalse(int number, int number2) { return number == number2; }
>同じ値です
サンプルのようにメソッドとして使うことが多いかなと思っています。
バリデーション的な役割かと・・・。
勉強を始めた頃はString型やint型をを多く使っていたので
public boolean メソッド名() { メソッドの処理; }
この形のイメージつきませんでした。
まさか、こんなに使う頻度が多いとは思ってもみませんでした。
【Java初学者】最近購入した参考書
Javaを学び始めて約2ヶ月ほどが経ちました。 まだまだ、わからないことが多い日々が続いています。
短い間ですが、参考にしている本を紹介します。
購入した本
スッキリわかるJava入門 第3版 スッキリわかるシリーズ
発売から8年であっという間に総計40万部到達した大人気シリーズの原点。 「どうして?」「なぜそうなる?」が必ずわかるJava入門書史上最強の定番書。
初学者におすすめの参考書です。
しかし、読んでもわからいところはわかりません。 全くプログラミングを勉強したことがない人にはおすすめできないです。
私はスクールでRubyを少し学んでいましたが、始めは全くわかりませんでした。
実際に、プログラムを書き始めればとても心強い参考書になっています。
オブジェクト指向でなぜつくるのか
現在のソフトウエア開発技術の主役である、オブジェクト指向の全体像とそこに含まれる各技術を平易な文章で核心をズバリと解説します。
オブジェクト指向についての本になります。 Javaを学ぶ上でオブジェクト指向を深く学ぶ必要があると思い購入しました。
絵や図が挿入されており読みやすい構成になっています。 章の始めにウォーミングアップクイズがあり軽いストレッチになります。
3分でわかるロジカル・シンキングの基本
論理的に考える力を付けたくて購入しました。 プログラマーになる以上論理的指向を身につけていきたいと思っています。
以上の3冊になります。 プログラミングを勉強している方の参考になれば嬉しいです。
【Java】matchesメソッドと正規表現
正規表現とは
正規表現とは、文字列が特定のパターンにあることを表現する表記法のことです。 電話、郵便番号、カタカナなど指定した形と一致しているか判定するときなどに使用します。
正規表現
他にもたくさんありますが、今回は一例です。
構文 | 意味 | 使用例 |
---|---|---|
^ | 行の先頭 | [^・・] |
$ | 行の末尾 | [・・$] |
¥d | 0~9の数字([0-9]と同じ) | [¥d] |
¥D | 数字以外([^0-9]と同じ) | [¥D] |
{n,m} | n回以上m回以下 | [¥d{n,m}] |
? | 0回または1回の繰り返し | [¥D?] |
¥s | 空白文字(スペース、改行文字など) | [¥s] |
使用例
0~9の数字だけ一致する
public static void main(String args[]) { String a = "3879324"; if(a.matches("[0-9]{1,}")){ System.out.println(a); }else{ System.out.println("一致しません"); } }
>3879324
String a の値に一文字でも数字以外が入っていれば
String a = "3879324v";
>一致しません
文字列の先頭と末尾が一致する
先頭文字が”g”で始まり末尾文字が”v”で終わる場合
public static void main(String args[]) { String a = "g3879324v"; if(a.matches("^g[0-9]{1,}v$")){ System.out.println(a); }else{ System.out.println("一致しません"); } }
>g3879324v
文字列の先頭に”-”が0回〜1回ある
public static void main(String args[]) { String a = "-3"; String b = "3"; String c = "--3"; if(a.matches("^[-]?[0-9]{1,}")){ System.out.println(a); }else{ System.out.println("一致しません"); } if(b.matches("^[-]?[0-9]{1,}")){ System.out.println(b); }else{ System.out.println("一致しません"); } if(c.matches("^[-]?[0-9]{1,}")){ System.out.println(c); }else{ System.out.println("一致しません"); } }
>-3 >3 >一致しません
"-"が2回続くと一致しないことが分かりました。
現在、正規表現は使うたびに検索し、コピペで対応してしています。 使用頻度もそれなりにあるので、いつか自分で書けれるようになりたいと思っています。