Java

【初心者向け】Javaのstaticメソッド・static変数について解説!

「Javaのstaticの意味がわからない。『静的』ってどういう意味? 誰かわかりやすく教えてほしい」

本記事はこのような疑問に答えます。

staticの意味をよく知らずに使っている方は多いのではないでしょうか。しかし、プログラミングの学習ではわからないことをそのままにしないのが重要です。しっかり意味を理解してから使わないと、のちのち学習に詰まることになってしまいます。

そこで本記事ではstaticメソッドについて初心者でもわかるように解説します。さらには、static変数についても合わせて説明しますね。
staticメソッドとstatic変数を使ったサンプルコードも解説するので、実際に手を動かしながら覚えてみましょう。

本記事を読むことでstaticに関することはひと通りわかるようになっています。ぜひこの機会にstaticの意味をしっかり理解できるようになってくださいね。

staticメソッドとは

まずはstaticメソッドとは何か?ということを解説します。どうしてstaticメソッドというものが存在するのか、基礎的なことまで掘り下げて説明しますね。

最初にstaticメソッドの概念について押さえておきましょう。

staticメソッドとは

次のように、メソッド名の前に「static」がついたものを見たことがあるでしょうか。

static void staticMethod(){
    //処理
}

このようにstaticがついているメソッドを「staticメソッド」と呼びます。一方、staticがつかないメソッドを「インスタンスメソッド」と呼びます。

staticメソッドには、インスタンスを生成しなくても呼び出せるという特徴があります。
通常、メソッドを呼び出すときは「new」を使ってインスタンスを生成した後に呼び出さないといけませんよね。

ところが、staticメソッドはメソッド名を指定するだけで呼び出すことが可能できるのです。つまり、staticメソッドはインスタンス化による影響を一切受けないメソッドということですね。

また、どのクラスから呼び出されても、staticメソッドの処理内容はまったく同じです。このように、staticメソッドはインスタンスを生成しなくても呼び出せる特別なメソッドなのです。ちなみに、mainメソッドには必ずstaticがついています。

public static void main(String[] args){
        //処理
}

mainメソッドはプログラムが実行されると最初に動く部分なので、インスタンス化を行うことができません。そのため、必ずstaticをつけておくのです。

staticメソッドを使用するメリット

staticメソッドを使用するメリットは、インスタンス化しなくても利用できるという点です。インスタンス化による影響を受けないので、クラス単体で何かを実行したい場合に便利ですね。

また、ほんの少しだけですが、インスタンスメソッドよりもstaticメソッドの方が処理速度が早いというメリットもあります。重い処理を走らせるときなど、staticメソッドを使った方が効率的な場合がありますね。

ただし、必要ないところでstaticメソッドを使用すると、他のプログラマーがソースを見た時に混乱を招く恐れがあります。

混乱を避けるため、どんな場合にstaticメソッドを使うかが社内でルールとして決められていることも多いです。

staticメソッドの使い方

ここからはstaticメソッドの具体的な使い方を解説します。
サンプルコードも交えて解説するので、実際に動かしながら学んでみてくださいね。

staticメソッドの基本的な使い方

staticメソッドは、宣言時に「static」をつけます。

class Test2{
    static void staticMethod(){
    }
}

このようにしてstaticをつけるだけで、staticメソッドとして扱われることになります。

staticメソッドを呼び出す場合は、次のように記述します。

public class Main{
 public static void main(String[] args){
          Test2.staticMethod();
 }
}

「クラス名.メソッド名()」と記述すれば、staticメソッドを呼び出すことができます。staticメソッドは、クラスのインスタンス化をする必要がなく、メソッドを指定するだけですぐ呼び出せます。

staticメソッドの具体的な使用例

それでは、staticメソッドの具体的な使い方を解説します。以下のサンプルコードを用意しました。

public class Main
 public static void main(String[] args){
      Output.staticMethod();
   }
}

class Output{
    public static void staticMethod(){
         System.out.println(“StaticMethodです”);
    }
}

◯実行結果

Documents $ 1java test.java
StaticMethodです
Documents $ 

これがstaticメソッドのもっとも基本的な使い方です。

この例では、MainクラスからOutputクラスのstaticMethodメソッドを呼び出しています。staticMethodメソッドでは、「StaticMethodです」と出力しています。

ちなみに、このコードをstaticメソッドを使わないで書く場合、次のようになりますね。

public class Main{
 public static void main(String[] args){
      Output output_test = new Output();
              output_test.instanceMethod();
 }
}
 
class Output{
     public void instanceMethod(){
         System.out.println(“StaticMethodではない”);
           }
}

◯実行結果

Documents $ 1java test.java
StaticMethodではない
Documents $ 

実行結果が同じになることを確認してください。

staticメソッドを使わない場合は、「new」でインスタンス化する必要があります。インスタンス化した後にメソッドを呼び出し、「StaticMethodではない」と出力しています。

staticメソッドの基本的な使い方はこのようになります。

static変数とは

続いてstatic変数について解説します。
static変数とは何かということから、static変数の基本的な使い方までをしっかり理解しましょう。

static変数とは何か

staticメソッドとは、インスタンスを生成せずに使えるメソッドのことでした。同じように、static変数とはインスタンスを生成せずに使える変数のことを指します。

変数を宣言するときに「static」とつけると、static変数にすることが可能です。
ちなみに、static変数は「クラス変数」とも呼ばれています。

static変数を使用するメリット

static変数のメリットは、インスタンス化の必要がないということです。
インスタンス化の影響を受けないため、そのクラスの中だけで使う変数が欲しい場合に便利ですね。

なんでもかんでもstatic変数にしてしまうと混乱を招くので、必要なときにだけ使うようにしましょう。

static変数の使い方

それでは、static変数の具体的な使い方を解説します。
サンプルコードも交えて解説するので、実際に動かしてみながら学んでくださいね。

static変数の基本的な使い方

static変数を宣言するには、次のように型名の前に「static」をつけます。

class Test{
     public static int num = 1;
}

これだけでstatic変数を宣言することができます。

staic変数を呼び出すときは、「クラス名.変数名」と指定すればOKです。

System.out.println(Test.num)

static変数の具体的な使用例

それでは、static変数の具体的な使い方を見ていきましょう。

以下のサンプルコードでは、static変数「num」を使って、何回インスタンス化されたのかをカウントしています。

public class Main{
 public static void main(String[] args){
      Vehicle car = new Vehicle(“車”);
      Vehicle bike = new Vehicle(“バイク”);
      Vehicle airplane = new Vehicle(“飛行機”);
   }
}
 
class Vehicle{
 public static int num = 0;
     public Vehicle(String data){
         num++; // 何回インスタンス化されたかをカウントする
         System.out.println( data + “:” + String.valueOf(num));
          }
}

◯実行結果

Documents $ 1java test.java
車:1
バイク:2
飛行機:3
Documents $ 1

このコードでは、インスタンス化するごとにstatic変数「num」の値が1つずつ増えていきます。numはインスタンス化の影響を受けないため、新しくインスタンス化を行っても値がリセットされず、そのまま保持されます。

まとめ

本記事ではstaticメソッドおよびstatic変数について解説しました。

改めて、それぞれの定義についておさらいしましょう。

  • staticメソッド:インスタンスを生成しなくても呼び出せるメソッド
  • static変数:インスタンス化の影響を受けない変数

staticの基本的な使い方がおわかり頂けたでしょうか?
staticメソッドやstatic変数を必要に応じて使えるようになれば、より高度なコードを書けるようになりますよ。
本記事で紹介したサンプルコードを自分で変更するなどしながら、ぜひstaticの使い方を理解してみてくださいね。

本記事がJava初心者の方にとって有意義なものとなれば幸いです。

プログラミングの家庭教師『Tech Teacher』


引用元:Tech Teacher

「スクールに通い続ける自信がない…」
「時間がなくてスクールに通えない…」

そんな方にはプログラミングの家庭教師『Tech Teacher』がおすすめです。
Tech Teacherはマンツーマン指導なので、生徒様一人ひとりに最適な指導を行うことができます。また、オンライン指導も可能なので、全国どこにいても家庭教師の授業を受けることができます。

Tech Teacherの3つの特徴


生徒様に最適化されたマンツーマン指導
完全マンツーマンの指導なので、生徒様の目的・学習状況・ご要望に合わせて、最適な指導をご提供いたします。

指導力・人柄・相性の優れた教師のご紹介
Tech Teacherには採用率20%の選考を突破した、指導力の高い教師が在籍しています。また、選考では指導力だけではなく人柄も重視しております。

1,000人の教師が在籍!幅広い指導に対応可能
業界トップレベルの1,000人の教師が在籍しています。そのため、幅広い言語・ツール・目的に対応することができます。

家庭教師ならではの5つの魅力


オーダーメイドのカリキュラム
生徒様一人ひとりに習熟度・目的・期間に応じて最適なカリキュラムを提供いたします。

きめ細やかなフォローが可能
生徒様からのご要望にきめ細やかに対応し、学習計画や勉強法などの指導もできるので、普段の勉強も捗ります。

習い事・学業・お仕事との両立が簡単
教室に通う必要がないので親御様の送迎も不要です。授業時間・頻度を生徒様のご都合に合わせて自由に調節することができます。

自分のペースで進められる
生徒様の理解度や意欲に応じて授業のスピードを調節できます。不明点や疑問点は都度立ち止まって解消できるので、着実に理解して進むことができます。

すぐ質問できるから挫折しない
先生を独り占めできるので、周りの目を気にすることなく分からないところをいつでも質問できます。

Tech Teacherへのお問い合わせ

無料体験授業・資料請求のお問い合わせはこちらから

質問のみのお問い合わせも受け付けております。