Java Doc 読解 System

java.lang.SystemクラスのJavaDoc 読解です。JDK ver1.8

使い方

「new」しないで使用します。
System.メソッド名(フィールド名)の様に使用します。
このようなメソッドの呼び出し肩を静的呼び出しと言います。下のような感じです、
System.out.println("XXX");

実行サンプルコードはこちらです。

それぞれ
out: PrintStram(InputStream)の新しい(ラップした)ものです。(標準出力)
err: 「out」に同じ
in: InputStream(標準入力)

例:毎度おなじみ標準出力(コンソール出力)

System.out.println("文字列を記述");

Systemクラスのフィールド「out」を呼び出しさらに「println」メソッドを呼びます。これは改行が含まれます。

System.out.print("文字列を記述");

上記と同様です。ただし、改行が含まれません。

Systemクラスには標準入力に「in」があります。

例1:一番レベルが低い状態(他のクラスでラップしない)

byte[] input = new byte[3]; // 3文字の入力を受け付ける(全角は1文字)

System.in.real(input, 0, 2); // 3文字文の領域しか用意していない

【メソッド読解】
このクラスでは全てが「static」メソッドです。
equalsなどは「Object」(親)クラスのメソッドです。

  1. arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
    src: コピー元の配列を設定する
    srcPos; コピーを開始する位置を指定
    dest: コピー先の配列
    destPos: コピー先配列の開始位置
    length: コピーする数
  2. 以下は、システム・レベルで扱うプロパティなのでいじらない方が良いかも?
    clearProperty(String key)
    setProperty(String key, String value)
  3. その他、よく使うのものをピックアップしました。
    exit(int status): 起動しているJavaアプリケーションを終了します。
    ※この処理が走ると強制的に終了します。
    gc(): ガベージコレクション(もう使用していないオブジェクト)を解放します。
    ※メモリの解放を行います。細かいことは後々。。。
    そして、下のコードと同じ意味です。

    Runtime.getRuntime().gc()
  4. getenv():環境変数などの値が入っているMapが返されます。

標準入力〜標準出力を行ったプログラム=テキストRPG(戦闘シーンのみ)を作成しましので、画像を見ると、イメージがつきやすいと思います。


関連ページ一覧

Eclipse セットアップ

  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 Basic ミニゲーム作成 〜Step3_1〜

イントロダクション

はじめにコンソール画面を使用してミニゲームを作成しようと思っています。
標準入力(コンソール画面に入力する)を使用して行いますので、参考までに標準入力のサンプルを載せておきます。

  • ミニゲームの作成を行います。
    処理の概要としては、以下の通りです。( version0.1)
=====補足==========
<基本設計レベル>
[詳細設計レベル]
==================

<初期処理>
画面状態管理Obj
リソースの読み込み
[テキストで表示する絵を読み込み変数に保存]→テキストファイル

[新規で追加するファイルも読み込める様に工夫する]

<選択→決定処理>
ゲームタイトル画面の「スタート」「コンテニュー」の選択をする

以下の様に表示する

START:S
CONTINUE: C
<イントロダクションの表示処理> イントロダクションのテキストファイルを読み込み ストーリーの序章を表示して、ゲームを開始できる様な文章を表示する

この仕様で実装します。
1.画面状態管理Objの作成
シンプルにMap型のフィールド変数を作成します。
2.リソースの読み込み、単純にテキストファイルの読み込みです。
※今後はプロパティファイルなど読み込む予定です。(XMLもやるかも?)

※未実装です

  1. これもテキストファイルを読み込みゲームの序章を表示します。

今回は、ここまでを実装します。

土台にするのは以前の実装です。
クラス名はブログの都合上変えてあります。
そして「画面状態」は今回初登場の「Map」インターフェースを使用して管理します。

<<元にするソースについて>>

ゲームの基本的な処理フロー

初期化→ゲームループ→終了

上記のメソッドを実装してあります。

まとめると

  1. ゲームの起動準備
  2. 入力→画面の更新をループする
  3. ゲームの終了

上記の3つの処理の中で、ゲームを進行させていくと言うことです。が実装してみないとイメージがわかないと思います。※イメージが湧く人は頭のいい人です。

サンプルコードは一番上の「ミニゲーム」の部分にリンクしています。

コンソールゲームで初めのタイトルが表示される様なものです。初めはこれからストーリーをつけて。。。と考えていたのですが、ストーリーができず。。。保留状態です。。。

関連ページ一覧

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 4Boolean
  5. Java Basic Level 5If 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 9Training 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 〜テストスイートの作り方〜

 

Java Doc 読解 List 〜java.util.List その1〜

Java Docの読解

コレクションフレームワーク(CollectionFramework日本語)のスーパーインターフェース(親インターフェース)にあるCollectionは
Collections Frameworkの根っこになるものです。

※スーパーインターフェース(親インターフェース)はコードに書くと下のようになります。

public interface 子供インターフェース extends 親インターフェース

ポイント

・ループ処理が楽になる
・便利なメソッドがあると思ってもらえばおっけ。
・Iteratableは「forEach」メソッドを提供します。→ラムダ式が使えるということ

List<E>のEはエレメント(要素)

を示し、ジェネリクスと呼びます。
リストなどを使用する時は大体これがもれなく付いてきます。

// ArrayListをListとして使用します。
List<String> list = new ArrayList<>();
// LinkedListをListとして使用します。
List<String> list = new LinkedList<>();
// VectorをListとして使用します。
List<String> list = new Vector<>();

上記の様に使用します。

用途としては、リストに登録した値をソート(並び替え)、指定したものの取得、リスト内にあるかチェックするなど

色々とあるので探してみるのも一興です。
百聞は一見にしかずです。ソースはこちらです。
Gitからダウンロードできます。

類似品にセット(Set)があります

toArray()はList→配列(T[])の形へ変換する

サンプルコードです。

ArrayList<TestA> list = new ArrayList<>();
for (int i = 0; i < 5; i++) {
   list.add(new TestA());
}
TestA[] items = new TestA[list.size];
items = list.toArray(items);

これで対象の型(クラス)を安全に取り出すことができます。

昔のやり方だとキャストしていましたので、コードとして美しくないし、ClassClastExceptionに対する注意が必要(安全な型変換ではない)なのでイマイチなコードでしたが、最近ではこのような方法があるのでGoodですね。

<イマイチなコード>

ArrayList<TestA> list = new ArrayList<>();
for (int i = 0; i < 5; i++) {
 list.add(new TestA());
}
// キャストしているので安全ではない
items = (TestA[]) list.toArray();

リストの主な機能

リストへの要素追加、削除、検査
ラムダ式オブジェクト取得

そのほかにもありますが、今回はここまでにします。

関連ページ一覧

Eclipse セットアップ

  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の使用)〜

Java Basic ミニゲーム作成 〜コンソールゲーム〜

イントロダクション

コマンドプロンプト(Windows), ターミナル(Mac, Linux)で文字ベースでのゲームを作成しようと試みました。結局ゲームの内容までは届きませんでしたが、入力〜出力までの一連の流れを実装しました。

つまり、ゲームのイメージがあればこのまま完成まで行けるのでは?

別物ですが、こんなものも作ってみました。

Introduction

I will create a text based game on terminal or command prompt. But I implemented only from Input to output.

I mean if you have idea then you can implement game?

 

実際に作ったもの

作成したJarファイルはこちらです。
コマンドプロンプトから起動してください。
Macの場合はターミナルです。
ダウンロードしたディレクトリに移動

cd ダウンロードしたディレクトリ
java -jar ./CmdRpg.jar
で起動することができます。
GitからプロジェクトをそのままPullしてきてもおっけ
プロジェクトのPull方法を参照してください。(LWJGLの場合です)

ゲームの処理概要としては以下の様になります。ソースはこちら

/**
 * ゲームを起動する </br>
 * 標準入力の受付、「bye」コマンドでAPを終了する</br>
 *
 * @param args プログラム引数
 */
public static void main(String[] args) {
   // 初期化処理
   init();
   try {
      // ゲーム起動(GameLoop開始)
     gameLoop();
   } catch(IOException ie) {
      ie.printStackTrace();
   }
   // リソースの解放
   terminated();
}

このクラスは、どんどん拡張(追加で実装)できる様に
筆者なりに考えて作成いたしました。
これを土台にするもしないも自由にやってもらって結構です。

一応、記載しておきます。余計であれば読み飛ばしてください。
【考え方】
1.起動するメインメソッド→ゲームを起動する部分だけを記述したい。

1.Execute main method → I would like to write olnly game execution.

  1. メインメソッドから呼び出したい(処理の範囲を切り分け)
    処理を「staticメソッド」で定義。
    →処理を「初期化」「ゲームループ」「終了(リソース解放)」と
    カテゴリ分けをする。

Static method is called by main method → separates implementation as “init”, “game loop”, “terminated”.

3.静的メソッド(メインメソッドを含む)とメンバメソッドを切り分ける→
staticが付いているものとそうでないものを使用方法のサンプルとして記述

Separates static and member method→as sample for use these.

staticはメインメソッドから直接呼べる

メンバメソッドはインスタンスを作ってからでないと呼べない。

 

フィールドとか、クラスなど、実際にはどの様に使うの?
って部分をソースの方に記載しています。
※わかりずらかったらゴメンなさい

private static void gameLoop() throws IOException{
   // mainメソッドと同様にクラスをnewする必要あり
   game = new RpgMain(); // コンストラクタで入力部品を生成
   /*
    *  <ゲームループ>
    *  1.入力
    *  2.データ更新、
    *  3.レンダリング(今回はコマンドなので文字出力)   
    *  4.「bye」コマンドでゲームを終了する
    */
    while(true) {
        String command = game.listenInput();
        // command変数がnullになる可能性があるため定数.equals()の形にする
        if(TERMINATE_GAME.equals(command)) {
             break;
        }
    System.out.println("コマンド入力値: " + command);
    }
}

ゲームを起動して、入力→「コマンド:入力値」を表示する
というシンプルなゲーム?です。
「bye」と入力するとゲーム終了となります。
ここで、コンストラクタを開設いたします。
コンストラクタ→newした時に起動する処理を定義する
メソッドの時と同じ様に引数を与えることができる。

詳細はおいおい理解していきましょう。

今回使用しているのは、
フィールド→staticのものとメンバフィールドがあります。
メソッド   →フィールドに同じ、newしてから使用するのが「メンバ」
メインメソッドから呼ばれているのがstaticです。

ソースに細かいコメントなどをつけております。
参考になればと思います。

カスタムするなら

上記のソース赤字の部分を修正してどの様に入力を受けて何を表示するか?

を自分で考えて作成するのも1つの方法です。

ちなみに、簡単なコンソールゲームを作って見ました。
余計な音が入っています。




プラスαの一覧

JavaDoc

    1. Java Doc 読解〜System.out〜
    2. JavaDoc 読解 〜 Filesクラス 〜
    3. Java Doc読解 BufferedReader
    4. Java Doc 読解〜BufferedWriter〜
    5. Java Doc 読解 List 〜JavaDocList その1〜
    6.  Java Doc 読解 Map

Java Discord

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

JavaFX

  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〜

JUnit関連

  1. Java Basic JUnit 〜テストスイートの作り方〜

Git

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

Java Git clone in Eclipse 〜サンプルの取得〜

イントロダクション

サンプルコードを取得する手順を記載しました。リポジトリクローン方法です。

Gitクローンした後にMavenビルドをかけて開発環境を整えます。

Introduction

How to get sample code from Git, and after clone, execute Maven Build to make develop environment in your pc.

Gitからのクローン手順(Eclipseを使用する場合)

How to clone from Eclipse to Git.

色々と試しましたが、Gitから直接ダウンロードするjのが一番
ということになりました。

I had tried to some way to get source from git. And I think best way is using "git clone" in eclipse...

なのでEclipseからチェックアウト(Pull)してきます。
Eclipseのプロジェクトパースペクティブから右クリック

Git->Project from Git(からインポート)

Gitページを開きま緑色の部分をクリックするとURLを取得できます。


GitのURLをコピペします。

あとは、次へ(next)をクリックしていきPullします。

下はPullした結果です。ここからソース見たり、動かしたりします。

起動するときは、以下の様にMaven buildで起動できます。

JavaFXでハローワールド〜

  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〜

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 4Boolean
  5. Java Basic Level 5If 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 9Training 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 〜テストスイートの作り方〜

Eclipse セットアップ

  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 インターフェース 〜Step2_3 〜

インターフェース・クラス、
ポリモーフィズムについて学習していきます。
ポリモーフィズムは、日本語で「多様性」と言う意味です。
よく聞く「デザインパターン」と言うのはこのポリモーフィズムを応用した設計手法のことです。

余談

JavaAPIの中にはすでに実装されています。
Listインターフェース・クラスにある。iterate()はイテレートパターンと言うデザインパターンの実装になります。

インターフェース・クラス

インターフェース・クラスは前回使用したListインターフェースがこれにあたります。

List<String> list = new ArrayList<String>();

List<String> list = new LinkedList<String>();

上のように、別クラスを同じ型(クラス)変数として使用することができます。

これがまずは、基本的な考え方になります。

自作のインターフェースを使う

似たような形で、インターフェースを使ってみます。
概要としては以下のようなクラスを用意します。

  1. TestIF(インターフェース)
  2. TestCls1(インターフェースの実装クラス)
  3. TestCls2(インターフェースの実装クラス)

これを、変数testに格納して起動してみます。コードは下のようなものです。

public static void main(String[] args) {
    // インターフェースクラスを宣言する
    TestIF test1 = new TestCls1();
    test1.hello();
    TestIF test2 = new TestCls2();
    test2.hello();
}

作成するクラスなどは、Githubにアップしてあるのでそちらを参照ください。ルートになるフォルダはこちらになります。

インターフェースの書き方

public interface インターフェース名 {
   /** 抽象メソッドの定義 */
   // implementsするクラスで処理内容を記述
   public abstract void execute();
      // 上のメソッドと同じ(メソッド名は違う)
   public void setName();
}

クラスへの実装(implements)方法

public class クラス名 implements インターフェース {
   // クラスの記述
   // 上記の抽象メソッドを実装する
     @Orverride
   public 抽象メソッド() {
      //処理
     }
}

インターフェースを使用した。ポリモーフィズム
サンプルコードには上記の実装方法を使用しています。
実際の使用の仕方はサンプルを見てください。

インターフェースを実装したクラスは、そのインターフェース型の
変数として使用することができます。
つまり、同じ名前のメソッドを呼び出した時に違う処理を
実行することがでいます。
下の「action()」の実行結果が以下になります。
listにはPlayer型のクラスが設定されています。
処理詳細は、サンプルコードをご覧ください。

次回、これだけではわかりづらいかもしれないので
他もパターンも記載いたします。

Java Basic API Listの使い方 〜Step2_2〜

Listと配列の違い

よく世間では「リスト」と言う言葉を使用します。「〜のリスト作っておいて!」などといったりします。

まずは実装してみたので、こんな感じかな?と言うのをみてもらうのが早いと思います。

このリストはJavaでのプログラムでも存在していて完全クラス名はjava.util.Listです。
クラスと言いましたが、これは「インターフェース・クラス」実態のないクラスです。これは実態のあるクラスを格納できる変数だと思ってもらえれば、ある程度はわかりやすいと思います。

List<String> list1 = new ArrayList<String>();

他にも下のような実装もできます。

List<String> list1 = new LinkedList<String>();

JavaDocにある既知の全ての実装クラスと言う部分に記載のあるクラスは同じように扱うことができます。

【配列の扱いあれこれ】

配列を使用して様々なデータを検証、編集など
色々な処理を行いますが何かと不便なこともあります。
String[] args = new String[5];
の様に初期化した場合→test01();

サンプルソースのダウンロードができます。

この場合は、配列の数が決まるので困る時があります。
例:標準入力を受けるとき
byte[] b = new byte[5];
System.in.read(b);

上記の場合は、5文字までを受け取ることができます。
少なかったり多かったりすると上手くないのです。。。
なので前回はBufferedReaderを使用してそこを解消しました。

そこで、初めの配列(byte[] b)をString[], int[]などに変更した場合
かつ標準入力出ない場合はどうしたら良いでしょうか?

【Listクラスを使用する】

ここで、Listが出てきます。完全修飾名(完全クラス名)は
「java.util.List」クラスです。正しくはインターフェースクラスになります。
このインターフェースは以下のクラスに実装されています。
他にもあるけれど、使用頻度の高いものを記載します。

java.util.ArrayListクラス(完全修飾名)
java.util.LinckedListクラス(完全修飾名)
java.util.Vectorクラス(完全修飾名)

これらのクラスにはclass名の後に「implements java.util.List」
が記載されています。

これが「実装する」という意味です。
// インターフェースの定義
public interface List { ....}の様に記載します。
実際のjava.util.Listインターフェースの内容は
Eclipseを使用しているならListの文字の上で「F3」を押下すると
ソースを見ることができます。
実際のインターフェース定義は以下になります。

public interface List<E> extends Collection<E> {
    // Query Operations

インターフェース定義でも「extends」とありますが
とりあえず置いておきます。

ではインターフェースって何?となると思います。
インターフェースはクラスに実装(implements)することにより
インターフェースで複数のクラスを一つの変数で扱えます。

例として、ListはArrayListとLickedListをListの変数で使用できます。
List<String> list = new ArrayList<String>();
// OK牧場(笑)
List<String> list1 = new LinkedList<String>();
の様に別のクラスでも同じ変数で使用することができます。
【追伸】
List<変数の型>の「変数の型」の部分は、ジェネリクスと言います。
コードが長くなってくるとこのリストの中身はなんだった?
とわからなくなってしまいます。それを解消したのがこの
「ジェネリクス」です。
その他Map, Set, Vectorなどで使用します。

でわでわ

LWJGL 開発環境セットアップ〜Maven使用〜

初めは、Eclipseで開発環境セットアップしましたが色々と問題があり。。。
今回は、GitよりダウンロードしたLWJGLのチュートリアルPDFを参考にして
「IntelliJ IDEA」を使用することにしました。
※Eclipseの場合はEclipse Meven 開発手順〜プロジェクトの作成〜
Eclipseで実行する場合、Eclipseのdumpできるリミットを解除したり
色々と面倒、調査が必要なのでIDEを変更することにしました。

ダウンロードはこちらのサイトから行いました。
ダウンロード後は、以下の様な画面を見ることになると思います。
インストールが終わってから起動すると。。。

上記の様な画面のフローがありますが、よく見ると
左下に「Default〜」というボタンがあります。
こいつをクリックすると一発で終わります。
そして、起動すると下の様な画面が出ます。

ここからプロジェクトを作成していくのですが今回は
サンプルを使用しようと思います。なので
IntelliJをCreate New Projectで起動します。

Mabenプロジェクトを作成して初めにPOMファイルが
表示されていました。


これを右のサイトのPOMファイルの中身に書き換えます。

書き換えたら以下の様な表示が出てきました。

「Down load ...」と表示されています。記載したライブラリなど
をダウンロードしている様です。
Eclipseの時は「Maven Install」を行わないと起動しませんでした。
時代は変わるもんですねぇ。。。
そして、ダウンロードが終わったらエラーがないか確認します。
案の定エラーが出ていました。

<dependency>
    <groupId>org.eclipse.swt</groupId>
    <artifactId>org.eclipse.swt.win32.win32.x86</artifactId>
    <version>${swt.version}</version>
</dependency>

上記の様な記載があるのですが、自分の端末は64ビットなので
使用できないものになります。
まぁ面倒臭いので全部削除します。(笑)
XMLファイルの対象部分を削除します。

<profile>
    <id>linux-amd64</id>
    <activation>
        <os>
            <family>Linux</family>
            <arch>amd64</arch>
        </os>
    </activation>
    <dependencies>
        <dependency>
            <groupId>org.eclipse.swt</groupId>
            <artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId>
            <version>${swt.version}</version>
        </dependency>
    </dependencies>
</profile>

削除する部分を<profile>~</profile>の範囲ごと削除する。

追伸:「インポートしてください」と出る場合があります。

これでとりあえずはこのままビルドをかけてください

プロジェクトを右クリックして「Maven」→「Download Source」でソースを
そのほか欲しいものをダウンロードしてください。
この手順でセットアップ完了のはずです。→だめでした。原因はversion指定している部分で「${project.class}」の様な記述があるのですが、これはプロパティを参照する時に使用する文字列ではあるのですが、ここの参照先が不明のためエラーになります。

なので、Gitから直接クローンを作る方法に変更しようと思います。

 

関連ページ一覧

Eclipse セットアップ

  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の使用)〜

Java Basic クラスとは〜Step2_1〜

イントロダクション

Javaでの文法をちょっとやると「クラス」という言葉が出てきます。「インスタンス」とか、「オブジェクト」なんて言葉も一緒に出てきます。

クラスとは

今までに、書いてきた、プログラム(クラス)は下のようにmainメソッドだけでした。

public class AAA {
   public static void main(String[] args) {
   }
 }

なので、クラスをクラスとして使用していませんでした。

具体的にはクラスには以下の要素があり、それぞれの機能を持たせることができます。

1:フィールド変数
2:メソッド

これらを使用して現実にある様々なものを表現できます。

例えば人間を表現してみます。※ほんのさわり部分のみです

public class Human {
   /** 年齢 */
   private int age;
   /** 性別 */
   private int sex;
   /** 挨拶する */
   public void greet() {
       System.out.println("Hello!");
   }
}

人間にはその人の年齢があり、性別他にもたくさんありますが、それぞれ「人間」と言う生き物に共通する要素があります。
それを「フィールド変数」として定義してやります。
そして、取りうる行動を「メソッド」として表現することができます。

例えば自転車ならば。。。

public class Bicycle {
    /** ハンドルのサイズ */
    private double handleSize;
    /** 車輪のサイズ */
    private double wheelSize;
    /** スピード */
    private double speed;
    /** 停止しているフラグ */
    private boolean isStop;
    /** 自転車をこぐ */
    public double start(int power) {
       speed = power * wheelSize;
       isStop = false;
    }
    /** 自転車の動き */
    public void bicybleState() {
        // 何かしらの処理。。。
    }
}

とまぁキリがなくなってきたので、ここら辺で自転車の実装を終わりにしますが、つまるところは。。。

「リアルにあるもの」を「クラス」として表現できる

と言うところがクラスの存在意義です。
そして、クラスがオブジェクト指向の考え方の基本になります。
そして、実行してみました。コードはこちらにあります

インスタンスとは

クラス(ファイルに記述したもの)の「コンストラクタ」の処理を通った後に出来る、オブジェクト。

<例>

ホームページにログインするとインスタンスが1個作られます。→ログイン処理でユーザーをあらわすクラスのコンストラクタでDBから取得した情報を保持します。この保持するためのオブジェクトの事をインスタンスと呼びます。

オブジェクトとは

構造体、クラスの事。データをセットしたり、ゲットしたり、何かの処理を行ったりします。構造体はクラスと同じ様な意味です。細かい所は混乱するので省きます。

オブジェクトはインスタンス化出来る。→コンストラクタを通らなければオブジェクトで、通ればインスタンス。

<サンプルコード>

public class MyCls {
   //コンストラクタ
   public MyCls() {
   this.age = 3;
   }

   //フィールド変数
   private String name;
   private int age;
   //メソッド
   public void setName(String name) {
  this.name = name;
   }
}

カプセル化とは

上記の様にフィールドへのアクセス(name)にはクラスの外からアクセス出来なくする事MyCls.name = “”;はエラーになる。

ちなみにフィールドをpublic String name;と書くと外部からアクセス出来る。MyCls.name = “”;はエラーにならない

クラスの構成のコメントをつけております。

サンプルはこちら

/** 外部の提供されているクラスをインポートする */
package jp.zenryoku.sample.cls;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
* javaAPIの使い方
* @author takunoji
*/
// クラス定義
public class Step2_1 {
// フィールド変数:クラスの全てのメソッドからアクセスできる
private String FIELD_HENSU="クラスの外からはアクセスできません。";
public String FIELD_HENSU2="クラスの外からはアクセスできます。";

// メインメソッド(必ずこの書き方になる)
public static void main(String[] args) {
    Step2_1 step = new Step2_1();
    // 入力を受け取り切らない場合は次のStreamに読み込まれる
    //123456step.arrayTest1();
    step.arrayTest2();
}
// 自作のメソッド(メンバメソッドともいう)
public void arrayTest1() {
   System.out.println("test1 入力開始");
   // バイト型の配列をサイズ5で作成する
   byte[] moji = new byte[5];
 // エラーハンドル用のくくり
   try {
    // 標準入力から入力を受け取る
         System.in.read(moji);
   } catch(Exception e) {
         e.printStackTrace();
   }
 // 入力は「バイト型」のデータなのでString型(参照型)を生成する
   System.out.println("入力じた文字:" + new String(moji));
}

public void arrayTest2() {
    System.out.println("test2 入力開始");
    // 読み込み用のクラスを宣言する
    BufferedReader read;
  // InputSreamReaderからBufferedReaderを作成する
  // System.in→標準入力、読み込むために上のクラスでラッップ(包む)して
  // 使用する。ラップとは System.inをInputSreamReaderで包む(拡張)する
  // ことを言います。
    read = new BufferedReader(new InputStreamReader(System.in));
    String line = "";
    try {
     // BufferedReader.readLineメソッドで1行読む。
     // Fileなどを読み込む時にも使用する
           line = read.readLine();
    }catch(IOException e) {
            e.printStackTrace();
    }
         System.out.println("入力じた文字:" + line);
    }
}

「public class クラス名」全ての人がアクセスできるクラスですよ、と定義する
「private class クラス名」クラスの中からのみアクセスできるクラスと定義する

「public 返却値 メソッド名」クラスの外からもアクセスできるメソッド
「private 返却値 メソッド名」クラスの中からのみアクセスできるメソッド

フィールド変数に関して、今回は使用していません。

Systemクラスについて
標準入力、出力、Javaの強制終了などJavaシステムの
基盤的なアプリケーションの機能を実装している。

クラス 変数名 = new クラス名();という書き方では
メソッドを使用できません。→その様に実装しているからです。

このクラスにあるメソッドはスタティックメソッドと呼ばれます。
public static out; // フィールド変数です。
プログラム上では「System.out.println();」と使用してます。
Systemクラスのフィールドout(PrintSream)のメソッド
「println()」メソッドを使用して標準出力に文字を表示しています。
逆に、「in」は標準入力です。

スタティックメソッドはクラスをnewしないで直接
クラス名.メソッド名の形で呼び出します。


LWJGL Core dump〜エラーが出た時の対処〜

以下の様なエラーログが出た時
「A fatal error has been detected by the Java Runtime Environment:」
ulimit -c unlimitedのコマンドを打ってみてとエラーメッセージがあるので
Eclipseを起動する時にコマンドから実行する

【terminalより】
1. ulimit -c unlimitedを実行する
2. eclipseをコマンドより実行

これで改めて実行すれば実行できる

ただし、自分は他のエラーが出力された。。。