Report#5


学籍番号:055704J
氏 名 :伊志嶺拓人


■プログラム

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

■考察

class Testについて

・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を足していくメソッドである。

class keisanについて

・23行目 private変数
 private変数とはclass内部からのアクセスしか許可せず、外部からの許可はいっさい許さない変数です。
 つまりclass Testやclass repo5からはこの変数を呼び出す事が出来ません。

・24行〜25行
 keisanというメッソドで変数xをi(=5)で割った値をfloat型の変数sougouに代入しています。
 変数xの値はclass repo5で決めています。

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 などを実体とするメソッドです。

■反省・感想

今回のレポートは講義の中でなんとなく分かったのでスムーズに作る事が出来ました。 でも。プログラムを考えるのは結構大変でした。
・参考文献・URL
:独習Java 第3版