2016-04-15 4 views
0

私が間違っている場合は私を修正してください、私はこの権利を理解していることを明確にしたいだけです。オブジェクトリファレンスclarifcation

javaでオブジェクトを作成する場合は、newキーワードの後に​​クラスタイプを指定します。 Ex。 new [someclassnamehere](); コンストラクタに応じて、オブジェクトを作成するときに引数に渡すことで引数を渡すことができます。

newキーワードを使って新しいオブジェクトoを作成するコード行を持つだけでは、実際にその情報への参照を保持しているものがないために役立つかどうかはわかりません。しかし、それは正しいようです。

type nameなどを使用して、作成している新しいオブジェクトへの参照を含む変数を作成することができます。Employee someData;。しかし、まだ実際にはオブジェクトを参照する必要はありません。まだ作成されていないものを参照してください。したがって、上記の情報を適用することによって: Employee someData = new Employee(name); 従業員の名前を含むEmployee objectを作成しました。 newキーワードは、Employeeクラスのインスタンスを作成しました。このオブジェクトでは、someData変数が新しく作成されたオブジェクトを参照します。

したがって、someDataという変数は、オブジェクトが格納されている場所のメモリにアドレスが格納されているため、Employee objectを参照すると言うことができます。このアドレスにより、オブジェクトの実際のデータにアクセスすることができます。この場合、従業員の名前です。

データ型がEmployeeArrayListを作成する場合は、Employee objectsを格納できます。ですから、someData2someData3などと同様に、someData変数をarrayListに追加することができます。 (ちょうどそれらがすべて同じタイプであるが、異なる従業員情報を含んでいると仮定して)。 これらの各変数には、これらのオブジェクトへの参照が含まれています。 ArrayListオブジェクトには、これらのオブジェクトへの参照も含まれています。ArrayList要素には、Employee Objectsを参照するsomeData変数が含まれています。

例:私はこれまでのダウンアイデアを得ていますが、実際に参照変数を作成しないとき、どのような少し私をオフにスローすることはあり

ArrayList.get(1) -> someData -> reference variable(address) -> employee Object 
ArrayList.get(2) -> someData2 -> reference variable(address) -> employee Object2 

かなり確信して。

それでは、あなたがオブジェクトを作成します(データはいくつかのデータベースなどから読み込まれている)とArrayListに追加ループを作成しましょう。このループでは、必要なデータを収集し、それを使用してオブジェクトを作成し、それを直接ArrayListに追加します。簡単にするために

(いくつかの擬似コードと実際のコードの組み合わせ)のは、それはこのようになりましょう

ArrayList<Employee> list = new ArrayList<Employee>(); 
// While data from the database still exist (while loop,etc) 
// extract some sort of data from the database, such as their name and hours 
// create an object of this information and store it in an ArrayList 
list.add(new Employee(name, hours); 
// end loop 

、のは、それが5つのオブジェクトを作成したので、ループが5回を実行したと述べてみましょう。 これはArrayList Listに5つのオブジェクトを追加し、これらのオブジェクトへの参照が実際にはArrayList要素に含まれていることを意味します。最初のオブジェクトをArrayListに追加するには、list.get(1)を使用します(ArrayListの開始位置は1で、インデックスは0ではありません)。このオブジェクトへの参照が返されます。

編集:私の間違いを私に許してください、私はbrainfartを持っていて、混乱していると思います。なぜ私はArrayListのインデックスがそのように2番目のように働いたと思っているのか分かりません

これは、ループを使ってオブジェクトを作成する正しい方法ですか?

+0

答えは「はい」ですが、実際に知りたいことはわかりません。この質問は非常に幅広いです。 – 4castle

+0

_1を除くすべてが、ArrayListが1から始まり、indexes_が0ではないことは間違いないと確信しています。 _reference変数は、ある種の参照型の変数です。 'Employee'は参照型です。したがって、 'Employee someData;'は参照変数の宣言です。 – Savior

+0

* "ArrayList要素にはこれらのsomeData変数が含まれています" *これは正しいことがわかりません。 ArrayListには変数はなく、参照もあります。 'theArrayList.add(someData)'を呼び出すと、 'someData'の値(それが指しているオブジェクトのアドレス)がコピーされます。あなたが終わるのは、同じオブジェクトを指す2つの別々の参照( 'someData'変数の中の1つ、' ArrayList'の中の1つ)です。 Java参照はポインタのようなものです。おそらくhttp://stackoverflow.com/q/40480/2891664を参照してください。 – Radiodef

答えて

0

私は何が実際にその情報への参照を保持していないので、今まで、ただ単に新しいキーワードを使用して、oを新しいオブジェクトを作成するコードの行を有することが有用であろうかはわかりません。しかし、それは正しいようです。

コンストラクタが新しいスレッドを開始するとします。参照はありませんが、その場合は

new AmazingThread(); 

が問題ありません。

まあ、この質問は巨大です。そうです、このようなオブジェクトを作成することは完全に正当です。 ArrayListには、参照を格納する独自の変数があると考えることができます。

+0

入力いただきありがとうございます。ええ、私はそれを見て、ここのコメントを読むなど、今は意味をなさないようです。私はこれまでにこのような問題に近づく必要がなかったので、ちょっと気分が落ちました。それで、なぜ私は自分の考えを明確にしたいのですか?良い昼/夜を! – pudge

関連する問題