در مثال قبلي ، يك خط مشابه خط زير براي اعلان يك شي ئ ازنوع Box استفاده شده

+ Box mybox = new Box)(;


اين دستور دو مرحله گفته شده را با يكديگر تركيب نموده است . براي اينكه هر
يك از مراحل را روشن تر درك كنيد، ميتوان آن دستور را بصورت زير بازنويسي نمود:


+ Box mybox; // declare reference to object
+ mybox = new Box)(; // allocate a Box object


خط اول ، myBox را بعنوان يك ارجاع به شيئي از نوع Box اعلان مي كند . پس از
اجراي اين خط ، mybox محتوي تهي (null) خواهد داشت كه نشانگر آن است كه هنوز
شي ئ بطور واقعي بوجود نيامده است . هر تلاشي براي استفاده ازmybox در اين مرحله
سبب بروز خطاي زمان كامپايل (compile-time error) خواهد شد . خط بعدي يك شي ئ
واقعي را تخصيص داده و يك ارجاع از آن به mybox انجام مي دهد . پس از اجراي خط
دوم ، مي توانيد از mybox بعنوان يك شي ئ Box استفاده نماييد . اما در واقعيت mybox
خيلي ساده آدرس حافظه شي ئ واقعي Box را نگهداري مي كند . تاثير اين دو
خط كد را در شكل زير نشان داده ايم .
نكته : كساني كه با C++/C آشنايي دارند احتمالا" توجه نموده اند كه ارجاعات شي ئ
مشابه اشاره گرها هستند . اين تشابه تا حدود زيادي صحيح است . يك ارجاع
شي ئ (object reference) مشابه يك اشاره گر حافظه است . مهمترين تفاوت
و كليد ايمني در جاوا اين است كه نمي توانيد از ارجاعات همچون
اشاره گرهاي واقعي استفاده نماييد . بدين ترتيب ، نمي توانيد ارجاع شي ئ
را بعنوان اشاره اي به موقعيت دلخواه حافظه يا بعنوان يك عدد صحيح بكار
بريد .

Statement Effect


Box mybox; | null |

mybox

|
| Width > | ;()mybox = new Box
mybox | Height |

| Depth |

Box object



نگاهي دقيقتر به new
شكل عمومي عملگر new بقرار زير مي باشد :

class-var = new classname)(;


در اينجا class-var يك متغير از نوع كلاسي است كه ايجاد كرده ايم . class name
نام كلاسي است كه مي خواهيم معرفي كنيم . نام كلاس كه بعد از آن پرانتزها قرار
گرفته اند مشخص كننده سازنده (constructor) كلاس است . سازنده تعريف مي كند كه
وقتي يك شي ئ از يك كلاس ايجاد شود ، چه اتفاقي خواهد افتاد . سازنده ها بخش مهمي
از همه كلاسها بوده و خصلتهاي بسيار قابل توجهي دارند .
بسياري از كلاسهاي دنياي واقعي (real-world) بطور صريحي سازندگان خود را
داخل تعريف كلاس ، معرفي مي كنند . اما اگر سازنده صريحي مشخص نشده باشد ، جاوا
بطور خودكار يك سازنده پيش فرض را عرضه مي كند . درست مثل حالت Box .
در اين مرحله ، ممكن است تعجب كنيد كه چرا از new براي مواردي نظير اعداد
صحيح و كاراكترها استفاده نمي شود. جواب اين است كه انواع ساده در جاوا بعنوان
اشيائ پياده سازي نمي شوند . در عوض ، آنها بعنوان متغيرهاي عادي پياده سازي
مي شوند. اينكار براي افزايش كارايي انجام مي گيرد. جاوا قادراست بدون استفاده
از رفتارهاي خاص نسبت به اشيائ، اين انواع ساده را بطور موثري پياده سازي كند.
نكته مهم اين است كه new حافظه را براي يك شي ئ طي زمان اجرا تخصيص مي دهد .
مزيت اين روش آن است كه برنامه شما ميتواند اشيائ مورد نيازش را طي زمان اجراي
برنامه ايجاد كند . اما از آنجاييكه محدوديت حافظه وجود دارد ، ممكن است new
بعلت عدم كفايت حافظه نتواند حافظه را به يك شي ئ تخصيص دهد . اگر چنين حالتي
پيش بيايد، يك استثنائ حين اجرا واقع خواهد شد. ولي در زبانهاي C++/C در صورت
عدم موفقيت ، مقدار تهي (null) برگردان مي شود .
اجازه دهيد يكبار ديگر تفاوت بين يك كلاس و يك شي ئ را مرور كنيم . يك كلاس
يك نوع جديد داده را ايجاد مي كند كه مي توان براي توليد اشيائ از آن نوع
استفاده نمود. يعني يك كلاس يك چهارچوب منطقي ايجاد مي كند كه ارتباط بين اعضائ
را توصيف مي نمايد . هنگاميكه يك شي ئ از يك كلاس را اعلان مي كنيد ، در حقيقت
نمونه اي از آن كلاس را بوجود آورده ايد. بدين ترتيب ، كلاس يك ساختار منطقي است .
يك شي داراي واقعيت فيزيكي است . ( يعني يك شي ئ فضايي از حافظه را اشغال در ذهن داشته باشيد