感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Java 仮引数と実引数の違い

<スポンサーリンク>

ことば

暗黙の決まりは、いつか必ず忘れる。たとえば、initという名前のメソッドが初期化を意味することはコードを見れば自明だと思うかもしれない。しかし、それは未来の誰かにとっては自明ではない。暗黙の規則は、言語機能やプログラミングの技法で強制すること。規則を強制出来れば、未来の誰かも必ず従うことになる。
パーフェクトJava (PERFECT SERIES) (PERFECT SERIES 2)

Javaで大切なことはすべてパーフェクトJavaから教わったといえるほどの名著。
この本無しにJavaを理解することはできなかった。本当に救われた。

パッケージとは

標準クラスのStringクラスを見てみる。
完全な名前はjava.lang.Stringである。

このうち、「java.lang」の部分がパッケージ名で、パッケージ名まで含めたクラスやインターフェースの呼び名を「完全修飾名(fully qualified name)」という。
パッケージ名を除いたStringの部分は「単純名」という。

名前空間とは、分割した各単位ごとに名前を独立して扱うこと。それによって、名前の再利用ができる。

Javaのパッケージ名はインターネットドメイン名(DNSドメイン名)を使用することが推奨されている。
インポートというのは、本来完全修飾名で書かなければいけない型名を単純名で書けるようにする仕組みのこと。

java.util.List<String> list = new java.util.ArrayList<String>();

と書くところを、

import java.util.List;
・・・
List<String> list = new ArrayList<String>();

のように書くことができる。
アスタリスクを使ったインポートは「オンデマンドインポート」という。
個別に型名を指定したインポートを「単一型インポート」という。

java.lang.*をインポートしなくてもStringクラスを使えるのは、java.langパッケージは特別なものだから。
何が特別かって?
java.langは暗黙にインポートされるんだ。
暗黙にってことは、何も書かなくてもインポートされてるってこと。

staticインポートって何?

staticインポートはパッケージ内のクラス、インターフェースのstaticメンバ名(クラスフィールド名とクラスメソッド名)をインポートする。
staticインポートを使うと、他のクラスのフィールドやメソッドを自分のクラス内のメンバのように使うことができる。

オーバーロードって何?

同じメソッド名で引数の型を変えること。

class MyClass {
	void do(String str) {
		//
	}
	//オーバーロード
	void do(StringBuilder s) {
		//
	}
}

メソッドは「メソッド名」「引数の型の並び」によって一意に区別される。

仮引数と実引数

メソッド定義のパラメータ変数のことを仮引数という。
呼び出し側でメソッドに渡すパラメータのことを実引数という。

要は、メソッドを使う側の引数を実引数。
渡されるものは仮引数という。

getHogeValue("fuga");

public String getHogeValue(String val) {
	if ("hoge".equals(val)) {
		//
	}
}

ここで超重要ポイントだが、仮引数に渡されるのは「コピー」だということだ。
intなどの基本型の場合は値のコピーが渡される。
オブジェクトの場合は、ポインタのコピーが渡される、と思えばいい。参照が渡される。

つまり、仮引数の値を変更しても、実引数に影響はない。
ただし、注意が必要なのが、「参照を渡される」というオブジェクトの場合は、そりゃあ見ているオブジェクトに変更を加えたら、仮引数を通してオブジェクトに変更を加えることは可能になるよ。
仮引数は、基本型の場合は値コピー。オブジェクトの場合は参照渡し、と覚えておけばいい。

staticメンバ

staticがついたフィールド変数、メソッド、初期化ブロックは、「クラスに属する」メンバのこと。
クラスメンバと呼ぶ。staticがつあないフィールド変数やメソッドをインスタンスメンバと呼ぶ。

クラスメソッドの中からインスタンスフィールドにアクセスしたり、インスタンスメソッドを呼び出すことはできない。
クラスメソッド内でthis変数は使えない。
staticを使いまくることはあまり望ましくない。
シングルトンを使うとか、ユーティリティクラスを使う時はstaticをよく使う。

読んだ本

パーフェクトJava (PERFECT SERIES) (PERFECT SERIES 2)

パーフェクトJava (PERFECT SERIES) (PERFECT SERIES 2)

  • 作者: アリエル・ネットワーク株式会社,井上誠一郎,永井雅人,松山智大
  • 出版社/メーカー: 技術評論社
  • 発売日: 2009/09/24
  • メディア: 大型本
  • 購入: 26人 クリック: 360回
  • この商品を含むブログ (35件) を見る

感謝のプログラミング

今回で感謝のプログラミングは【407時間目】
10000時間まで、あと【9593時間】