12‐1
次のようなExer12_01というクラスを作成・コンパイルしなさい。
・int型のsnumというstaticフィールドをもつ。初期値は10とする。
・snumを出力するprintSnum()というstaticメソッドをもつ。
12‐2
次のような処理を行うExer12_02というクラスを作成・コンパイル・実行しなさい。
・上記Exer12_01のprintSnum()を呼び出す。
・上記Exer12_01のsnumに20を代入する。
・上記Exer12_01のprintSnum()を呼び出す。
12‐3
次のようなExer12_03というクラスを作成・コンパイルしなさい。
・int型のsnumというstaticフィールドをもつ。初期値は0とする。
・int型のinumという非staticフィールドをもつ。初期値は0とする。
・snumとinumをそれぞれ1だけ増加するimcrement()という非staticメソッドをもつ。
12‐4
次のような処理を行うExer12_04というクラスを作成・コンパイル・実行しなさい。また、なぜそのような出力の結果になったのか図を描いて説明しなさい。
・Exer12_03のインスタンスを3個生成し、3個の変数にそれぞれを代入する。
・各変数を使用して、各インスタンスのimcrement()メソッドを呼び出す。
・各変数を使用して、各インスタンスのinumフィールドを出力する。
・クラスExer12_03のsnumフィールドを出力する。
12‐5
次のクラスをコンパイル・実行するとどのように出力されますか?
------------------------------------------------------------------------
class Class01 {
static int snum = 0;
int inum = 0;
void increment(){
snum++;
inum++;
}
void print(){
System.out.println("snum = " + snum + ", inum = " + inum);
}
}
class Exer12_05 {
public static void main(String[] args){
Class01 c1 = new Class01();
Class01 c2 = new Class01();
Class01 c3 = new Class01();
c1.increment();
c2.increment();
c3.increment();
c1.print();
c2.print();
c3.print();
}
}
------------------------------------------------------------------------
12‐6
staticメソッドからは、自クラスの非staticフィールドを直接使ったり、非staticメソッドを直接呼び出すことはできません。その理由を答えなさい。また、それを確認するクラスの例を自分で作成しなさい。(コンパイルエラーとなるクラスを作成する。)
12‐7
次のクラスをコンパイルするとどうなりますか?
------------------------------------------------------------------------
class Exer12_07 {
String name = "Tanaka";
void print(){
System.out.println("OK!");
}
public static void main(String[] args){
System.out.println(name);
print();
}
}
------------------------------------------------------------------------
12‐8
12‐7のクラスのnameフィールドや、print()メソッドはインスタンスの中に確保されます。よって、staticメソッドからでも、インスタンスを生成すれば使用することができます。
12‐7のクラスを変更し、main()メソッドから自分のクラスのインスタンスを生成し、そのインスタンスのnameフィールドを出力し、print()メソッドを呼び出すように変更したExer12-08というクラスを作成しなさい。