woshidan's blog

そんなことよりコードにダイブ。

Javaの用語について確認する

某社の筆記試験で大変なさけない感じになったこと、

インターン先や週末のAndroidアプリ講座でコードがよく分からないことになってきたので、Javaの絵本を買って来て読むことにしたらものすごく分かりやすかったのでまとめて把握したところまでまとめて音声ファイルの再生の部分のテキストを読むことにします。

というか、ひまわりを除いて一番はじめにコンソールでカタカタやったのはJavaなのだが、基本情報に必要な制御構文しか結局やらずに逃げてしまったなぁ。

 

Javaの絵本 増補改訂版

Javaの絵本 増補改訂版

 

 

クラスとフィールドとメソッド

Javaではクラスという単位でプログラムを書く。

クラスには基本的にそのクラスの中で用いる変数にあたるフィールドと、

関数や処理にあたるメソッドがあり、

クラスの中にあるフィールドやメソッドのことをそのクラスのメンバという。

 

クラスとオブジェクト

クラスは変数に対する型のようなもの(書き方も似てますね)で、

クラスに入っているフィールドでデータを管理したり、メソッドで処理を行ったりするためには、

型にあたるクラスの、クラスの持つフィールドの値を格納する変数にあたるオブジェクトを作る必要がある。

この、クラスからオブジェクトを生成することをインスタンス化という。

 

フィールドの参照と代入

クラスの中に含まれるフィールドは、フィールド名をそのまま記述すれば参照できる。

異なるオブジェクトのフィールドを参照したり、代入したりするには、「オブジェクト名.フィールド名」の形で記述する。

 

class X {

 int a;

}

 

class c1 {

    X A = new X ();

    A.a = 3;

}

 

class c2 {

    X B = new X ();

    B = A.a + 2;// B = 5;

}

 

メソッドも同じようにクラス内のメソッドは名前だけで、ほかのオブジェクトの場合はオブジェクト名.メソッド名で呼び出すことができる。

 

どうでもいい話、メソッドについて、戻り値はphpjavaScriptの関数だと宣言しないので、ああ、Javaだ! ってなりました。いまはコメントに返り値書いてるくらいなので、言語のほうで宣言するようにしてもらったほうが個人的に楽でいいです。

 

修飾子について

main()メソッドから同じオブジェクトのメソッドを呼び出す場合、そのメソッドにはstaticをつける。

循環参照みたいになるのを防ぐため、でしょうか……?

あとは、このクラスのオブジェクトには絶対このメソッドが必要でメソッドをオーバーライドされたら困る場合などに、staticをつける。

また、staticをつけたメンバはオブジェクトを生成しなくても利用できる。

finalはフィールドやクラスの宣言のときにつける。フィールドにつけると、フィールドは値が変更できなくなる。classは継承ができなくなる。

 

コンストラクタ

クラス内にクラス名と同じ名前のメソッドを書いておくと、そのクラスのオブジェクトが生成されたときに自動的にそのメソッドが実行される。そのメソッドをコンストラクタという。生成したときにあらかじめ値を設定しておきたいフィールドなどがあったらそのフィールドの初期化などに使える。

引数のあるコンストラクタを作った場合、オブジェクトの生成のときは、

クラス名 オブジェクト名 = new クラス名(引数);

となる。

 

とりあえず、敬称のときにextendsと書くとか、インタフェース云々の話も(数年ぶり何度目?に)へええと思って読んでいたけど、長くなってきたのでここまで。

 

余談

phpで引数異なる場合に処理を変えたいんだけど、結局できなかったから処理の名前のパラメータも一緒に渡して処理名で場合分けして関数呼び分ける、みたいなダメ実装をしていたので、オーバーロードのページ見てたらjavaっていいな、と思いました。

あと、javaScriptについてもちょっとすっきりしました……。