5

次のコードブロックがあります。

class Student{

int age;               //instance variable
String name;     //instance variable

public Student()
 {
    this.age = 0;
    name = "Anonymous";
 }
public Student(int Age, String Name)
 {
    this. age = Age;
    setName(Name);
 }
public void setName(String Name)
 {
    this.name = Name;
 }
}

public class Main{
public static void main(String[] args) {
        Student s;                           //local variable
        s = new Student(23,"Jonh");
        int noStudents = 1;          //local variable
 }
}

私の質問は、ローカル変数とは何か、それらが割り当てられている場所を知るためのインスタンス変数、HEAPまたはSTACKメモリのどちらに関連しています。デフォルトのコンストラクターでは、ローカル変数が1つだけ存在するように見えます。これは、「this」キーワードによって作成されたものですが、howcome'name = "Anonymous";' ローカル変数とは見なされませんか?これはオブジェクトタイプですが、ローカル変数でもかまいませんね。ちなみに、デフォルトのコンストラクターで作成/インスタンス化されたオブジェクトの例を挙げていただけますか?ありがとうございました!

4

2 に答える 2

9

つまり、どのような種類の名前でも参照のみが格納され、オブジェクトは直接格納されません。

コードのブロックに完全に制約されている名前は、スレッドにプライベートなスタック上にあるスタックフレーム上で、参照用のストレージを割り当てています。

クラスのメンバーである名前は、そのクラスのインスタンスを表すオブジェクト内で、ヒープ内の参照用にストレージを割り当てました。

クラスの静的メンバーである名前は、そのクラスのクラスオブジェクトのインスタンスを表すオブジェクト内で、ヒープ内の参照用にストレージを割り当てています。

すべてのオブジェクトはヒープ上に存在します。ただし、それらへの参照は、ヒープ上の他のオブジェクト内、またはスタック上の参照プレースホルダー内に存在する場合があります。

すべてのプリミティブデータ型は、参照が格納されていた場所に格納されます。

class Student {

  int age;         // value stored on heap within instance of Student
  String name;     // reference stored on heap within instance of Student

  public Student() {
    this.age = 0;
    name = "Anonymous";
  }

  public Student(int Age, String Name) {
    this.age = Age;
    setName(Name);
  }

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

}

public class Main {
  public static void main(String[] args) {
        Student s;                    // reference reserved on stack
        s = new Student(23, "John");  // reference stored on stack, object allocated on heap
        int noStudents = 1;           // value stored on stack
  }
}
于 2012-05-18T18:54:12.207 に答える
-1

すべてのプリミティブvar(int、double、boolean)がスタック上に作成されます。「new」で割り当てられたより複雑なオブジェクトはヒープ内にあり、変数は単にそれへの参照(ポインター)です。

ローカル変数は、「Student s」のように特定のスコープに存在する変数であり、Mainメソッドにのみ存在します(スタックまたはヒープのいずれかに存在する可能性があります)

于 2012-05-18T18:51:57.023 に答える