Java H2DB〜インストールからテストテーブル作成と表示〜

H2 データベースのインストール

ダウンロード先
上記のリンクから、下のようなページに遷移できます。

H2DBのダウンロード

そして、赤枠の部分をクリックします。

同様に、赤枠の部分をクリックします。

そうすると、「h2-XXXX-XX-XX.zip」のような名前のファイルがダウンロードできます。
サンプル:「h2-2019-10-14.zip」

h2DBのJARファイルをビルドパスに通す

Eclipseを開きプロパティ -> ライブラリ・タブを開きます

そして、赤枠にある「外部JARファイルの追加」をクリックします。
そこに、h2*.jarというファイルがあるのでそれを追加します。

bat(sh)ファイルを起動する

h2*.jarファイルの隣にある「h2.bat(Windows用)かh2.sh(Mac, Linux用)」のファイルを起動する(ダブルクリック)

http://localhost:8082」にアクセスするとしたのような画面が見れます

日本語の表示もできました。そしたら「~/test」と書いてある部分を自分の指定したパスに変更します。現状では、マイドキュメント直下です。

次のようなパスを入力しました。

jdbc:h2:/Users/ユーザー名/Java/jars/h2/db_file

そして「接続」ボタンをクリック少し待つとしたのような画面が見れます。

これで、DBの作成が完了です。

テーブルを作成する

テスト用のテーブルを作成します。
画面にある「SQLステートメントのサンプル」の下の部分をクリックします。

するとSQLが生成されて下のような表示に変わります。

そして、をクリックしますとテストテーブルが作成できます。

実行結果は下のようなものです。

JDBCで接続してみる

Javaプログラムをしたのように作成します。

  1. H2Dao.java

    public class H2Dao {
    private final String DB_URI = "jdbc:h2:/Users/takk/Java/jars/h2/db_file/test.mv.db";
    private Connection con;
    
    public H2Dao() throws SQLException {
        try {
            // DriverManager.getConnection(URI   , ユーザー名, パスワード(なし))
            con = DriverManager.getConnection(DB_URI, "sa", "");
            Statement stmt = con.createStatement();
            createTables(stmt);
            ResultSet result = stmt.executeQuery("select * from test;");
    
            while(result.next()) {
                int id = result.getInt(1);
                String name = result.getString(2);
                System.out.println("ID: " + id + " Name: " + name);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            throw e;
        }
    }
    
    public void createTables(Statement stmt) throws SQLException {
        String sql = "DROP TABLE IF EXISTS TEST;\n" + 
                "CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255));\n" + 
                "INSERT INTO TEST VALUES(1, 'Hello');\n" + 
                "INSERT INTO TEST VALUES(2, 'World');\n" + 
                "SELECT * FROM TEST ORDER BY ID;\n" + 
                "UPDATE TEST SET NAME='Hi' WHERE ID=1;\n" + 
                "DELETE FROM TEST WHERE ID=2;";
        stmt.execute(sql);
    }
    public void finalize() {
        try {
            con.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            con = null;
        }
    
    }
    }

そして、このクラスを動かします。今回は、JUnitを使用します。

public class H2DaoTest {

    @Test
    public void testConstractor() {
        try {
            H2Dao dao = new H2Dao();
        } catch (SQLException e) {
            fail("エラーになりました");
        }

    }
}

これで、実行した結果が緑になればOKです。

練習

ここまできたら、上記のコードpublic void createTables(Statement stmt) throws SQLException にあるSQLを改造してSQLを実行してみましょう。

ヒント

更新系の処理と検索(データの取得)系の処理では、呼び出すメソッドが違います。

  • 更新系:Statement#execute()
  • 検索系:Statement#executeQuery()

<更新系>

    private void execute(String sql) {
        try {
            Statement stmt = con.createStatement();
            stmt.execute(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

<検索系>

    private List<String> executeQuery(String sql, boolean isRetuen) {
        System.out.println("*** executeQuery ***");
        List<String> list = new ArrayList<String>();
        try {
            Statement stmt = con.createStatement();
            ResultSet result = stmt.executeQuery(sql);
            ResultSetMetaData meta = result.getMetaData();
            int colCount = meta.getColumnCount();
            while(result.next()) {
                for (int i = 1; i <= colCount; i++) {
                    System.out.print(i + ": " + result.getString(i) + " ");
                }
                System.out.println();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        if (isRetuen) {
            return list;
        }
        return null;
    }

でわでわ。。。

Mavan インストール ~ワンポイントレッスン的な~

Mavenのインストール

このMavenはビルドツールとして世界中で利用されているものです。自分も開発したり、サンプルを作成するときに使用することが多いです。同類のものとしてgradleというものがありますが、今回はビルドツールのMavenをインストールします。

Javaのインストール

こちらのサイト、java.netよりインストーラーをダウンロードできます。これでインストールすると
Mavenのインストール準備ができます。

確認方法

「windows」ボタンを押しながら「R]ボタンを押下します。

すると下のようなダイアログが表示されるので「cmd」と入力してエンターキーを押下してください、
するとコマンドプロンプトが開きます。

ここでjava --versionと入力してバージョン情報が表示されればOKです。(ラズパイでの表示ですが。。。)

Mavenのインストール

  1. Apache MavanのサイトからZIP(apache-maven-X.X.X-bin.zip)ファイルをダウンロードします。※「X」は数字が入ります。
    手順はです。

  2. ZIPのファイルを展開して、展開後にできたフォルダが以下のようになります。

  3. 最後に、上のbinフォルダを環境変数へ登録します。

こんな感じです。

でわでわ。。。

関連ページ一覧

[Eclipse セットアップ](http://zenryokuservice.com/wp/2020/09/01/%e9%96%8b%e7%99%ba%e7%92%b0%e5%a2%83%e6%a7%8b%e7%af%89%ef%bd%9ewindows%e7%89%88eclipse%e3%81%ae%e8%a8%ad%e5%ae%9a%ef%bd%9e/)

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

JavaFX関連ページ

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
  4. Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine

JavaFX + ND4Jで機械学習準備

  1. JavaFX + ND4J〜数学への挑戦1:ND4Jのインストール〜
  2. JavaFX + ND4J〜数学への挑戦2: 行列の計算〜
  3. Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

オブジェクト指向関連ページ

  1. [オブジェクト指向の概念1〜OracleDocのチュートリアル1〜](https://zenryokuservice.com/wp/2019/10/301. /%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e3%81%ae%e6%a6%82%e5%bf%b5-%e3%80%9coracledoc%e3%81%ae%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88%e3%83%aa%e3%82%a2%e3%83%ab%ef%bc%91/)
  2. オブジェクト指向の概念2〜クラスとは〜

Java Discord

  1. IntelliJ IDEA Discord Botを作る〜Gradle環境のセットアップ〜
  2. Java Discord セットアップ〜Hello Discord〜
  3. Java Discord ピンポン〜Discordプログラム〜
  4. Java Discord Listener実装〜コマンドを好きなだけ追加しよう〜

Java ワンポイント ~Servletクラスの作り方~

Java Servletでウェブサーバー

HttpServletクラスを拡張した実装を行う方向で話を進めているのであくまでも下のようなコードをベースに考えてもらいたく思います。

public class JspLlesson1 extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
        res.setContentType("txtext/html; charset=UTF-8");
        PrintWriter write = res.getWriter();
        write.println("<html><body>Hello World</body></html>");
    }
}

このコードは、Tomcatを使用したときのコードです。Eclipseで実行したのですが、作成した上のクラスファイルを右クリックして「で起動」をクリックすると実行する事ができます。

これで、「サーバー上で利用できるリソースがありませんでした。」のようなメッセージが表示されたら下の手順で、実行することができるようになります。

Tomcatの準備

Tomcatランタイムの追加

Eclipseの上部にあるメニューからウィンドウ -> 設定を選択、下のイメージのように 検索部分に「サーバー」と入力 -> 赤枠を選択します。

そして、Java8を使用しているので、Tomcatの8.5を選択します。

ここで、Tomcatがインストール(ダウンロード)されていない場合は、Apacheのサイトからダウンロードしてきます。

ダウンロードした、Tomcatを展開して、Eclipseの設定でそのフォルダーを指定します。

最後に完了を押下します。

サーバープロジェクトの追加

1.パッケージエクスプローラーを右クリック、そのほかのプロジェクトをクリック
2.下のイメージのように、その他から次へをクリック

3.同様に、完了をクリックする※設定を確認する

4.プロジェクトファセットの設定を行います。

5.プロジェクトを選択して「Altボタンを押しながらEnterを押下」すると下のような画面が見れます。

6.プロジェクトファセットを選択、下のイメージのようにJava1.8を設定、動的ウェブモジュールを設定します。

7.設定を適用します。

8.web.xmlを生成します。

web.xmlの設定を行う

書き方は以下のようになります。

  <servlet>
    <servlet-name>サーブレット名</servlet-name>
    <servlet-class>完全クラスパス</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>サーブレット名</servlet-name>
    <url-pattern>対応するURL</url-pattern>
  </servlet-mapping>

全体を記載すると下のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>StudyJavaBasic</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>JspLlesson1</servlet-name>
    <servlet-class>ysg.teacher.tkm.sukiri2.JspLlesson1</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>JspLlesson1</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

classesフォルダを作成する

最終的に下のように、フォルダ構成を作ります。

JavaServletを実行する

この状態で、下のように、プログラムを実行します。

以下のURLにアクセス

localhost:8080/プロジェクト名/

今回作成したプロジェクト名が「StudyJavaBasic」なので下のようなURLにアクセスすると作成したサーブレットが起動できます。

http://localhost:8080/StudyJava/

関連ページ

DBの学習 ~JavaDBのセットアップ~

イントロダクション

基本情報技術者試験の学習をしていたら、データベースの学習に入りました。せっかくなので、JavaでDBの学習を使用と思った次第です。

JavaDB

JabaDBに関してはこちらを参照しました。です。

結論的には、Apache Derbyのサイトからダウンロードするということでした。

Settingup Derby

参照したページはこちらApacheDerbyのページです。

  1. ダウンロードしたファイル(db-derby-XX.XX.X.X-bin.zip)を展開します。自分はJDKのディレクトリに解凍しました。

  2. DERBYTUTOR というディレクトリをJDKの直下に作成しました。

    mkdir DERBYTUTOR

  3. 作成したディレクトリに移動する

    cd DERBYTUTOR

  4. SQLファイルをコピーする

    copy %DERBY_HOME%\demo\programs\toursdb*.sql .

    5.コピーしたファイルを確認する

    dir

  5. ij`コマンドを実行する。ただし、環境変数を設定しない場合は、`db-derby-10.14.2.0-bin\bin`に移動してから実行する。⇒`DERBY_HOME/bin

  6. 起動したら、CONNECT 'jdbc:derby:firstdb;create=true';のコマンドでDBコネクションを取得する。

  7. ダウンロードしたファイルを解凍、展開したディレクトリ(db-derby-10.14.2.0-bin)から、次の場所に「」があるのでそれをロードします。コマンドプロンプトで、ijコマンドを実行するディレクトリを上の場所にしてやれば次のコマンドでテーブルを自動で作成してくれます。

    run 'ToursDB_schema.sql'

    ちなみに、対象のディレクトリは下のようなファイルがあります。

とりあえずは以上です。今後SQLの実行など追記していきます。

でわでわ。。。

Java オブジェクト指向 ~設計図と実装のイメージをつなげる~

イントロダクション

下のようなツイートをしてみたところ。。。

複数の「いいね」をもらったので、自分の知っていることを記載します。

1. 設計と実装のつながり
2. 設計(クラス図)について
3. オブジェクト指向

結論から言うと「設計図(クラス図)は実装を示している」という認識です。
しかし、「オブジェクト指向で躓く人が多い」というウワサから想像するに、この部分は多くの人がつまずく部分だと思われます。

「躓いた数なら日本一」の自信がある自分としては、以下のものが不明瞭な認識のままではなかろうかと思います。
1. 設計と実装のつながり
2. クラス同士の関係
3. クラスのインスタンス化
4. 処理の追いかけ方

サンプルとして下のようなコンソールアプリを作成しました。
※ 以前作成したのものがありました。。。

これのクラス図も作成しました。

これらを材料にして設計(クラス図)と実装のつながりを見ていこうと思います。

# 1. 設計と実装のつながり
実装をしてない状態では、上記のイメージ(クラス図)のように、詳細な処理が書かれていない状態です。
この部分は「自分で考える」必要があります。

具体的には、**単純に疑問点を明確にしていく作業**があるということです。クラス図の内容を箇条書きにすると下のようになります。

1. MainBankクラスはCalculationクラスを持っている(属性を持っている)
2. MainBankクラスはメインメソッドを持っている(操作を持っている)
3. MainBankクラスはatm()を持っている(操作を持っている)
4. Calcurationクラスはyokingaku()を持っている(属性を持っている)
5. CalcurationクラスはgetYokingaku()を持っている(操作を持っている)
6. CalcurationクラスはsetYokingaku()を持っている(操作を持っている)
6. Calcurationクラスはnyukin()を持っている(操作を持っている)
7. Calcurationクラスはvalidate()を持っている(操作を持っている)
8. Calcurationクラスはcalcurate()を持っている(操作を持っている)
9. InputCheckerクラスはvalidNyukinHikidashi()をもっている(操作を持っている)

上のような内容だと**処理の内容が**わかりません。それもそのはず、コーダー(実装者)が行うべき仕事だからです。

早い話が、自分で考えましょうということです。

上のわかっていることで**確定しているところは「属性」**です。なので属性はそのまま実装していしまいます。

#### ポイントその1
フィールド変数に関しては明確になっている、一例ですが下のような部分です。
> 1. MainBankクラスはCalculationクラスを持っている(属性を持っている)

というのは、フィールド変数にCalculationクラスをもっていて、クラス図にある「-」はアクセス修飾子が「private」ということです。

<[MainBank.java](https://github.com/ZenryokuService/PracticeJava1/blob/master/PracticeJava1/src/jp/zenryoku/apps/atm/MainBank.java)>
```java
public class MainBank {
/** 金銭管理クラス */
private Calcuration cal;
}
```

<[Calcuration.java](https://github.com/ZenryokuService/PracticeJava1/blob/master/PracticeJava1/src/jp/zenryoku/apps/atm/Calcuration.java)>
```java
public class Calcuration {
/** 預金額 */
private int yokingaku;
```

<[InputChecker.java](https://github.com/ZenryokuService/PracticeJava1/blob/master/PracticeJava1/src/jp/zenryoku/apps/atm/check/InputChecker.java)>
```java
public class InputChecker {
}
```

## 2.設計(クラス図)について
設計(クラス図)について考えていきます。

#### 不明点のポイント
どのように実装したらよいか?というところに焦点を当てます。
不明点の残る「操作」に関してはとりあえずメソッドだけ作ってしまいます。
上のクラス図には詳細な返却値などの指定がないので、この部分も不明点 -> 自由に実装してよいところ、となるわけです。

メインメソッドは最後にします、それはこれから作成する「操作」をそろえてから、「不足する操作(メソッド)」を作ってから考えるべきだからです。※不足分を後で追加すると面倒なのです。。。

料理に例えると、先に作成する料理の、材料をそろえるようなイメージです。

まずは、不明点の洗い出しを行います。操作の内容が不明な状態なのでメソッドの一覧を作成することになります。

1. MainBank#main()に関してはメインメソッドなので最後にします。
2. MainBank#atm()は、名前からしてコーダー銀行アプリを起動するメソッドにします。
2. Calcuration#getYokingaku()は名前からしてフィールドの値を取得するメソッドにします。
3. Calcuration#setYokingaku()も名前からしてフィールドの値を設定するメソッドにします。
4. Calcuration#nyukin()メソッドは、名前からしてお金を入金するときのメソッドにします。
5. Calcuration#validate()メソッドは、名前からして入力チェックのメソッドにします。
6. Calcuration#calcurate()メソッドは、名前からして計算処理を行うメソッドにします。

ここまで作成したら、処理のイメージが湧いてくるかと思います。

大まかに、Calcurationクラスで、入金(出金)を行い、預金金額の管理も行う。というところです。

そのためには「入金(出金)(nyukin())」メソッドを用意して、計算処理のメソッド(calcurate())を用意して。。。

というような実装イメージがわくと思います。

具体的にメソッドの枠を作ってみましょう、具体的にはメソッドを空実装(中身の実装をしない)をしてみます。

### 実際の業務として実装するときは
「この部分に関しては「このように実装します。よろしいでしょうか?」などのように上長に確認しましょう。

### 操作の実装
早速、実装していきます。まずは入力(IN)と出力(OUT)を明確にします。この部分は設計の工程になります。
業務としては、この詳細な設計部分は設計書に記載されていることがほとんどですが、たまに「よろしく!」といわれることがあるので、そのときは、自分で考えます。

「このように実装します」という報告は忘れないようにしましょう。

まずは、設計図(クラス図)でもメソッドの量が多いので、CalcurationクラスのI/O(INとOUTのこと)を決定します。「空実装」を行うという意味です。しかし、ゲッターとセッターに関しては処理が決まっているので実装してしまいます。

ここまでの実装は以下になります。

```java
public class Calcuration {
/** 預金額 */
private int yokingaku;

/** コンストラクタ */
public Calcuration() {
}

/**
* 預金金額のゲッター
* @return the yokingaku
*/
public int getYokingaku() {
return yokingaku;
}

/**
* 預金金額のセッター
* @param yokingaku the yokingaku to set
*/
public void setYokingaku(int yokingaku) {
this.yokingaku = yokingaku;
}

/**
* 入金処理 or 引出し
* @param input 標準入力
* @param isNyukin
*/
public void nyukin(Scanner input, boolean isNyukin) {
}

/**
* 入力チェック処理
* @param in
* @return true: 入力エラー false: 入力OK!
*/
private boolean validate(String in) {
return false;
}

/**
*
* @param in 数字文字
* @param isNyukin ture: 入金処理 false: 引出し処理
*/
private boolean calcurate(String in, boolean isNyukin) {
return true;
}
}
```

### クラス同士の関係
上のクラス図にあるクラスは以下の3つです。
1. MainBank
2. Calcuration
3. InputChecker

これらの関係性を考えると、下のような役割を持たせてやるとよい関係が築けそうです。
1. MainBank => メインメソッドを実行する
2. Calcuration => 預金金額の計算、管理を行う。
3. InputChecker => 入力チェック処理を管理する。チェック処理はここに書くということです。

この部分(クラスの関係)は、アイディアの良し悪しが入ってくる部分ですのでプログラミングの面白いところでもあります。上記のような関係よりも良い関係があればそのように実装するべきです。

そして、それぞれのクラスの役割が決まってきたら次は、空になっているメソッドの実装を行います。

## 3.オブジェクト指向
ここで、頭の中を設計レベルに戻します。

具体的には、どのような処理を行うか?を考えるというところです。

以下のような、手順で考えるとよいと思います。

1. メインメソッドにコメントで処理の順番を記述する
```java
public static void main(String[] args) {
// 1.MainBankクラスのインスタンス化
// 2.MainBank#atm()メソッドを呼び出す
}
```

2. MainBank#atm()メソッドにコメントで処理の順番を記述する
```java
public void atm() {
// 1. コーダー銀行の受け付け開始文言を出力
// 2. 無限ループを開始
// 3. 初期画面の文言を出力
// 4. 標準入力を受け付ける
// 5. "bye"と入力があった場合は処理を終了する
// 6. 入力チェックをする
// 7. "in"と入力があった場合は入金処理を行う
// 8. "out"と入力があった場合は出金処理を行う
}
```
ここで、"in" もしくは "out" が入力されたときは入金処理を呼び出します。入金時と、出金時を区別するための引数も付けます。

3. 各部品クラス(Calcuration, InputChecker)に実装コメントを書く

この様にすると、不明点を明確にすることができるのではないでしょうか?

あくまでも自分の考えた「設計」なので、もっと良い「設計」があるかもしれません。

この様に、下のクラス(オブジェクト)に役割を持たせ、必要な処理(メソッド)を実装します。処理はなるべく周りに影響が出ないように、実装しているクラスのみに影響範囲が収まるように実装します。

具体的には、メソッドでほかのクラスの処理を呼び出す、用途が限定されるなどのような実装にならないようにするということです。しかし、他のクラスの処理を**必ず呼び出さない**というのも不適切な判断なので、この部分はフレキシブルに実装するべきです。

つまりは、実装の経験(自分で実装してみるなどの経験)により、より良い方法を身に着けることができます。

この様なところが**「知識」ではなく「技術」**なのです。

### クラスのインスタンス化
上記で出てきたクラスについて、考えます。
> 1. MainBank => メインメソッドを実行する
2. Calcuration => 預金金額の計算、管理を行う。
3. InputChecker => 入力チェック処理を管理する。チェック処理はここに書くということです。

ここで、特殊なのは「メインメソッド」です。これは**static**修飾子がついているので、MainBankクラスの中にあっても、定義したメソッド(メンバ・メソッド)を実行するためには、インスタンス化が必要です。
つまり「new」する必要があるということです。

インスタンス化するというのは、**PCのメモリ上に「クラス」で定義したオブジェクトを作成する**ということです。この部分は、とても抽象的なので理解に苦しみました。

自分の場合は、絵にするとわかりやすかったので絵にすると上記のようなクラス図と似たものになりました。
![](http://zenryokuservice.com/wp/wp-content/uploads/2020/11/import1-5.png)

今回の実装では、インスタンス化するクラスは1つなので、複数ある場合を顧慮しなくてよいですが、ただ一つインスタンス化していないクラスつまり、「new」していないクラスがあります。

InputCheckerクラスです。このクラスのメソッドはstatic修飾子がついていて、インスタンス化しなくてよいのです。

staticはクラスの「インスタンスに依存しない」ということなので、起動するあっぷりケーションには必ず1つです。

具体的にはメインメソッドが必ず一つです。そして、staticをつけたXXXメソッドはクラスに一つです。

例えば、上記のCalcurationクラスを複数作成した場合、預金額はCalcurationクラスのインスタンスの数だけ存在します。
```java
public stataic void main(String[] args) {
Calcuration calA = new Calcuration();
Calcuration calB = new Calcuration();

calA.nyukin(); // ここで、入金処理
calB.nyukin(); // ここで、入金処理

System.out.println(calA.getYokingaku());
System.out.println(calB.getYokingaku());
}
```
のように実装した場合は、calAとcalBで保持している預金金額の値が**別々に**計算されます。

逆に、預金金額の修飾子にstaticがついていた場合は、calAとcalBで保持している預金金額の値が**同じに**なります。

### 処理の追いかけ方
これは、そのまま読むしかないのですが、まずは決まっているところから記載します。
**まずはメインメソッド**から、処理が始まります。これは絶対です。
なので、メインメソッドの処理を追いかければそのまま処理を追いかけることになります。

詳細に関しては、すでに記載しているので割愛します。

以上で、設計図と実装のつながりが理解できたと思います。

如何でしょうか?

でわでわ。。。

## 関連ページ一覧

[Eclipse セットアップ](http://zenryokuservice.com/wp/2020/09/01/%e9%96%8b%e7%99%ba%e7%92%b0%e5%a2%83%e6%a7%8b%e7%af%89%ef%bd%9ewindows%e7%89%88eclipse%e3%81%ae%e8%a8%ad%e5%ae%9a%ef%bd%9e/)

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

## JavaFX関連ページ
1. [Eclipse SceneBuilderを追加する](https://zenryokuservice.com/wp/2018/11/17/eclipse-scenebuilder%e3%82%92%e8%bf%bd%e5%8a%a0%e3%81%99%e3%82%8b/)
1. [JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~](https://zenryokuservice.com/wp/2018/11/17/javafx-scenebuilder-%e3%80%9ceclipse%e3%81%a8scenebuilder%e9%80%a3%e6%90%ba/)
1. [JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜](https://zenryokuservice.com/wp/2019/02/05/javafx-scenebuilder%e3%80%9c%e3%83%9c%e3%82%bf%e3%83%b3%e3%81%ab%e3%83%a1%e3%82%bd%e3%83%83%e3%83%89%e3%82%92%e5%89%b2%e3%82%8a%e5%bd%93%e3%81%a6%e3%82%8b%e3%83%af%e3%83%b3%e3%83%9d%e3%82%a4%e3%83%b3/)
1. [Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜](https://zenryokuservice.com/wp/2020/03/30/java-%e3%83%97%e3%83%ad%e3%82%b3%e3%83%b3%e3%82%b2%e3%83%bc%e3%83%a0-%e3%80%9c%e8%a6%8b%e3%81%9f%e7%9b%ae%e3%81%ae%e4%bd%9c%e6%88%90scenebuilder%e3%81%ae%e4%bd%bf%e7%94%a8%e3%80%9c/)

## ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine

## JavaFX + ND4Jで機械学習準備

  1. JavaFX + ND4J〜数学への挑戦1:ND4Jのインストール〜
  2. JavaFX + ND4J〜数学への挑戦2: 行列の計算〜
  3. Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

## オブジェクト指向関連ページ
1. [オブジェクト指向の概念1〜OracleDocのチュートリアル1〜](https://zenryokuservice.com/wp/2019/10/301. /%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e3%81%ae%e6%a6%82%e5%bf%b5-%e3%80%9coracledoc%e3%81%ae%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88%e3%83%aa%e3%82%a2%e3%83%ab%ef%bc%91/)
1. [オブジェクト指向の概念2〜クラスとは〜](https://zenryokuservice.com/wp/2019/10/30/%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e3%81%ae%e6%a6%82%e5%bf%b5%e3%80%9c%e3%82%af%e3%83%a9%e3%82%b9%e3%81%a8%e3%81%af%e3%80%9c/)

Java Discord

  1. IntelliJ IDEA Discord Botを作る〜Gradle環境のセットアップ〜
  2. Java Discord セットアップ〜Hello Discord〜
  3. Java Discord ピンポン〜Discordプログラム〜
  4. Java Discord Listener実装〜コマンドを好きなだけ追加しよう〜