class Test { int total; static int stotal; // static変数 static {System.out.println("----------------実行--------------");}// staticイニシャライズ Test() { // コンストラクタ total = 0; stotal = 0; } Test(int x) { // コンストラクタ total = x; stotal = x; } void add(int x) { total += x; stotal += x; } } class keisan{ float sougou; private int i = 5; // private変数 int iを宣言 void keisan(int x){ sougou = x / i; } } class repo5 { public static void main(String args[]) { Test obj1 = new Test(); // オブジェクト生成 Test obj2 = new Test(100); // オブジェクト生成 keisan obj3 = new keisan(); // オブジェクト生成 obj1.add(50); obj1.add(60); obj2.add(80); obj2.add(90); obj2.add(100); int x = Test.stotal; obj3.keisan(x); System.out.println(" Math &Science = " + obj1.total); System.out.println("English &Japanese &Social = " + obj2.total); System.out.println(" All Subject = " +Test.stotal); System.out.println(" Average = " +obj3.sougou); } }
----------------実行-------------- Math &Science = 110 English &Japanese &Social = 370 All Subject = 480 Average = 96.0
・4行目static int stotal static変数又は静的変数と呼ばれるもので、変数が永続的に存在して前回の値を保持している変数である。 なのでstatic変数stotalは複数回呼びだれた場合には、前回の呼び出しが行れた時の値を保持する。 ・5行目static {System.out.println("----------------実行--------------");} staticイニシャライズと呼ばれるもので、クラスが呼ばれた(ロードされた)ときに自動的に実行される ここではclass repo5でclass Testのオブジェクトを生成した時に実行される。 ・6行〜13行 コンストラクタ class Testでは3つのメソッドがあるが、その中でTest()とTest(int x)のようにクラス名と同じ名前を持つメソッドをコンストラクタという。 コンストラクタはオブジェクトを生成する際に必ず実行される初期化処理を記載した部分です。 ・6行〜13行 オーバーロード 同じメソッド名でも、引数リストの異なるものは、別のものとして扱われます。 同じメソッド名で、引数リストの異なるメソッドを同時に定義することを、メソッドのオーバーロードと呼びます。 Test(int x)はint xに値を入れる事で、totalとstotalに値を入れる事が出来る。 ・15行〜17行 void add(int x) ここではtotal += x,stotal += xによってそれぞれに値xを足していくメソッドである。
・23行目 private変数 private変数とはclass内部からのアクセスしか許可せず、外部からの許可はいっさい許さない変数です。 つまりclass Testやclass repo5からはこの変数を呼び出す事が出来ません。 ・24行〜25行 keisanというメッソドで変数xをi(=5)で割った値をfloat型の変数sougouに代入しています。 変数xの値はclass repo5で決めています。
・31行〜33行 ここではオブジェクトの生成を行っています。 オブジェクトは、あるクラスに定義されたメソッドやフィールドを実際に扱うために作成されます。 クラスからオブジェクトを作成することをインスタンス化と呼び、オブジェクト固有のメモリ上のデータをインスタンスと呼びます。 オブジェクト生成の記述の仕方はクラス名 変数名; 変数名 = new クラス名();又は、次の様にも記述できます。クラス名 変数名 = new クラス名();まず、指定したクラス型の変数を定義しています。そして、この変数に、インスタンス化したオブジェクトへの参照が代入されます。 この参照を通して、オブジェクトは操作されます。 Test(100)はxに100が代入されているのでtotal,stotalに100が入ります。 ・34行〜38行 ここではclass Testのメッソドaddを呼び出しています。 ()内に値を入れる事でtotalとstotalに値が足されていきます。 ここで大事な事はobj1とobj2のtotalは別の物ですが、stotalはstatic変数なので一緒の物だということです。 ・39行〜40行 int xにstotalを代入しています。 そして、class keisanのメソッドvoid keisanを呼び出しています。 ・41行〜44行 それぞれの変数の値を出力しています。
メソッドは、クラスの要素の一つです。 メソッドには、そのクラスをインスタンス化して作ったオブジェクトの機能を記 述します。オブジェクトを使う方法ともいえます。具体的には、入力、処理、出 力(Input/Process/Output)を記述します。多くの場合は、当該オブジェクトの データであるフィールドに対する処理になります。メソッドの入力、出力はそれ ぞれ、メソッド引数と戻り値と呼ばれます。 メソッドは、次のような書式になります。[修飾子] 戻り値型 メソッド名([メソッド引数リスト]) { 処理内容 }戻り値のデータ型は、当該メソッドが終了したときに返すデータ型です。 メソッドの修飾子には以下の種類があります。
キーワード | 意味 |
public | 何処からでも呼び出すことができます。 |
protected | サブクラスか、同じパッケージからしか呼び出せません。 |
private | 同じクラスからしか呼び出せない(メッセージが届かない)メソッドです。 |
abstract | 抽象メソッドです。このメソッドを一つでも持つクラスは抽象クラスです。 メソッド名、引数、戻り値は定義されていますが、ブロック内の処理(実装)が行われていません。 |
static | 静的メソッドです。当該メソッドが定義されているクラスをインスタンス化しなくても、このメソッドは利用できます。インスタンスによらず同じ働きをするメソッドに用います。 |
final | オーバーライドできないメソッドです。継承によってこのメソッドの機能変更・拡張はできません。 |
synchronized | マルチスレッド時に同期を取るメソッドです。 スレッドに呼び出された時点でロックされる為、複数のプロセスによって実行されることが無くなります。 |
natibe | C/C++ 言語などのプラットフォーム依存のコードで作成された DLL などを実体とするメソッドです。 |
■反省・感想
今回のレポートは講義の中でなんとなく分かったのでスムーズに作る事が出来ました。 でも。プログラムを考えるのは結構大変でした。