1
2

More than 3 years have passed since last update.

初心者から始めるJava、インスタンス

Posted at

はじめに

この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
間違えたものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

環境

言語:Java11、JDK13.0.2
動作環境:Windows10

インスタンス

以前、オブジェクトとインスタンスを混同して話していたように記憶しているが、改めて触れてみたい。
まずはいつもの通りCatクラスを用意する。

Cat.java
class Cat
{
  public static int sumCats = 0;

  private int age;
  private double weight;

  public Cat()
  {
    age = 0;
    weight = 0.0;
    sumCats++;
    System.out.println("新しい猫ちゃんがやってきましたよ!");
  }

  public void setCat(int a,double w)
  {
    age = a;
    weight = w;

    System.out.println("この猫、年齢は" + age + "歳、体重は" + weight + "kgです。");
  }

  public static void showSumCats()
  {
    System.out.println("今は全部で" + sumCats + "匹の猫がいます。");
  }
}

このCatクラスを使って2匹の猫を用意した場合を考える。

2匹の猫は、同じCatクラス由来である別々のオブジェクトである。
・2匹の猫は、それぞれのage,weightフィールドを有している。

以上のとき、2匹の猫はそれぞれのオブジェクトに関連付けられたフィールドであるインスタンス変数(instance variable)と、オブジェクトに関連付けられたメソッドであるインスタンスメソッド(instance method)を有する。
これらインスタンスな変数とメソッドは「オブジェクトが生成(new)されてからアクセス可能になる」。

今まで持っていた誤解
・オブジェクト≒インスタンス

 ⇒オブジェクト毎のフィールド・メソッド = インスタンス変数・メソッド new!!

クラス変数・クラスメソッド

しかし、オブジェクトが生成されるより前に扱いたいメンバ(フィールド・メソッド)もある。そのために、クラスそのものと関連付けがなされたメンバをstaticで宣言して使うことが出来る。

public static void showSumCats()は、
public static int sumCats = 0;と宣言されたクラス変数sumCatsを参照し、newするたびにコンストラクタCat()が呼び出され、自動でインクリメントされるようになっている。これにより、「何回Catオブジェクトを生成したか」と「猫の総数」をリンクさせている。
showSumCats()は、staticであるため、「一度もCatオブジェクトを生成していな」くても呼び出すことが出来るメソッドである。よって「猫0匹」を示すこともできる。

this.ってなんだろう

インスタンスメソッド内でのみthis.agethis.weightと書いて、オブジェクトに関連付けられたフィールド値のみを示すように書くことが出来る。
ローカル変数の話は割愛。

終わりに

これからmain関数内で扱おうとしている変数・メソッドがクラス関連かオブジェクト関連か、staticで判別してよく理解していないと、ここを突かれる問題はかなり多い。

参考

出来るだけ自分で変数や式を書いてコンパイルしているので、完全に引用する場合はその旨記述する。

やさしいJava 第7版
Java SE11 Silver 問題集(通称黒本)

1
2
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
2