1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お品書き
  • staticって?
  • static変数、staticメソッド
  • 使いどころは?

◆staticって?

staticを使わないパターン。
カウンター変数を設定し入力された人数は?

まずはひとつみてみよう。

java
class Student4{
  String name;
  int counter = 0;

  Student4(String n){
    name = n;
    counter++;
    System.out.println(name + "さんをインスタンス化しました");
  }
  void display(){
    System.out.println(counter + "人です");
  }
}

java
class StuSample4{
  public static void main(String[] args){
    Student4 stu1 = new Student4("大輔");
    stu1.display();

    Student4 stu2 = new Student4("湊丞");
    stu2.display();
  }
}

cmd
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メソッドのcounterdisplayをつかいたいときは
Student.counterStudent.displayと記述する。

◆使いどころは?

●全部のインスタンスから共通して使う変数やメソッドを作りたいとき。

●クラスの関連する便利なメソッドをまとめたいというようなとき

例えば、Integer.parseInt()という処理文があったが、Integerとは「整数」という意味なんだけど、Integerクラスというもともと提供されているものがあって、そのなかに、parseIntメソッドなど整数に関するint型に関するメソッドがまとめられている。
それをクラス名.Integer.parseIntと呼び出して使っていた。
なので、クラスの情報をオブジェクトを作らずに呼び出したい、そんなメソッドをまとめたいというときに良くstaticメソッドが使われる。

◆static Sample

java
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 + "人です");
  }
}

java
class StuSample4{
  public static void main(String[] args){
    Student4.display();
    
    Student4 stu1 = new Student4("大輔");
    Student4.display();

    Student4 stu2 = new Student4("湊丞");
    Student4.display();
  }
}

cmd
C:\Java\1>java StuSample4
0人です
大輔さんをインスタンス化しました
1人です
湊丞さんをインスタンス化しました
2人です

C:\Java\1>

最初とは違い、ちゃんと人数がまとまりました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?