初心者のJavaプログラミング

プログラミングガチ初心者がIT業界を目指して頑張ります。

【第17回】初心者のJavaプログラミング【インスタンス変数•メソッド,静的変数•メソッド】

こんにちは。
なんで渋谷にいるティッシュ配りの人って、上から目線でティッシュ渡してくるんでしょうね。ティッシュ渡してやってんだから受け取れよくらいの勢いで渡してきますよね。

さて、今日はインスタンス変数とインスタンスメソッド、静的変数、静的メソッドについててです。

インスタンス変数、メソッド

インスタンスメソッドですが、既存のクラス、例えばStringクラスにあるインスタンスメソッドとかの使い方と同じです。クラスから生成したオブジェクトが使えるメソッドのことをインスタンスメソッドと言います。

クラスから生成されたオブジェクトには、そのクラスで定義されたインスタンス変数のコピーが含まれています。実際にクラスの方で具体的な値が決められていればその値をオブジェクトも持つことになります。
クラス定義の段階で具体的な値を決めていなければ、デフォルトの値で初期化されます。

  • boolean型変数はfalse
  • intやdouble等数値型の変数は0
  • 参照型変数(配列変数やオブジェクト変数等)はnull

というようになっています。

言葉で説明してもイミフだと思うので、
まず具体例から。

class Circle {
	// インスタンス変数を宣言
	double x;  //< 中心のx座標
	double y;  //< 中心のy座標
	double r;  //< 半径
	// コンストラクタ
	Circle (double x, double y, double r) {
		this.x = x;
		this.y = y;
		this.r = r;
	}
}

class CircleTest {
	public static void main( String args[] ) {
		Circle c = new Circle(5, 6, 10);
		// 表示
		System.out.println(c.x);
		System.out.println(c.y);
		System.out.println(c.r);
	}
}

ターミナルには
5
6
10
と表示されると思います。
これは前回前々回説明した通りです。

ここで、中心座標を動かす(中心座標の位置を変更する)機能が欲しいなーと思ったとします。
機能といったらメソッドなので、メソッドを作ってみましょう。

メソッドの作り方は、

戻り値の型 メソッド名(引数) {
  処理したい内容
}

というように作ります。

では、中心座標を変更するメソッドを作ってみます。

// インスタンスメソッド
void changePoint(double x, double y) {
	this.x = x;
	this.y = y;
}

こんな感じでしょうか。絶望的にメソッド名のセンスがありませんが、そこは気にせずw
これが、メソッドの内容を書いた側ですね。

実際にこのメソッドを呼び出すのはこんな形になります。

// changePointメソッドを呼び出す
c.changePoint(3, 3);

この一文を日本語になおしてみましょう。
昨日結構やりましたねw

「cインスタンスさん、changePointメソッドを実行して下さい。情報として変更後のx座標とy座標をあげます。」

という意味です。だいたいですw

そんでメソッドが走り、cインスタンスの状態である中心座標は(5, 6)から(3, 3)に変更されます。
半径の大きさは変更してないので生成時と変わらず10のままです。

半径も変える機能あったら便利だなーって思ったら作ればいいのです。

void changeRadius(double r) {
  this.r = r;
}

こんな感じですかね。


ちなみに今更ですが引数の変数名は何でもいいです。
今は半径の値を変えるし分かりやすいからrにしているだけです。
例えばこんな感じでもいいです。

void changeRadius(double batman) {
  this.r = batman;
}

でもやっぱりインスタンス変数の値を変更したいようなときだったら、分かりやす変数名がいいと思います。

インスタンス変数、インスタンスメソッドはこのくらいですね。

静的変数、静的メソッド

静的変数はインスタンス変数と違い、クラスそのものに結びついている変数です。
つまり、そのクラスから出来た全てのオブジェクトに共有されます。

メソッドの使い方はこんな感じでクラス名のあとにドット、そして静的メソッドというようになります。

Integer.valueOf();
と同じ感覚です。

そしてインスタンス変数とインスタンスメソッドとの一番の違いは、
先頭に
static
という修飾子を付けるということです。

static double menseki;
static void changePoint() {
}

こんな感じですね。

だいたい使い方は同じなので具体的なコードは省略します。


今日は以上です。
毎回2000文字くらい書いてるな、文字書くのなんて苦手中の苦手だったのに。
かわるもんですな。
だんだん書くスピードを早くしていきたいですね。

次回はメソッドオーバーロードについて書く予定です。

ではでは。