お品書き
- staticって?
- static変数、staticメソッド
- 使いどころは?
◆staticって?
staticを使わないパターン。
カウンター変数を設定し入力された人数は?
まずはひとつみてみよう。
class Student4{
String name;
int counter = 0;
Student4(String n){
name = n;
counter++;
System.out.println(name + "さんをインスタンス化しました");
}
void display(){
System.out.println(counter + "人です");
}
}
class StuSample4{
public static void main(String[] args){
Student4 stu1 = new Student4("大輔");
stu1.display();
Student4 stu2 = new Student4("湊丞");
stu2.display();
}
}
C:\Java\1>java StuSample4
大輔さんをインスタンス化しました
1人です
湊丞さんをインスタンス化しました
1人です
C:\Java\1>
お分かりだろうか。。
staticキーワードを使っていないため、生成した変数領域にそれぞれメモリが作られ、それぞれ表示している。
なので、人数はバラバラで集計されません。
counterでインスタンスの個数を取っておきたいが、
0が1に変わる、また0が1に変わるという処理が続くだけなので、何個インスタンスを作っても1という値しか入らないという結果。
インスタンスの個数を取っておくには、このインスタンスの中では無理
じゃぁどうしよう。
インスタンスがみんな一緒に共通して使える変数があれば良いという話。
◆static変数、staticメソッド
staticのついた変数や、メソッドのこと
つけ方は変数の型の前、メソッドは戻り値の前。
全インスタンス変数が使えるメンバー変数やメソッドを定義するにはstaticを指定する。
オブジェクトを生成していなくても利用できる。
→クラス名.変数[メソッド]名と記述
インスタンスが持っている変数を使いたいときは
stu1.nameやstu2.name等と記述
インスタンスの外のstatic変数やstaticメソッドのcounter
やdisplay
をつかいたいときは
Student.counter
やStudent.display
と記述する。
◆使いどころは?
●全部のインスタンスから共通して使う変数やメソッドを作りたいとき。
●クラスの関連する便利なメソッドをまとめたいというようなとき
例えば、Integer.parseInt()
という処理文があったが、Integerとは「整数」という意味なんだけど、Integerクラスというもともと提供されているものがあって、そのなかに、parseIntメソッドなど整数に関するint型に関するメソッドがまとめられている。
それをクラス名.Integer.parseIntと呼び出して使っていた。
なので、クラスの情報をオブジェクトを作らずに呼び出したい、そんなメソッドをまとめたいというときに良くstaticメソッドが使われる。
◆static Sample
class Student4{
String name;
static int counter = 0;
Student4(String n){
name = n;
counter++;
System.out.println(name + "さんをインスタンス化しました");
}
static void display(){
System.out.println(counter + "人です");
}
}
class StuSample4{
public static void main(String[] args){
Student4.display();
Student4 stu1 = new Student4("大輔");
Student4.display();
Student4 stu2 = new Student4("湊丞");
Student4.display();
}
}
C:\Java\1>java StuSample4
0人です
大輔さんをインスタンス化しました
1人です
湊丞さんをインスタンス化しました
2人です
C:\Java\1>
最初とは違い、ちゃんと人数がまとまりました。