トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

すっきりわかるJava入門を読む②(9章クラス機構・static)

 続き。今回は 9章。

bibinbaleo.hatenablog.com

正確ではないと思うので参考にしないでください

クラス型

コンピュータ内部で何が行われているか。メモリとかアドレスとかのお話

クラス型と配列型は「参照型」と呼ばれる。

変数のメモリにはそのものが入っているのではなく、それが入っている番地の情報だけ入っている。

 

クラス型はフィールドやメソッドの引数や戻り値にも使うことができる。

String

実はString型もクラス型。でも私は定義していないのになぜ使えるのか。

それはjavaAPIとして標準で準備してくれているクラスだから。

ここら辺の標準でついているAPIc#とかjavaでは違うのかな

またnewでインスタンスを作らなくていいのはstringの特例。

String s ="Hello";

これでインスタンスを利用できる。

newでもできる。

String s = new String("");

System.out.println(s);

よく使うものが特例としてしれっと存在していると、わかりにくいなーと思った。

コンストラク

newしたときに、メソッド内部で定義しておいた定義が自動で行われる。

決まっている初期値を入れるなどに使う

Hero h = new Hero();

 

public class Hero{

   Hero(){

       this.hp = 100;

    }

}

 

赤いのがコンストラク

クラス名と同じ名前で、戻り値が記述されていないものがコンストラクタ。

戻り値は設定できないけど、引数は設定できる。

Hero h = new Hero("ビビンバ");

 

public class Hero{

   Hero(String name){

                    this.hp = 100;

                    this.name=name;

     }

}

仮引数が違ったら、同じ名前のメソッドを作れることを「オーバーロード」という。

コンストラクタもオーバーロードという。名無しを設定できる。

 

クラスに、コンストラクタが一つもなかったら、引数なし処理内容なしのコンストラクタが自動で追加される。

この本コンストラクタのことすごい詳しくやっているけど、Unityc#でも使うのかな?

staticフィールド

同じクラスから生成されたインスタンスで、フィールドを共有したいときは

static int money;

とする。

静的フィールドと呼ぶ

普通フィールドはそれぞれのインスタンスに生成されるけど、静的フィールドはクラスに対して一つだけ用意される。

呼び出すときはクラス名.フィールド名 (Hero.money)

クラスに作られたフィールドの分身をインスタンスに作ることもできる。

h1.money h2.money

h1.moneyに値を入力するとHero.moneyに入る

staticメソッド

static void setRandomMoney(){

}

・staticを付けたメソッドはインスタンスではなくクラスに属す

インスタンスにメソッドの分身が準備される

インスタンスを1つも生み出すことなく呼び出せる

mainメソッドがstaticなのはインスタンスが存在していない状態でmainは呼び出されるから

staticメソッド内のコードでは、staticがついていないフィールドやメソッドは利用できない。

最後に

前回より難しくなってきた。Unityであんまり意識しない部分だからかな

staticはよく見るけど。

シーン間で変数を参照するときは、おまじない的に元のスクリプト

public static int a=1;みたいにしていた。

このゲームで使っていますね

bibinbaleo.hatenablog.com

staticで格納した値はインスタンス(オブジェクト)単位ではなくゲーム全体で保持されるため、シーンが変わりオブジェクトが破棄された後でも保持され続けます

http://tsubakit1.hateblo.jp/entry/2015/11/07/024350

UnityとJavaだとクラスという単位が違う気がしますが、staticの雰囲気はわかりました。

 

ちゃんと第1部(javaの文法)も読まないと、理解が不十分なところがあるなと思った。メソッドについてとか

でも第2部を読んだから気づけたことでもある

無知の知を知れた?ので少しは成長している気がする。

スッキリわかるJava入門 第2版 (スッキリシリーズ)