جب آپ پائتھون (Python) کا کوئی مختصر اسکرپٹ چلاتے ہیں، تو پائتھون فائل کو اوپر سے نیچے کی طرف، یعنی پہلے ‘ٹاپ لیول’ (top-level) اسٹیٹمنٹ سے شروع کرتے ہوئے، ایگزیکیوٹ کرتا ہے۔ جاوا میں بھی اسی انداز کو برقرار رکھنے کے لیے آپ چند اسٹیٹمنٹس تو لکھتے ہیں، لیکن جاوا کا تقاضا ہے کہ وہ کسی ‘کلاس’ (class) کے اندر موجود ہوں اور پروگرام کا آغاز main نامی ایک مخصوص میتھڈ (method) سے ہو۔
فرض کریں کہ اسکرپٹ 3 رداس (radius) والے دائرے کے رقبے (area) جیسی کوئی قدر (value) معلوم کرتا ہے اور اسے پرنٹ کرتا ہے۔ پائتھون میں آپ اسے براہِ راست ‘ٹاپ لیول’ پر لکھ سکتے ہیں، لیکن جاوا میں اس کے مساوی مختصر ترین پروگرام میں ایک بنیادی فرق ہے جسے آپ فوراً محسوس کریں گے۔ جاوا کسی بھی چیز کو چلانے سے پہلے اضافی ساخت (structure) کا تقاضا کرتا ہے۔
ملاحظہ کریں کہ 3 رداس والے اسی کام کے لیے پائتھون کا ‘ٹاپ لیول’ ورژن، جاوا کے class اور main والے ورژن سے کس طرح مطابقت رکھتا ہے۔
یہ اضافی ساخت محض سجاوٹ نہیں ہے۔ جاوا رن ٹائم کو ایک ایسے ‘نام زد نقطہ آغاز’ (named starting point) کی ضرورت ہوتی ہے جسے وہ کسی کلاس کو لوڈ کر کے اور ایک مخصوص دستخط (signature) والے میتھڈ کو کال کر کے تلاش کرتا ہے۔
اس نقطہ آغاز کی وضاحت کرنے والے نحو (syntax) کے حصوں کو پہچاننے سے شروعات کریں۔
class ClassName {
public static void main(String[] args) {
// statements
}
}
کلاس (class) ایک نام والا کنٹینر ہے جسے جاوا کوڈ کو یکجا کرنے کے لیے استعمال کرتا ہے، اور آپ کے اسٹیٹمنٹس (statements) کو چلانے سے پہلے جاوا اس کنٹینر کو لوڈ کرتا ہے۔ main میتھڈ ‘انٹری پوائنٹ’ (entry point) ہے، String[] args کمانڈ لائن آرگومنٹس کی ایک ایرے (array) ہے، درمیانی بریکٹ {} بلاکس کی وضاحت کرتے ہیں، اور زیادہ تر اسٹیٹمنٹس سیمی کولن ; پر ختم ہوتی ہیں تاکہ کمپائلر یہ جان سکے کہ ہر اسٹیٹمنٹ کہاں ختم ہو رہی ہے۔
جاوا System.out.println(...) کے ذریعے بھی پرنٹ (آؤٹ پٹ) کرتا ہے، جو رن ٹائم کے زیرِ انتظام ‘اسٹینڈرڈ آؤٹ پٹ اسٹریم’ پر println کو کال کرتا ہے۔ اس کی وجہ سے پرنٹنگ کا عمل پائتھن (Python) کے بلٹ اِن print کے بجائے کسی آبجیکٹ پر میتھڈ کال کرنے جیسا محسوس ہوتا ہے۔
جاوا فائل کے بنیادی ڈھانچے (skeleton) کا جائزہ لیں اور دیکھیں کہ ایگزیکیوشن (execution) کہاں سے شروع ہوتی ہے اور بلاکس کس طرح ایک دوسرے کے اندر (nest) واقع ہوتے ہیں۔
ایک بار جب آپ main کی نشاندہی کر لیتے ہیں، تو آپ بالکل درست پیش گوئی کر سکتے ہیں کہ کیا چیز چلے گی۔ رن ٹائم (runtime) کا آغاز main کے اندر موجود پہلی سٹیٹمنٹ سے ہوتا ہے اور یہ ترتیب وار آگے بڑھتا ہے—بالکل پائتھن (Python) کی طرح—لیکن صرف اسی میتھڈ کی باڈی (method body) کے اندر۔
اس مثال میں (پائی) کے لیے 3 کا استعمال کرتے ہوئے ایک تخمینی قدر (approximation) اختیار کی گئی ہے، تاکہ حسابی عمل (arithmetic) صرف انٹیجرز (integers) تک ہی محدود رہے۔