Java の基本 -- 変数の型

目次

序文:

Javaパラメータ変数

Java ローカル変数

メンバー変数(インスタンス変数)

クラス変数(静的変数)

メンバー変数、ローカル変数、静的変数の違い


序文:

Java 言語でサポートされる変数の型は次のとおりです。

  1. ローカル変数: ローカル変数は、メソッド、構築メソッド、またはステートメント ブロックで定義される変数であり、そのスコープは現在のメソッド、構築メソッド、またはステートメント ブロックに限定されます。ローカル変数は使用前に宣言する必要があり、アクセス修飾子によって変更することはできません。

  2. メンバー変数 (インスタンス変数): メンバー変数は、クラス内およびメソッドの外で定義される変数であり、そのスコープはクラス全体であり、クラス内の任意のメソッド、構築メソッド、およびステートメント ブロックからアクセスできます。メンバー変数はアクセス修飾子を使用して変更できます。

  3. 静的変数 (クラス変数): 静的変数は、クラス内およびメソッドの外で定義される変数であり、static キーワードで修飾され、そのスコープはクラス全体です。静的変数の値は、プログラムの実行中にコピーが 1 つだけ存在し、クラス内の任意のメソッド、構築メソッド、およびステートメント ブロックからアクセスできます。静的変数はアクセス修飾子を使用して変更できます。

  4. パラメータ変数 (Parameter): パラメータ変数は、メソッドの定義時に宣言される変数で、メソッドの呼び出し時にメソッドに渡される値として使用されます。パラメータ変数のスコープはメソッド内に限定されます。

上記は、Java 言語で一般的に使用される変数の型です。これらの変数タイプを適切に使用することで、プログラム内でさまざまなタイプのデータを保存および操作できます。

例 

public class VariableExample {
    public static void main(String[] args) {
        // 声明并初始化局部变量
        int localVar = 5;
        
        // 输出局部变量值
        System.out.println("局部变量: " + localVar);
        
        // 声明成员变量并赋值
        String instanceVar = "Hello";
        
        // 输出成员变量值
        System.out.println("成员变量: " + instanceVar);
        
        // 声明静态变量并赋值
        staticVar = 10;
        // 输出静态变量值
        System.out.println("静态变量: " + staticVar);
    }
    
    // 静态变量
    private static int staticVar;
}

プログラムを実行すると、次の結果が出力されます。 

局部变量: 5 
成员变量: Hello 
静态变量: 10

Javaパラメータ変数

パラメーター変数は、メソッドまたはコンストラクターに渡される値を受け取るためにメソッドまたはコンストラクターで宣言された変数です。パラメーター変数はローカル変数に似ていますが、メソッドまたはコンストラクターが呼び出されたときにのみ存在し、メソッドまたはコンストラクターの内部でのみ使用できます。

構文宣言は次のとおりです。

访问修饰符 返回类型 方法名(参数类型 参数名1, 参数类型 参数名2, ...) {
    // 方法体
}

ここで、パラメータタイプはパラメータ変数のタイプを表し、パラメータ名はパラメータ変数の名前を表します。メソッドを呼び出すときは、パラメーター変数に対応する値を渡す必要があります。

Java でパラメータを渡すには、値による受け渡しと参照による受け渡しの 2 つの方法があります。

  • 値による受け渡し: メソッドが呼び出されるとき、実際のパラメーターの値のコピーが渡されます。パラメーター変数に新しい値が割り当てられると、コピーの値のみが変更され、元の値は影響を受けません。基本データ型は、メソッドの呼び出し時に値によって渡されます。

  • 参照渡し: メソッド呼び出し時に、実パラメータの参照(メモリアドレス)が渡されます。パラメーター変数に新しい値が割り当てられると、元の値の内容が変更されます。オブジェクト型は、メソッドが呼び出されるときに参照によって渡されます。

public class ParameterExample {

    // 定义一个方法,接收两个整数作为参数并返回它们的和
    public static int addNumbers(int num1, int num2) {
        int sum = num1 + num2;  // 将两个参数相加得到和
        return sum;  // 返回计算结果
    }
    
    public static void main(String[] args) {
        int a = 5;
        int b = 3;
        
        int result = addNumbers(a, b);  // 调用addNumbers方法,并传递a和b作为参数
        
        System.out.println("总和是:" + result);
    }
}

上記のコードを実行すると、出力は次のようになります。

总和是:8

Java ローカル変数

ローカル変数はメソッド、コンストラクター、またはステートメント ブロック内で宣言され、実行完了後に破棄されます。

  • ローカル変数は使用前に宣言する必要があり、アクセス修飾子によって変更することはできません。また、ローカル変数のスコープは、宣言されているメソッド、コード ブロック、またはコンストラクターに制限されます。
  • ローカル変数は、それを宣言するメソッド、コンストラクター、またはコード ブロック内でのみ表示され、他のメソッドやコード ブロックからはアクセスできません。
  • ローカル変数はヒープ メモリではなくスタック メモリに格納されます。
  • ローカル変数にはデフォルト値がないため、使用前に初期化する必要があります。初期化は、宣言時または後続のコード内で実行できます。宣言時に初期化されていない場合、変数にはデフォルト値 (int 型の場合は 0、boolean 型の場合は false、参照型の場合は null) が割り当てられます。
  • メソッド、コンストラクター、またはコード ブロックが実行されると、ローカル変数は破棄され、ローカル変数が占有しているメモリが解放されます。

ローカル変数の宣言構文は次のとおりです。

变量的类型 变量的名称;

public class LocalVariablesExample {
    public static void main(String[] args) {
        // 声明整型局部变量num,并初始化为10
        int num = 10;
        
        // 声明字符串类型的局部变量name,并未进行初始化
        String name;
        
        // 条件语句中使用局部变量num
        if (num > 5) {
            // 在条件成立的情况下,定义并初始化局部变量count
            int count = 20;
            System.out.println("Count: " + count);
        }   // count的作用域仅限于if代码块内部,出了该代码块就无法访问
        
        // 打印局部变量num
        System.out.println("Num: " + num);
        
        // 离开if代码块后,尝试打印局部变量count,
        // 但由于其作用域仅限于if代码块内,因此会出现编译错误
        // System.out.println("Count: " + count);
        
        // 初始化局部变量name
        name = "John";
        System.out.println("Name: " + name);
        
        // 在for循环中使用局部变量i
        for (int i = 0; i < 5; i++) {
            System.out.println("i: " + i);
        }   // i的作用域仅限于for循环内部,出了循环就无法访问
        
        // 尝试打印局部变量i,将会出现编译错误
        // System.out.println("i: " + i);
    }
}

上記の例をコンパイルして実行した結果は次のようになります。

Count: 20
Num: 10
Name: John
i: 0
i: 1
i: 2
i: 3
i: 4

メンバー変数(インスタンス変数)

  • メンバー変数 (インスタンス変数) は、クラス内、メソッド、コンストラクター、およびステートメント ブロックの外で宣言される変数です。
  • オブジェクトがインスタンス化されると、各メンバー変数の値が決定されます。
  • メンバー変数はオブジェクトの作成時に作成され、オブジェクトの破棄時に破棄されます。
  • メンバ変数の値は少なくとも 1 つのメソッド、構築メソッドまたはステートメント ブロックによって参照され、外部からこれらのメソッドを通じてインスタンス変数の情報を取得できるようにする必要があります。
  • メンバー変数は使用前または使用後に宣言できます。
  • アクセス修飾子はメンバー変数を変更できます。
  • メンバー変数は、クラス内のメソッド、コンストラクター、またはステートメント ブロックから参照できます。通常、メンバー変数はプライベートにする必要があります。アクセス修飾子を使用すると、メンバー変数をサブクラスから参照できるようになります。
  • メンバー変数にはデフォルト値があります。数値型変数のデフォルト値は 0、ブール型変数のデフォルト値は false、参照型変数のデフォルト値は null です。変数の値は宣言時に指定することも、コンストラクターで指定することもできます。
  • メンバー変数には変数名で直接アクセスできます。ただし、静的メソッドやその他のクラスでは、完全修飾名 ObjectName.VariableName を使用する必要があります。

メンバー変数の宣言構文は次のとおりです。

accessModifier type variableName;
accessModifier --表示访问修饰符,可以是 public、protected、private 或默认访问级别(即没有显式指定访问修饰符)。
type -- 表示变量的类型。
variableName -- 表示变量的名称。

ローカル変数とは異なり、メンバー変数の値はオブジェクトの作成時に割り当てられ、初期化されていなくてもデフォルト値が割り当てられます。たとえば、int 型の変数のデフォルト値は 0 で、boolean 型の変数のデフォルト値は false です。

メンバー変数には、オブジェクト名またはクラス名 (静的メンバー変数の場合) によってアクセスできます。明示的に初期化されていない場合は、デフォルト値が与えられます。メンバー変数はコンストラクターまたは他のメソッドで初期化でき、オブジェクトまたはクラス名を通じてその値にアクセスして設定できます。

例 

public class MyClass {
    private int myVariable; // 私有整型成员变量

    public MyClass() {
        myVariable = 0; // 构造方法中将成员变量初始化为0
    }

    public void setMyVariable(int value) {
        myVariable = value; // 设置成员变量的值
    }

    public int getMyVariable() {
        return myVariable; // 获取成员变量的值
    }


// 示例用法:

    public static void main(String[] args) {
        MyClass myObject = new MyClass(); // 创建MyClass的对象

        myObject.setMyVariable(10); // 设置成员变量值为10

        int variableValue = myObject.getMyVariable(); // 获取成员变量的值

        System.out.println("成员变量的值是: " + variableValue);
    }
}

上記の例をコンパイルして実行した結果は次のようになります。

成员变量的值是: 10

クラス変数(静的変数)

クラス変数(静的変数)は、クラス内で宣言され、staticキーワードで修飾された変数です。インスタンス変数とは異なり、クラス変数は特定のオブジェクトではなくクラス全体に属します。クラス変数の特徴と使用法は次のとおりです。

  1. クラス変数はクラスのロード時に作成され、プログラム全体でコピー (一意性) が 1 つだけ存在します。
  2. クラス変数には、クラスのインスタンスを作成せずに、クラス名を通じて直接アクセスします。
  3. クラス変数は通常、クラスに関連する共有データまたは状態を表すために使用され、そのクラスのすべてのオブジェクトで共有できます (共有性)。
  4. クラス変数の値は、宣言時に指定することも、静的コード ブロックで初期化することもできます。
  5. クラス変数のアクセス修飾子には、パブリック、プロテクト、プライベート、またはデフォルトのアクセス レベルを指定できます。
  6. クラス変数には、静的メソッドと非静的メソッドを含むクラスのすべてのメソッドからアクセスできます。
  7. クラス変数にはデフォルト値があり、値の型はデフォルトで 0、ブール型はデフォルトで false、参照型はデフォルトで null です。

例 

public class MyClass {
    private static int classVariable; // 静态整型类变量

    public static void setClassVariable(int value) {
        classVariable = value; // 设置类变量的值
    }

    public static int getClassVariable() {
        return classVariable; // 获取类变量的值
    }


// 示例用法:

    public static void main(String[] args) {
        MyClass.setClassVariable(10); // 设置类变量的值为10

        int variableValue = MyClass.getClassVariable(); // 获取类变量的值

        System.out.println("类变量的值: " + variableValue);
    }
}

上記の例をコンパイルして実行した結果は次のようになります。

类变量的值: 10

メンバー変数、ローカル変数、静的変数の違い

メンバー変数

ローカル変数

静的変数

場所を定義する

 クラス内、メソッド外

メソッド、またはメソッドの仮パラメータ

クラス内、メソッド外

初期化値

デフォルトの初期化値があります

なし、最初に定義、割り当て後に使用

デフォルトの初期化値があります

呼び出しメソッド

オブジェクト呼び出し

---

オブジェクト呼び出し、クラス名呼び出し

ストレージの場所

山の中に

スタックの中で

メソッド領域

ライフサイクル

オブジェクトとともに生き、オブジェクトとともに死ぬ

メソッドで生き、死ぬ

クラスとともに生き、そして死ぬ

エイリアス

インスタンス変数

---

クラス変数

おすすめ

転載: blog.csdn.net/m0_74293254/article/details/132223480