MENU

【Java】getterとsetterを呼び出してみる

f:id:kiserukun:20210611090227p:plain

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

値を足すことができました!

あとがき

初めは定石という言葉に惑わされていましたが・・・
それでもメソッドなんですよね。  

getterは値を引っ張ってくるメソッド
setterは値を代入するメソッド

 
メソッドであることをちゃんと頭に入れていたいと思います。

【Java】継承と言われても・・・

f:id:kiserukun:20210611090227p:plain

継承といわれても

継承と言われたらある程度イメージはつくと思います。 私自身も雰囲気はわかっていました。

言葉通り継承するんでしょ?と・・・

甘かったです・・・

とりあえず"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埋めする方法

f:id:kiserukun:20210611090227p:plain

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はまだ一度しか使っていませんが、今後とも出てきそうなので 勉強しておいて損はないと思っています。

【一株投資】三菱商事、プロシップより配当金をいただきました!

f:id:kiserukun:20210619154605p:plain

配当金をいただける月はわくわくします。
今回は、三菱商事とプロシップより配当金の計算書が届きました。 f:id:kiserukun:20210627182304j:plain

三菱商事は11株しか持っていません!笑

それでも、
f:id:kiserukun:20210627182828j:plain 「Toyo Bunko Museum」
無料招待券をいただけます。

前回は「静嘉堂文庫美術館」の無料招待券をいただけました。

100株すら持っていないのに三菱商事さん、太っ腹です。


プロシップは f:id:kiserukun:20210627182239j:plain 早く100株買って優待のクオカードをいただきたいです。

やっぱり、入金力は大事。

【Java】booleanの使い方

https://cdn-ak.f.st-hatena.com/images/fotolife/k/kiserukun/20210611/20210611090227.png

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版 スッキリわかるシリーズ

f:id:kiserukun:20210627130657j:plain

発売から8年であっという間に総計40万部到達した大人気シリーズの原点。 「どうして?」「なぜそうなる?」が必ずわかるJava入門書史上最強の定番書。

初学者におすすめの参考書です。

しかし、読んでもわからいところはわかりません。 全くプログラミングを勉強したことがない人にはおすすめできないです。

私はスクールでRubyを少し学んでいましたが、始めは全くわかりませんでした。

実際に、プログラムを書き始めればとても心強い参考書になっています。

オブジェクト指向でなぜつくるのか

f:id:kiserukun:20210627130747j:plain

現在のソフトウエア開発技術の主役である、オブジェクト指向の全体像とそこに含まれる各技術を平易な文章で核心をズバリと解説します。

オブジェクト指向についての本になります。 Javaを学ぶ上でオブジェクト指向を深く学ぶ必要があると思い購入しました。

絵や図が挿入されており読みやすい構成になっています。 章の始めにウォーミングアップクイズがあり軽いストレッチになります。

3分でわかるロジカル・シンキングの基本

f:id:kiserukun:20210627130733j:plain

論理的に考える力を付けたくて購入しました。 プログラマーになる以上論理的指向を身につけていきたいと思っています。


以上の3冊になります。 プログラミングを勉強している方の参考になれば嬉しいです。



【Java】matchesメソッドと正規表現

https://cdn-ak.f.st-hatena.com/images/fotolife/k/kiserukun/20210611/20210611090227.png

正規表現とは

正規表現とは、文字列が特定のパターンにあることを表現する表記法のことです。 電話、郵便番号、カタカナなど指定した形と一致しているか判定するときなどに使用します。

正規表現

他にもたくさんありますが、今回は一例です。

構文 意味 使用例
^ 行の先頭 [^・・]
$ 行の末尾 [・・$]
¥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回続くと一致しないことが分かりました。

現在、正規表現は使うたびに検索し、コピペで対応してしています。 使用頻度もそれなりにあるので、いつか自分で書けれるようになりたいと思っています。