Report#5

プログラム


class aabb{
public static void main(String args[]){
hensuu hen_obj=new hensuu();
stati st_obj1=new stati();
stati st_obj2=new stati();
consto co_obj1=new consto();
consto co_obj2=new consto(100);
over ov_obj=new over();
seigen sei_obj=new seigen();

hen_obj.Demo();
st_obj1.add(20);
st_obj2.add(100);
co_obj1.add(30);
co_obj2.add(30);
System.out.println("st_obj1 = " + st_obj1.tota);
System.out.println("st_obj2 = " + st_obj2.tota);
System.out.println("co_obj1 = " + co_obj1.total);
System.out.println("co_obj2 = " + co_obj2.total);
ov_obj.Demo();
ov_obj.Demo(10);
sei_obj.Demo();
System.out.println("sei_obj = " + sei_obj.a);
// System.out.println("sei_obj = " + sei_obj.rate);
}
}
class hensuu{
int total;
void Demo() {
int i;
for (i=1;i < 10; i++)
total+=i;
System.out.println("hen_obj = " + total);
}
}
class stati{
static int tota;
void add(int x) {
tota += x;
}
}
class consto{
int total;
static { // static イニシャライズ
System.out.println("initialize");
}
consto() { // コンストラクタ(クラス名と同名)
total = 0; // 0 クリア
}
consto(int x){
total = x;
}
void add(int x) {
total += x;
}
}
class over{
void Demo() { // メソッド Disp 引数なし
System.out.println("Demo =Nothing");
}
void Demo(int x) { // メソッド Disp 引数 x
System.out.println("Demo ="+ x);
}
}
class seigen{
static int a;
private int rate; // private変数rateの宣言
void Demo() {
a=200;
rate=20;
System.out.println("rate ="+ rate);
}
}


実行結果
initialize
hen_obj = 45
st_obj1 = 120
st_obj2 = 120
co_obj1 = 30
co_obj2 = 130
Demo =Nothing
Demo =10
rate =20
sei_obj = 200


考察


ローカル変数とクラス変数
ローカル変数 = メソッド内部で宣言した変数
クラス変数 = メソッドの外部で宣言した変数

static変数
同一クラスのオブジェクトを複数作成した場合、それぞれのオブジェクトで参照する変数の値は異なるが、
変数を宣言する時にstaticを宣言しておくと変数を共有できるようになる

コンストラクタ
クラス名と同じ名前のメソッドをコンストラクタという。
プログラム中ではnewで宣言した時に引数を入れる事で初期化している。

staticイニシャライズ
staticイニシャライズは、クラスが呼ばれた(ロードされた)ときに自動的に実行される
これは実行結果でinitializeが先頭に来ていることでわかる。

メソッドのオーバーロード
メソッドのオーバーロードとは、クラス内に同じ名前のメソッドを定義すること
ただし、引数の数や型が異なってなければならない。
プログラムの中では引数がない場合と1つの場合がある。

アクセス制御
変数を宣言するときの修飾子の中には、アクセス制御するものがある
public:全てのオブジェクトの全てのメソッドからアクセス可能
private:定義されたクラス内のメソッドからだけアクセス可能
protected:定義されたクラス内のメソッド、そのクラスから派生したサブクラス、同一パッケージ内のクラスからアクセス可能
プログラム中の
// System.out.println("sei_obj = " + sei_obj.rate);
は rate が private で宣言されているので実行できない。

感想


今回はコンストラクタやオーバーロードなど新しいものが出てきて大変でした。
この先、さらに難しくなりそうなので頑張りたいです。