この記事では、すべての Java 学習者に Java 変数とは何か、またその操作方法について説明します。

Java変数とは何ですか

Java の変数はボックスと考えることができます。この「ボックス」には特定のサイズ、つまり、ボックスに割り当てられるメモリがあります。割り当てられるメモリの量は変数の型によって異なりますが、これについては後ほど説明します。同時に、ボックス自体のサイズは作成後に変更できませんが、中身は変更できます。箱は空かもしれません。何らかの値を「挿入」してから、他の値を抽出して挿入することができます。したがって、変数は、Java プログラムの実行中にデータ値を格納するフィールドです。このボックスには重要な機能があります。
  • 常に値を 1 つだけ含めることができます (空にすることもできます。その場合はデフォルト値が含まれます)。
  • データ型があります。そのサイズは、データのタイプと、その場所が割り当てられるメモリの特定の領域 (データが存在する場所) によって異なります。
Java の変数 - 1

変数の宣言方法

Java で変数を宣言するには、その型と名前を指定する必要があります。以下は 3 つの変数を宣言する例です。

int myInt;
String s;
Object variableName;
ここで、intString、およびObject はデータ型であり、myIntsvariableNameは変数名です。データ型はプログラムのニーズに基づいて選択する必要があり、その内容が明確になるように名前を選択することをお勧めします。もちろん、初心者にとってはそれほど厳密ではありませんが、大規模なプロジェクトでは、「」のような変数名はコードの可読性を損なう可能性があります。したがって、最初から変数の用途が明確になるような名前を付けることに慣れておく方がよいでしょう。もちろん、当然の範囲内です。

変数を初期化する方法

変数を宣言すると、その変数にメモリが割り当てられます。初期化とは、「ボックス」に特定の値を「入れる」ことを意味します。これは、変数の宣言中または後で実行できます。また、変数の値はプログラムの実行中に変更される可能性があります。例:

public class VariableTest {
    public static void main(String[] args) {
        int myInt = 5;
        String s;
        s = "init";
        System.out.println(s);
        s = s+5;
        System.out.println(s);
    }
}
ここでは、 myInt変数を 1 行で宣言して初期化し、すぐにメモリ (int 数値ごとに 32 ビット) を割り当て、名前を付けて、割り当てられたメモリに値 5 を配置しました 。次に、文字列sにメモリ領域を割り当てることを宣言し、すでに別のコマンドによって値「init」がそこに設定されています。その後、文字列を出力し、変数sの値を変更しました。このプログラムでは行を出力し、実行すると次の結果が表示されます。
初期化init5

Java の変数のデータ型: プリミティブと非プリミティブ

Java の変数のデータ型は、次の 2 つのグループに分類されます。
  • プリミティブ データ型には、byteshortintlongfloatdoubleboolean、およびcharが含まれます。
  • StringArraysClassesなどの非プリミティブ データ型
変数を操作する例を次に示します。

public class VariableTest {
   public static void main(String[] args) {

       int myInt = - 5;               // integer (whole number)
       float myFloat = 2.718281828459045f;    // Floating point number
       char myLetter = 'a';         // character
       boolean myBool = true;       // boolean
       String myText = "Hero";     // String
       System.out.println(myInt + " " +
               myFloat +" " + myLetter + " " +  myBool + " " + myText);
       Student myStudent = new Student("Walker","Johnny", "Kyle", null);
      
   }
}
intcharboolean、およびfloatはプリミティブです。文字列は非プリミティブです。myStudent変数はどうでしょうか? これは、ユーザーが作成したクラスStudentのオブジェクトです。これは、単に非プリミティブ変数の処理を説明するために作成されました。Java ではほとんどすべてがオブジェクトであるため、Java ではこれらが大部分を占めます。理解のために、 Studentクラスのコードを次に示します。

import java.util.Date;

public class Student {
   String surname;
   String name;
   String secondName;
   Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases

   public Student(String surname, String name, String secondName, Date birthday ){
       this.surname = surname;
       this.name = name;
       this.secondName = secondName;
       this.birthday = birthday == null ? 0 : birthday.getTime();
   }

   @Override
   public int hashCode(){
       //TODO: check for nulls
       //return surname.hashCode() ^ name.hashCode() ^ secondName.hashCode() ^ (birthday.hashCode());
       return (surname + name + secondName + birthday).hashCode();
   }
   @Override
   public boolean equals(Object other_) {
       Student other = (Student)other_;
       return (surname == null || surname.equals(other.surname) )
               && (name == null || name.equals(other.name))
               && (secondName == null || secondName.equals(other.secondName))
               && (birthday == null || birthday.equals(other.birthday));
   }
}

Java の変数のタイプ: ローカル、インスタンス、静的

Java には 3 つの異なるタイプの変数があり、それらを次のようにリストします。
  1. ローカル変数
  2. インスタンス変数
  3. 静的変数

ローカル変数

メソッド本体内で宣言された変数をローカル変数と呼びます。また、ローカル変数はコンストラクターとブロック内で宣言されます。ローカル変数は、それが作成されたメソッド、コンストラクター、またはブロック内でのみ使用でき、クラス内の他のメソッドは変数の存在を認識しません。したがって、メソッド、コンストラクター、またはブロックが入力されるとローカル変数が作成され、メソッド、コンストラクター、またはブロックが機能しなくなると変数は破棄されます。ローカル変数はstaticキーワードでは定義できません。さらに、ローカル変数にはアクセス修飾子を使用できません。以下に例を示します。

public class VariableTest {
   public static void main(String[] args) {
       System.out.println(myMethod("C plus "));
   }
           private static String myMethod(String myString) {
       String myOtherString = "plus";
       return myString + myOtherString;
   }
}
ここで、myOtherStringはローカル変数です。他のメソッドからは使用できませんが、myMethod。ローカル変数にはデフォルト値を設定できません。プログラム内で少なくとも 1 つのローカル変数が初期化されていない場合、プログラムは正しく動作しません。前の例の 1 つに小さな変更を加えて、myBool変数の初期化を「忘れて」みましょう。

public class VariableTest {
   public static void main(String[] args) {

       int myInt = - 5;               // integer (whole number)
       float myFloat = 2.718281828459045f;    // Floating point 
       char myLetter = 'a';         // character
       boolean myBool;       // boolean
       String myText = "Hero";     // String
       System.out.println(myInt + " " +
               myFloat +" " + myLetter + " " +  myBool + " " + myText);
       Student myStudent = new Student("Walker","Johnny", "Kyle", null);

   }
}
プログラムを実行しようとすると、エラーがスローされます。
エラー:(10, 50) Java: 変数 myBool が初期化されていない可能性があります

インスタンス変数

クラス内で、メソッド、コンストラクター、またはブロックの本体の外で宣言された変数は、インスタンス変数と呼ばれます。インスタンス変数は、 newキーワードを使用してオブジェクトが作成されるときに作成されます。オブジェクトが破壊されると、それも破壊されます。静的として宣言することはできませんが、インスタンス変数にアクセス修飾子を使用できます。インスタンス変数は、クラス内のすべてのメソッド、コンストラクター、およびブロックで表示されます。通常、インスタンス変数はプライベートですが、サブクラスの可視性を変更できます。ローカル変数とは対照的に、インスタンス変数にはデフォルト値があります。すべての数値プリミティブ型のデフォルト値は 0、ブール値の場合は false、オブジェクト参照の場合は null です。値は宣言中またはコンストラクター内で割り当てることができます。以下に例を示します。

//instance variable example
public class Employee {

   // here we have a public instance variable. It is visible for this class and child classes
   public String name;

   //this instance variable is private so it’s visible for the Employee class only. You can use setters and getters to get it
   private double salary;

   public Employee (String empName) {
       name = empName;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public double getSalary() {
       return salary;
   }

   public void setSalary(double employeeSalary) {
       salary = employeeSalary;
   }

   public static void main(String args[]) {
       Employee employee = new Employee("Johnny");
       employee.setSalary(1500);
       System.out.println("name = " + employee.getName());
       System.out.println("salary = " + employee.getSalary());
   }
}

静的変数

静的として宣言された変数は静的変数と呼ばれます。Java では、このような変数をメソッド、コンストラクター、またはブロックの外で宣言できます。ローカルにすることはできません。インスタンスではなくクラスに属します。これは、静的変数の単一のコピーが作成され、クラスのすべてのインスタンス間で共有されることを意味します。静的変数のメモリ割り当ては、クラスがメモリにロードされるときに 1 回だけ行われます。任意の可視性を設定できますが、通常はパブリックとして宣言されます。インスタンス変数などのデフォルト値もあります。

public class Box
{
   public void add(int data)
   {
       Storage.sum = Storage.sum + data;
       Storage.count++;
   }

   public void remove(int data)
   {
       Storage.sum = Storage.sum - data;
       Storage.count--;
   }
}

public class Storage
{
   public static int count = 0;
   public static int sum = 0;
}
上の例では、別のStorageクラスを作成し、count 変数と sum 変数をそのクラスに移動し、静的として宣言しました。パブリック静的変数には、任意のプログラム メソッドから (メソッドからだけではなく) アクセスできます。 学んだことをさらに強化するには、Java コースのビデオ レッスンを視聴することをお勧めします。