जावा भाषा। परिचय।
लंबे समय तक जावा भाषा पर एक लेख के बिना एक कंप्यूटर पत्रिका की कल्पना करना कठिन था। यहां तक कि द न्यूयॉर्क टाइम्स, द वाशिंगटन पोस्ट और बिजनेस वीक जैसे लोकप्रिय अखबारों और पत्रिकाओं ने भी उनके बारे में लिखा।
यह याद रखना असंभव है कि नेशनल पब्लिक रेडियो ने कभी दस मिनट का कार्यक्रम किसी प्रोग्रामिंग भाषा को समर्पित किया था। यह अच्छा है या बुरा यह दृष्टिकोण पर निर्भर करता है। उत्पादन में $100 मिलियन का निवेश सॉफ़्टवेयरएक विशिष्ट प्रोग्रामिंग भाषा का उपयोग करके बनाया गया ?! CNN, CNBC, और अन्य मीडिया आउटलेट इस बारे में बात कर रहे हैं कि जावा कैसे कर सकता है और कैसे करेगा।
हालांकि, यह पुस्तक गंभीर प्रोग्रामर के लिए है, और चूंकि जावा एक गंभीर प्रोग्रामिंग भाषा है, इसलिए हमारे पास कवर करने के लिए बहुत कुछ है। इसलिए, हम विज्ञापन के वादों के विश्लेषण में नहीं उतरेंगे और यह पता लगाने की कोशिश करेंगे कि क्या सच है और उनमें क्या कल्पना है। इसके बजाय, हम जावा भाषा को एक प्रोग्रामिंग भाषा के रूप में पर्याप्त विस्तार से वर्णित करेंगे (निश्चित रूप से, वे विशेषताएं जो इसे इंटरनेट पर काम करने के लिए उपयोग करना संभव बनाती हैं, जो वास्तव में, इतना विज्ञापन प्रचार का कारण बनी)। उसके बाद, हम जावा भाषा क्या कर सकती है और क्या नहीं, यह बताकर हम वास्तविकता को कल्पना से अलग करने का प्रयास करेंगे।
सबसे पहले, विज्ञापन के वादों और जावा भाषा की वास्तविक संभावनाओं के बीच एक खाई थी। जैसे-जैसे यह परिपक्व होता गया, तकनीक अधिक स्थिर और विश्वसनीय होती गई, और उम्मीदें एक उचित स्तर तक गिर गईं। जावा भाषा का अब तेजी से "मिडलवेयर" बनाने के लिए उपयोग किया जा रहा है जो क्लाइंट और सर्वर संसाधनों (जैसे डेटाबेस) के बीच संचार करता है।
हालांकि ये महत्वपूर्ण अनुप्रयोग आश्चर्यजनक नहीं हैं, यह इस क्षेत्र में है कि जावा भाषा अपनी मशीन स्वतंत्रता, मल्टीथ्रेडिंग और नेटवर्क प्रोग्रामिंग क्षमताओं के कारण सबसे उपयोगी साबित हुई है। इसके अलावा, जावा भाषा ने एम्बेडेड सिस्टम में अग्रणी भूमिका निभाई है, पोर्टेबल डिवाइस, वर्चुअल कियोस्क, ऑन-बोर्ड कार कंप्यूटर और इसी तरह के लिए वास्तविक मानक बन गया है। हालांकि, व्यापक रूप से उपयोग किए जाने वाले जावा प्रोग्राम को फिर से लिखने का पहला प्रयास व्यक्तिगत कम्प्यूटर्सअसफल रहे - परिणामी अनुप्रयोग कम-शक्ति वाले और धीमे निकले। नए संस्करण के आगमन के साथ, इनमें से कुछ समस्याओं का समाधान हो गया है, लेकिन यह स्वीकार किया जाना चाहिए कि उपयोगकर्ता, सामान्य तौर पर, इस बात की बिल्कुल भी परवाह नहीं करते हैं कि उनके द्वारा खरीदे जाने वाले प्रोग्राम किस भाषा में लिखे गए हैं। हम मानते हैं कि जावा भाषा के मुख्य लाभ नए प्रकार के उपकरणों और अनुप्रयोगों के निर्माण में दिखाई देंगे, न कि मौजूदा कार्यक्रमों के पुनर्लेखन में।
एक प्रोग्रामिंग टूल के रूप में जावा भाषा
जावा प्रोग्रामिंग भाषा ने अपने विज्ञापन वादों को कैसे पार किया है। निस्संदेह, यह गंभीर प्रोग्रामर के लिए उपलब्ध सर्वोत्तम भाषाओं में से एक है। जावा में एक महान प्रोग्रामिंग भाषा बनने की क्षमता है, लेकिन शायद अब बहुत देर हो चुकी है। जब एक नई प्रोग्रामिंग भाषा प्रकट होती है, तो पहले से बनाए गए सॉफ़्टवेयर के साथ इसकी संगतता की गंभीर समस्या तुरंत उत्पन्न होती है। इसके अलावा, भले ही इन कार्यक्रमों में परिवर्तन उनके पाठ के साथ छेड़छाड़ किए बिना किया जा सकता है, एक भाषा के रचनाकारों के लिए यह मुश्किल है कि जनता द्वारा इतनी गर्मजोशी से स्वागत किया जाए, जैसे कि जावा भाषा, सीधे यह कहना: "हां, हम कर सकते हैं संस्करण एक्स विकसित करते समय गलती की है, लेकिन संस्करण वाई बेहतर होगा।" नतीजतन, और सुधारों के प्रकट होने की प्रतीक्षा करते हुए, हमें यह बताना होगा कि निकट भविष्य में जावा भाषा की संरचना में महत्वपूर्ण परिवर्तन नहीं होगा।
स्पष्ट प्रश्न है: जावा भाषा को कैसे सुधारा गया है?"। यह पता चला है कि यह प्रोग्रामिंग भाषा में सुधार करके नहीं, बल्कि जावा भाषा में लिखे गए कार्यक्रमों के पुस्तकालयों को मौलिक रूप से बदलकर किया गया था। सन माइक्रोसिस्टम्स ने सब कुछ बदल दिया है: व्यक्तिगत पुस्तकालय कार्यों के नाम से (उन्हें और अधिक सार्थक बनाना) और ग्राफिक मॉड्यूल के संचालन के तरीके (घटनाओं को संभालने के तरीके को बदलकर और आंशिक रूप से कार्यकर्ता कार्यक्रमों को फिर से लिखना), और भाषा की नई सुविधाओं के निर्माण के साथ समाप्त होता है, जैसे कि मुद्रण सुविधाएं, जो जावा 1.0 में नहीं थीं। परिणाम है सभी की तुलना में बहुत अधिक उपयोगी प्रोग्रामिंग प्लेटफॉर्म पिछला संस्करणजावा भाषा।
Microsoft ने अपना स्वयं का उत्पाद J++ नाम से जारी किया है, जो जावा भाषा से संबंधित है। J++ भाषा की व्याख्या एक वर्चुअल मशीन द्वारा की जाती है जो बाइटकोड को क्रियान्वित करते समय जावा वर्चुअल मशीन के साथ संगत होती है, लेकिन बाहरी कोड वाले इंटरफेस इन भाषाओं के बीच काफी भिन्न होते हैं। J++ और Java भाषाओं का सिंटैक्स लगभग समान है। हालाँकि, Microsoft ने अतिरिक्त भाषा संरचनाएँ बनाई हैं। उन सभी को छोड़कर, बल्कि संदिग्ध मूल्य के हैं विंडोज इंटरफेसएपीआई। इस तथ्य के अलावा कि इन भाषाओं में समान वाक्यविन्यास है, उनके मूल पुस्तकालय (स्ट्रिंग्स, उपयोगिताओं, नेटवर्क प्रोग्रामिंग टूल, मल्टीथ्रेडिंग टूल, गणित पुस्तकालय, आदि) अनिवार्य रूप से वही हैं।
हालाँकि, इन भाषाओं के लिए ग्राफिक्स लाइब्रेरी, यूजर इंटरफेस और दूरस्थ वस्तुओं तक पहुंच पूरी तरह से अलग है। वर्तमान में, Microsoft अब J++ भाषा का समर्थन नहीं करता है, उसने एक नई C# भाषा विकसित की है जिसमें जावा से कई समानताएं हैं, लेकिन एक अलग वर्चुअल मशीन का उपयोग करता है। इस पुस्तक में J++ या C# शामिल नहीं है।
जावा भाषा के लाभ
1) जावा भाषा के मुख्य लाभों में से एक है उस मंच से स्वतंत्रता जिस पर कार्यक्रम निष्पादित किए जाते हैं: एक ही कोड विंडोज, सोलारिस, लिनक्स, मैकिन्टोश, आदि ऑपरेटिंग सिस्टम के तहत चलाया जा सकता है।
यह वास्तव में आवश्यक है जब विभिन्न ऑपरेटिंग सिस्टम के तहत बाद के निष्पादन के लिए इंटरनेट पर प्रोग्राम डाउनलोड किए जाते हैं।
2) एक और फायदा यह है कि Java भाषा का सिंटैक्स C++ भाषा के सिंटैक्स के समान है, और C और C++ भाषा जानने वाले प्रोग्रामर के लिए इसे सीखना मुश्किल नहीं है. सच है, विज़ुअल बेसिक भाषा जानने वाले प्रोग्रामर्स के लिए, यह सिंटैक्स असामान्य हो सकता है।
यदि आपने कभी C++ में प्रोग्राम नहीं किया है, तो हो सकता है कि इस खंड में प्रयुक्त कुछ शब्द आपके लिए स्पष्ट न हों। इस मामले में, आप इसे छोड़ सकते हैं। जब तक आप अध्याय 6 के अंत तक पहुँचते हैं, तब तक ये शर्तें आपके लिए परिचित हो जाएँगी।
3) साथ ही, जावा - एक पूरी तरह से वस्तु-उन्मुख भाषा, सी ++ से भी ज्यादा. जावा भाषा में सभी इकाइयाँ वस्तुएँ हैं, कुछ आदिम प्रकारों के अपवाद के साथ, जैसे कि संख्याएँ। (क्योंकि ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का उपयोग करके जटिल प्रोजेक्ट्स को विकसित करना आसान है, इसने पुराने स्ट्रक्चर्ड प्रोग्रामिंग को बदल दिया है। यदि आप ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग से परिचित नहीं हैं, तो अध्याय 3-6 आपको इसके बारे में आवश्यक सभी जानकारी देगा।)
हालाँकि, C++ भाषा की एक और, थोड़ी बेहतर, बोली विकसित करने के लिए पर्याप्त नहीं है। यह मौलिक महत्व का है कि जावा में सी ++ की तुलना में बग-मुक्त प्रोग्राम विकसित करना आसान है। क्यों? जावा भाषा के डिजाइनरों ने इस बारे में लंबे और कठिन विचार किए हैं कि सी ++ में लिखे गए प्रोग्राम इतने त्रुटि प्रवण क्यों हैं। उन्होंने जावा भाषा को ऐसे प्रोग्राम बनाने की संभावना को समाप्त करने के लिए उपकरण प्रदान किए जो सबसे आम त्रुटियों को छिपाएंगे। ऐसा करने के लिए, निम्नलिखित जावा भाषा में किया जाता है।
4) स्पष्ट आवंटन और स्मृति के विमोचन की संभावना को बाहर रखा गया है।
जावा भाषा में मेमोरी कचरा संग्रहण तंत्र द्वारा स्वचालित रूप से मुक्त हो जाती है। प्रोग्रामर को गलत मेमोरी उपयोग से संबंधित त्रुटियों के खिलाफ गारंटी दी जाती है।
5) सही सरणियाँ पेश की जाती हैं और सूचक अंकगणित निषिद्ध है।
अब प्रोग्रामर, सिद्धांत रूप में, मेमोरी से डेटा को किसके कारण मिटा नहीं सकते हैं दुस्र्पयोग करनासंकेत।
6) असाइनमेंट ऑपरेटर को समानता तुलना ऑपरेटर के साथ भ्रमित करने की संभावना को बाहर रखा गया है।
अब आप संकलित भी नहीं कर सकते if(ntries = 3) । . . (विजुअल बेसिक प्रोग्रामर्स को यहां कोई समस्या बिल्कुल भी नहीं दिखाई दे सकती है, क्योंकि यह त्रुटि सी और सी ++ में सबसे अधिक भ्रम का स्रोत है)।
7) एकाधिक वंशानुक्रम को बाहर रखा गया है। इसे एक नई अवधारणा से बदल दिया गया है - एक इंटरफ़ेस, जो ऑब्जेक्टिव सी भाषा से उधार लिया गया है।
एक इंटरफ़ेस प्रोग्रामर को लगभग वह सब कुछ देता है जो एक प्रोग्रामर वर्ग पदानुक्रमों के प्रबंधन की जटिलताओं से बचते हुए कई विरासत से प्राप्त कर सकता है।
जावा भाषा की विशेषता विशेषताएं
सरल
व्याख्या की
वितरित
भरोसेमंद
सुरक्षित
मशीन स्वतंत्र
वस्तु के उन्मुख
उच्च प्रदर्शन
बहु
गतिशील
कंप्यूटर वास्तुकला स्वतंत्र
हम पिछले भाग में इनमें से कुछ बिंदुओं पर पहले ही बात कर चुके हैं। इस खंड में, हम: जावा भाषा मैनुअल से उद्धरण प्रदान करेंगे, भाषा की विशेषताओं का खुलासा करेंगे; आइए पाठकों के साथ भाषा के कुछ गुणों के बारे में कुछ विचार साझा करें, जो इसके नवीनतम संस्करण के साथ हमारे अपने अनुभव पर आधारित है।
सरल
हम एक ऐसी प्रणाली बनाना चाहते थे जो प्रोग्राम करने में आसान हो, जिसमें अतिरिक्त प्रशिक्षण की आवश्यकता न हो और प्रचलित अभ्यास और प्रोग्रामिंग मानकों को ध्यान में रखा जाए। इसलिए, हालांकि हमने इस उद्देश्य के लिए सी ++ को अनुपयुक्त माना, जावा को सिस्टम को और अधिक सुलभ बनाने के लिए जितना संभव हो उतना समान बनाया गया था। जावा भाषा में बहुत सी अप्रयुक्त, अस्पष्ट, और अस्पष्ट सी ++ विशेषताएं शामिल नहीं हैं जो हमें लगता है कि अच्छे से अधिक नुकसान करती हैं।
जावा भाषा का वाक्य-विन्यास अनिवार्य रूप से C++ भाषा के वाक्य-विन्यास का परिष्कृत संस्करण है। इस भाषा में कोई हेडर फाइल, पॉइंटर अंकगणित (और पॉइंटर्स स्वयं), संरचनाएं, यूनियन, ऑपरेटर ओवरलोडिंग, वर्चुअल बेस क्लास आदि नहीं हैं। (जावा और सी++ भाषाओं के बीच अंतर का वर्णन पूरी किताब में बिखरी सी++ भाषा के बारे में नोट्स में किया गया है।) हालांकि, डेवलपर्स ने सी++ भाषा की सभी कमियों को ठीक करने की कोशिश नहीं की।
उदाहरण के लिए, जावा भाषा में स्विच स्टेटमेंट का सिंटैक्स अपरिवर्तित रहा है। C++ भाषा जानने से, Java भाषा के सिंटैक्स पर स्विच करना आसान होगा।
यदि आप आमतौर पर विज़ुअल प्रोग्रामिंग वातावरण (जैसे विज़ुअल बेसिक) का उपयोग करते हैं, तो आपको जावा भाषा कठिन लगेगी।
इसका सिंटैक्स अक्सर अजीब लगता है (हालाँकि अभिव्यक्ति का अर्थ समझना मुश्किल नहीं है)। इससे भी महत्वपूर्ण बात यह है कि जावा भाषा में काम करते समय, आपको बहुत अधिक प्रोग्राम करना पड़ता है। विजुअल बेसिक भाषा की खूबी यह है कि इसका विजुअल प्रोग्रामिंग वातावरण आपको लगभग स्वचालित रूप से एप्लिकेशन इन्फ्रास्ट्रक्चर बनाने की अनुमति देता है। जावा भाषा का उपयोग करके समान परिणाम प्राप्त करने के लिए, आपको हाथ से प्रोग्राम करने की आवश्यकता होती है, लेकिन इसके परिणामस्वरूप बहुत छोटे प्रोग्राम होते हैं।
हालाँकि, एक तीसरे प्रकार का प्रोग्रामिंग वातावरण है जो आपको "ड्रैग-एंड-ड्रॉप" तकनीक का उपयोग करके प्रोग्राम बनाने की अनुमति देता है।
सादगी का दूसरा पहलू है संक्षिप्तता। जावा भाषा के लक्ष्यों में से एक प्रोग्राम के विकास को सक्षम करना है जिसे छोटी मशीनों पर पूरी तरह से स्वतंत्र रूप से चलाया जा सकता है। मुख्य दुभाषिया और वर्ग समर्थन का आकार लगभग 40 केबी है; मानक पुस्तकालय और थ्रेडिंग उपकरण (विशेषकर स्व-निहित माइक्रोकर्नेल) एक और 17: Kb लेते हैं।
यह एक बहुत बड़ी सफलता है। हालाँकि, ध्यान दें कि GUI समर्थन पुस्तकालय बहुत बड़े हैं।
वस्तु के उन्मुख
सीधे शब्दों में कहें, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग एक प्रोग्रामिंग तकनीक है जो डेटा (यानी, ऑब्जेक्ट्स) और उन तक पहुंचने के साधनों पर केंद्रित है। एक बढ़ईगीरी सादृश्य को आकर्षित करते हुए, वस्तु-उन्मुख शिल्पकार मुख्य रूप से उस कुर्सी पर केंद्रित होता है जिसे वह बना रहा है, और ऐसा करने के लिए आवश्यक उपकरणों में केवल दूसरी दिलचस्पी है; उसी समय, गैर-वस्तु-उन्मुख बढ़ई केवल अपने औजारों के बारे में सोचता है। जावा और सी ++ के ऑब्जेक्ट-ओरिएंटेड गुण अनिवार्य रूप से समान हैं।
पिछले 30 वर्षों में ऑब्जेक्ट ओरिएंटेशन ने पहले ही अपना मूल्य साबित कर दिया है, और इसके बिना एक आधुनिक प्रोग्रामिंग भाषा की कल्पना करना असंभव है। दरअसल, जावा भाषा के ऑब्जेक्ट-ओरिएंटेड फीचर्स की तुलना C++ से की जा सकती है। उनके बीच मुख्य अंतर एकाधिक वंशानुक्रम के तंत्र में निहित है, जिसके लिए जावा भाषा को एक बेहतर समाधान मिला, साथ ही साथ जावा भाषा के मेटाक्लास मॉडल में भी।
प्रतिबिंब तंत्र (अध्याय 5) और वस्तु क्रमांकन (अध्याय 12) आपको तैयार घटकों के आधार पर ग्राफिकल यूजर इंटरफेस बनाने के लिए लगातार वस्तुओं और उपकरणों को लागू करने की अनुमति देता है।
यदि आपने कभी भी किसी वस्तु-उन्मुख भाषा में प्रोग्राम नहीं किया है, तो अध्याय 4-6 को ध्यान से देखें। ये अध्याय ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की मूल बातें पेश करते हैं और दिखाते हैं कि इसका उपयोग पारंपरिक, प्रक्रियात्मक भाषाओं जैसे सी या बेसिक पर जटिल परियोजनाओं को विकसित करने के लिए कैसे किया जा सकता है।
वितरित
जावा में टीसीपी/आईपी (ट्रांसमिशन कंट्रोल प्रोटोकॉल/इंटरनेट प्रोटोकॉल) प्रोटोकॉल जैसे एचटीटीपी (हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल) या एफ़टीपी (फाइल ट्रांसफर प्रोटोकॉल)। फाइल ट्रांसफर प्रोटोकॉल) पर आधारित डेटा ट्रांसफर करने के लिए कार्यक्रमों की एक बड़ी लाइब्रेरी है। जावा भाषा में लिखे गए एप्लिकेशन नेटवर्क पर वस्तुओं को खोल और एक्सेस कर सकते हैं औरURL (यूनिफ़ॉर्म रिसोर्स लोकेशन - यूनिवर्सल रिसोर्स एड्रेस) जितनी आसानी से स्थानीय नेटवर्क.
जावा भाषा नेटवर्क पर काम करने के लिए शक्तिशाली और सुविधाजनक उपकरण प्रदान करती है। जिस किसी ने भी कभी अन्य भाषाओं में इंटरनेट के लिए प्रोग्राम लिखने की कोशिश की है, वह इस बात से सुखद आश्चर्यचकित होगा कि जावा में नेटवर्क कनेक्शन (सॉकेट कनेक्शन) खोलने जैसे सबसे कठिन कार्यों को कितनी आसानी से हल किया जाता है। तथाकथित सर्वलेट्स (सर्वलेट) से युक्त सुरुचिपूर्ण तंत्र, सर्वर पर काम को बेहद कुशल बनाता है।
सर्वलेट कई लोकप्रिय द्वारा समर्थित हैं वेब सर्वर. (नेटवर्किंग को दूसरे खंड में शामिल किया जाएगा।) जावा भाषा में वितरित वस्तुओं के बीच संचार दूरस्थ विधियों को कॉल करने के लिए एक तंत्र द्वारा प्रदान किया जाता है (यह विषय दूसरे खंड में भी शामिल है)।
भरोसेमंद
जावा भाषा को ऐसे प्रोग्राम बनाने के लिए डिज़ाइन किया गया है जो सभी परिस्थितियों में मज़बूती से काम करना चाहिए। जावा भाषा का फोकस जल्दी पता लगाने पर है संभावित त्रुटियां, गतिशील जाँच (कार्यक्रम निष्पादन के दौरान), और त्रुटि-प्रवण स्थितियों से बचना... जावा और C++ के बीच एकमात्र महत्वपूर्ण अंतर जावा भाषा का सूचक मॉडल है, जो मेमोरी ओवरराइटिंग और डेटा भ्रष्टाचार की संभावना को समाप्त करता है।
यह गुण भी बहुत उपयोगी है। जावा भाषा संकलक उन त्रुटियों का पता लगाता है जो अन्य भाषाओं में केवल रनटाइम पर पाई जाती हैं। इसके अलावा, प्रोग्रामर जिन्होंने खराब पॉइंटर के कारण मेमोरी करप्शन बग की तलाश में कई घंटे बिताए हैं, वे बहुत खुश होंगे कि सिद्धांत रूप में ऐसी समस्याएं जावा भाषा में उत्पन्न नहीं हो सकती हैं।
यदि आपने कभी विजुअल बेसिक या COBOL भाषाओं में प्रोग्राम किया है जो स्पष्ट रूप से पॉइंटर्स का उपयोग नहीं करते हैं, तो आप शायद यह नहीं समझ पाएंगे कि यह इतना महत्वपूर्ण क्यों है। सी प्रोग्रामर बहुत कम भाग्यशाली होते हैं। उन्हें स्ट्रिंग्स, एरेज़, ऑब्जेक्ट्स और यहां तक कि फाइलों तक पहुंचने के लिए पॉइंटर्स की आवश्यकता होती है। विजुअल बेसिक में प्रोग्रामिंग करते समय, इनमें से किसी की भी आवश्यकता नहीं होती है, और प्रोग्रामर को इन संस्थाओं के लिए मेमोरी आवंटित करने के बारे में चिंता करने की आवश्यकता नहीं होती है। दूसरी ओर, एक भाषा में कई डेटा संरचनाएं जिनमें पॉइंटर्स नहीं होते हैं, उन्हें लागू करना बहुत मुश्किल होता है। स्ट्रिंग्स और सरणियों जैसी साधारण संरचनाओं को पॉइंटर्स की आवश्यकता नहीं होती है। पॉइंटर्स की पूरी शक्ति केवल वहीं प्रकट होती है जहां उन्हें दूर नहीं किया जा सकता है, उदाहरण के लिए, बनाते समय लिंक्ड सूचियां. जावा प्रोग्रामर हमेशा के लिए खराब पॉइंटर्स, गलत आवंटन और मेमोरी लीक से बच जाता है।
सुरक्षित
जावा भाषा को नेटवर्क या वितरित वातावरण में उपयोग करने के लिए डिज़ाइन किया गया है। इस वजह से सुरक्षा पर काफी ध्यान दिया गया है। जावा भाषा आपको ऐसे सिस्टम बनाने की अनुमति देती है जो वायरस और छेड़छाड़ से सुरक्षित हैं।
पहले संस्करण में हमने लिखा था, "कभी नहीं कहना कभी नहीं," और हम सही थे। प्रिंसटन यूनिवर्सिटी के सुरक्षा विशेषज्ञों के एक समूह ने JDK के पहले संस्करण की बिक्री के तुरंत बाद जावा 1.0 में पहली सुरक्षा बग की खोज की। इसके अलावा, वे और अन्य विशेषज्ञ जावा भाषा के सभी बाद के संस्करणों के सुरक्षा तंत्र में अधिक से अधिक बग ढूंढते रहे।
इस स्थिति के सकारात्मक पक्ष पर, जावा भाषा विकास समूह ने सुरक्षा प्रणाली में किसी भी बग के लिए शून्य सहनशीलता की घोषणा की है और एप्लेट सुरक्षा तंत्र में पाए जाने वाले किसी भी समस्या को तुरंत ठीक करने के बारे में निर्धारित किया है। विशेष रूप से, जावा भाषा दुभाषिया के लिए आंतरिक विशिष्टताओं को प्रकाशित करके, सन ने छिपी सुरक्षा कमजोरियों को ढूंढना बहुत आसान बना दिया है और उन्हें स्वतंत्र विशेषज्ञों को आउटसोर्स किया है।
इससे यह संभावना बढ़ गई कि जल्द ही सभी सुरक्षा कमजोरियों का पता लगाया जाएगा। किसी भी मामले में, जावा भाषा की सुरक्षा प्रणाली को धोखा देना बेहद मुश्किल है। अब तक पाए गए कीड़े लगभग अगोचर रहे हैं, और उनकी संख्या (अपेक्षाकृत) छोटी है।
सन के सुरक्षा वेब पेज में निम्नलिखित यूआरएल है: http://java.sun.com/sfaq/।
यहां कुछ स्थितियां हैं जो जावा सुरक्षा प्रणाली होने से रोकती हैं।
1) निष्पादन योग्य प्रोग्राम का स्टैक ओवरफ़्लो, जो इंटरनेट पर फैले कुख्यात "वर्म" के कारण हुआ था।
2) स्मृति के उन क्षेत्रों को नुकसान जो प्रक्रिया के लिए आवंटित स्थान से बाहर हैं।
3) सुरक्षित क्लासलोडर का उपयोग करते समय स्थानीय फाइलों को पढ़ना और लिखना, जैसे कि वेब ब्राउज़र, जो इस तरह की फाइल एक्सेस को मना करता है।
ये सभी सुरक्षा उपाय उपयुक्त हैं और आमतौर पर त्रुटिपूर्ण तरीके से काम करते हैं, लेकिन विवेक कभी नुकसान नहीं पहुंचाता है। जबकि आज तक खोजे गए बग तुच्छ से बहुत दूर हैं, और उन्हें खोजने का विवरण अक्सर गुप्त रखा जाता है, यह स्वीकार किया जाना चाहिए कि जावा भाषा की सुरक्षा को साबित करना अब संभव नहीं है।
समय के साथ, भाषा में नई सुरक्षा सुविधाएँ जोड़ी गई हैं। संस्करण 1.1 के साथ शुरुआत करते हुए, जावा भाषा ने डिजिटल रूप से हस्ताक्षरित कक्षाओं की धारणा पेश की। डिजिटल हस्ताक्षर वाली कक्षा का उपयोग करके, आप इसके लेखक के बारे में सुनिश्चित हो सकते हैं। यदि आप इस पर भरोसा करते हैं, तो आप इस वर्ग को अपनी मशीन पर उपलब्ध सभी विशेषाधिकार प्रदान कर सकते हैं।
Microsoft द्वारा प्रस्तावित एक वैकल्पिक कोड वितरण तंत्र ActiveX तकनीक पर आधारित है और सुरक्षा के लिए केवल डिजिटल हस्ताक्षर का उपयोग करता है। जाहिर है, यह पर्याप्त नहीं है - Microsoft सॉफ़्टवेयर का कोई भी उपयोगकर्ता यह प्रमाणित कर सकता है कि प्रसिद्ध निर्माताओं के प्रोग्राम अक्सर क्रैश हो जाते हैं, जिससे डेटा भ्रष्टाचार का खतरा पैदा होता है। जावा भाषा में सुरक्षा प्रणाली ActiveX तकनीक की तुलना में बहुत अधिक मजबूत है, क्योंकि यह एप्लिकेशन को शुरू होने के क्षण से नियंत्रित करती है और इसे नुकसान पहुंचाने की अनुमति नहीं देती है।
वास्तुकला स्वतंत्र
कंपाइलर एक ऑब्जेक्ट फ़ाइल उत्पन्न करता है जिसका प्रारूप कंप्यूटर आर्किटेक्चर पर निर्भर नहीं करता है - संकलित प्रोग्राम को जावा प्रोग्राम निष्पादन प्रणाली के नियंत्रण में किसी भी प्रोसेसर पर निष्पादित किया जा सकता है। ऐसा करने के लिए, जावा भाषा कंपाइलर बाइटकोड कमांड उत्पन्न करता है जो विशिष्ट कंप्यूटर आर्किटेक्चर पर निर्भर नहीं करता है। बाइटकोड को इस तरह से डिज़ाइन किया गया है कि इसे किसी भी मशीन पर आसानी से व्याख्या किया जा सकता है या फ्लाई पर मशीन-निर्भर कोड में अनुवाद किया जा सकता है।
नहीं है नया विचार. 20 से अधिक वर्षों पहले, निकलॉस विर्थ द्वारा विकसित पास्कल कार्यान्वयन प्रणाली और यूसीएसडी पास्कल प्रणाली दोनों ने एक ही तकनीक का उपयोग किया था। बाइटकोड का उपयोग प्रोग्राम निष्पादन में एक बड़ा लाभ देता है (हालांकि, कई मामलों में सिंक्रोनस संकलन इसके लिए क्षतिपूर्ति करता है)। जावा भाषा के डेवलपर्स ने बाइटकोड निर्देशों का एक सेट विकसित करने का एक अच्छा काम किया है जो अधिकांश पर ठीक काम करता है आधुनिक कंप्यूटर, आसानी से वास्तविक मशीन निर्देशों में अनुवाद करना।
मशीन स्वतंत्र
सी और सी ++ भाषाओं के विपरीत, जावा विनिर्देश के कोई पहलू नहीं हैं जो कार्यान्वयन प्रणाली पर निर्भर करते हैं। बुनियादी डेटा प्रकारों के आकार और उन पर अंकगणितीय संचालन दोनों अच्छी तरह से परिभाषित हैं।
उदाहरण के लिए, जावा भाषा में टाइप int का अर्थ हमेशा 32-बिट पूर्णांक होता है। सी और सी ++ में, टाइप इंट का मतलब या तो 16-बिट पूर्णांक, 32-बिट पूर्णांक या मनमाना आकार का पूर्णांक हो सकता है, जैसा कि किसी विशेष कंपाइलर के डेवलपर द्वारा चुना जाता है। एकमात्र प्रतिबंध यह है कि एक int का आकार एक छोटे int के आकार से छोटा और एक लंबे int के आकार से बड़ा नहीं हो सकता है। संख्यात्मक प्रकारों का निश्चित आकार ऑन पर चल रहे कार्यक्रमों से जुड़ी कई परेशानियों से बचा जाता है विभिन्न कंप्यूटर. बाइनरी डेटा को एक निश्चित प्रारूप में संग्रहीत और प्रसारित किया जाता है, जो विभिन्न प्लेटफार्मों ("बिग एंडियन/लिटिल एंडियन" संघर्ष) पर विभिन्न बाइट ऑर्डर से जुड़ी गलतफहमी से भी बचा जाता है। लाइन्स को स्टोर किया जाता है मानक प्रारूपयूनिकोड।
पुस्तकालय जो सिस्टम का हिस्सा हैं एक मशीन-स्वतंत्र इंटरफ़ेस को परिभाषित करते हैं। उदाहरण के लिए, भाषा यूनिक्स, विंडोज और मैकिंटोश ऑपरेटिंग सिस्टम के लिए एक सार विंडो क्लास और इसके कार्यान्वयन प्रदान करती है।
जिस किसी ने भी विंडोज, मैकिंटोश और यूनिक्स के दस फ्लेवर पर समान रूप से चलने वाले प्रोग्राम को लिखने का प्रयास किया है, वह जानता है कि यह एक बहुत ही मुश्किल काम है। जावा संस्करण ने एक साधारण टूलकिट प्रदान करके इस समस्या को हल करने का एक वीर प्रयास किया है जो आम यूजर इंटरफेस तत्वों को बड़ी संख्या में सॉफ्टवेयर प्लेटफॉर्म के अनुकूल बनाता है। दुर्भाग्य से, पुस्तकालय, जिस पर बहुत काम किया गया था, ने हमें विभिन्न प्लेटफार्मों पर स्वीकार्य परिणाम प्राप्त करने की अनुमति नहीं दी। (उसी समय, विभिन्न प्लेटफार्मों पर ग्राफिक्स कार्यक्रमों में अलग-अलग बग दिखाई दिए।)
हालाँकि, यह केवल शुरुआत थी। कई अनुप्रयोगों में, ग्राफिकल यूजर इंटरफेस के परिष्कार की तुलना में मशीन की स्वतंत्रता बहुत अधिक महत्वपूर्ण है। इन अनुप्रयोगों को जावा 1.0 की शुरूआत से लाभ हुआ है। हालाँकि, GUI टूलकिट को अब पूरी तरह से नया रूप दिया गया है और यह अब होस्ट कंप्यूटर पर उपयोगकर्ता इंटरफ़ेस पर निर्भर नहीं है। एक नया संस्करणअधिक सार्थक और, हमारी राय में, पिछले वाले की तुलना में उपयोगकर्ता के लिए अधिक आकर्षक।
व्याख्या की
जावा भाषा दुभाषिया किसी भी मशीन पर भेजा जा सकता है और सीधे उस पर बाइटकोड निष्पादित कर सकता है। क्योंकि लिंक संपादन एक आसान प्रक्रिया है, प्रोग्रामिंग बहुत तेज और अधिक कुशल बन सकती है।
शायद यह अनुप्रयोग विकास में एक फायदा है, लेकिन उद्धरण एक स्पष्ट अतिशयोक्ति है। किसी भी मामले में, JSDK (Java Software Development Kit) में शामिल जावा भाषा संकलक काफी धीमा है। (तीसरी तरह के कुछ कंपाइलर, जैसे कि आईबीएम, बहुत तेज हैं।) एक प्रोग्रामिंग वातावरण की दक्षता में पुनर्संकलन गति सिर्फ एक कारक है। जावा और विजुअल बेसिक प्रोग्रामिंग वातावरण की गति की तुलना करने पर, आप निराश हो सकते हैं।
उच्च प्रदर्शन
जबकि आम तौर पर व्याख्या किए गए बाइटकोड में पर्याप्त से अधिक प्रदर्शन होता है, ऐसी स्थितियां होती हैं जहां बेहतर प्रदर्शन की आवश्यकता होती है। बाइटकोड का अनुवाद फ्लाई पर (रनटाइम पर) मशीन कोड में उस विशेष प्रोसेसर के लिए किया जा सकता है जिस पर एप्लिकेशन चल रहा है।
यदि किसी दुभाषिया का उपयोग बायटेकोड को निष्पादित करने के लिए किया जाता है, तो आपको वाक्यांश का उपयोग नहीं करना चाहिए " उच्च प्रदर्शन"। हालांकि, कई प्लेटफार्मों पर, एक अन्य प्रकार का संकलन संभव है, जो सिंक्रोनस कंपाइलर्स (जस्ट-इन-टाइम कंपाइलर्स-जेआईटी) द्वारा प्रदान किया जाता है। वे बाइटकोड को मशीन-डिपेंडेंट कोड में ट्रांसलेट करते हैं, परिणाम को मेमोरी में स्टोर करते हैं, और फिर इसे कॉल करते हैं। जब आवश्यक हो। चूंकि यह व्याख्या केवल एक बार निष्पादित की जाती है, यह दृष्टिकोण गति को कई गुना बढ़ा देता है।
हालांकि सिंक्रोनस कंपाइलर अभी भी मशीन-विशिष्ट कंपाइलर्स की तुलना में धीमे हैं, वे दुभाषियों की तुलना में कम से कम बहुत तेज हैं, कुछ प्रोग्राम के लिए 10x या यहां तक कि 20x स्पीडअप प्रदान करते हैं। यह तकनीक लगातार सुधार कर रही है और अंततः ऐसी गति प्राप्त कर सकती है जिसे पारंपरिक कंपाइलर कभी भी पार नहीं कर पाएंगे। उदाहरण के लिए, एक सिंक्रोनस कंपाइलर यह निर्धारित कर सकता है कि कौन सा कोड अधिक बार निष्पादित किया जा रहा है और निष्पादन गति के लिए इसे अनुकूलित कर सकता है।
बहु सूत्रण
बेहतर अन्तरक्रियाशीलता और कार्यक्रम निष्पादन प्रदान करता है।
यदि आपने कभी किसी अन्य प्रोग्रामिंग भाषा में मल्टीथ्रेडिंग की कोशिश की है, तो आपको सुखद आश्चर्य होगा कि जावा में इसे करना कितना आसान है। जावा भाषा में थ्रेड्स मल्टीप्रोसेसर सिस्टम का लाभ उठा सकते हैं यदि ऑपरेटिंग सिस्टम इसकी अनुमति देता है। दुर्भाग्य से, अधिकांश प्लेटफार्मों पर धाराओं का कार्यान्वयन व्यापक रूप से भिन्न होता है, और जावा भाषा डिजाइनर एकरूपता प्राप्त करने का कोई प्रयास नहीं करते हैं। केवल थ्रेड्स को कॉल करने का कोड सभी मशीनों के लिए समान रहता है; जावा भाषा मल्टीथ्रेडिंग के कार्यान्वयन को अंतर्निहित ऑपरेटिंग सिस्टम या थ्रेडिंग लाइब्रेरी पर छोड़ देती है। (प्रवाहों का वर्णन खंड 2 में किया गया है) इसके बावजूद, यह संगठन की सहजता है मल्टीथ्रेडेड कंप्यूटिंगसर्वर सॉफ्टवेयर विकास के लिए जावा भाषा को इतना आकर्षक बनाता है।
गतिशील
कई मायनों में, जावा C या C++ की तुलना में अधिक गतिशील है। इसे लगातार बदलते परिवेश में आसानी से अनुकूलित करने के लिए डिज़ाइन किया गया है। आप बिना किसी नुकसान के पुस्तकालयों में स्वतंत्र रूप से नई विधियों और वस्तुओं को जोड़ सकते हैं। जावा भाषा प्रोग्राम की प्रगति के बारे में जानकारी प्राप्त करना आसान बनाती है।
यह बहुत महत्वपूर्ण है जब आप पहले से चल रहे प्रोग्राम में कोड जोड़ना चाहते हैं। इसका एक प्रमुख उदाहरण कोड है जो एक ब्राउज़र द्वारा निष्पादन के लिए इंटरनेट से डाउनलोड किया जाता है। जावा 1.0 में, एक निष्पादन कार्यक्रम की प्रगति के बारे में जानकारी प्राप्त करना बिल्कुल भी आसान नहीं था, लेकिन जावा भाषा का वर्तमान संस्करण प्रोग्रामर को निष्पादन कार्यक्रम में वस्तुओं की संरचना और व्यवहार दोनों को उजागर करता है।
यह उन प्रणालियों के लिए बहुत मूल्यवान है जिन्हें प्रोग्राम निष्पादन के दौरान वस्तुओं का विश्लेषण करना चाहिए। इन प्रणालियों में GUI उपकरण, स्मार्ट डिबगर्स, प्लगइन्स और ऑब्जेक्ट डेटाबेस शामिल हैं।
जावा भाषा और इंटरनेट
विचार सरल है - उपयोगकर्ता इंटरनेट से जावा बाइटकोड डाउनलोड करते हैं और उन्हें अपनी मशीनों पर चलाते हैं। जावा प्रोग्राम जो वेब ब्राउजर पर चलते हैं, एप्लेट कहलाते हैं। एप्लेट का उपयोग करने के लिए, आपको एक वेब ब्राउज़र की आवश्यकता होती है जो जावा भाषा का समर्थन करता है और बाइटकोड की व्याख्या करने में सक्षम है। जावा स्रोत कोड सन द्वारा लाइसेंस प्राप्त है, जो इस बात पर जोर देता है कि भाषा और इसके मूल पुस्तकालयों की संरचना दोनों अपरिवर्तित रहें। दुर्भाग्य से, वास्तविकता ऐसी नहीं है। नेटस्केप और इंटरनेट एक्सप्लोरर ब्राउज़र के विभिन्न संस्करण जावा भाषा के विभिन्न संस्करणों का समर्थन करते हैं, और इनमें से कुछ संस्करण काफी पुराने हैं। यह दुर्भाग्यपूर्ण स्थिति एप्लेट्स के विकास में अधिक से अधिक बाधाएं पैदा करती है जो इसका लाभ उठाते हैं नवीनतम संस्करणजावा भाषा। इस समस्या को हल करने के लिए, सन ने एक जावा प्लग-इन विकसित किया है जो नेटस्केप और इंटरनेट एक्सप्लोरर ब्राउज़र पर आधारित जावा प्रोग्राम चलाने के लिए सबसे उन्नत वातावरण प्रदान करता है।
एक एप्लेट लोड करना एक वेब पेज में एक छवि को एम्बेड करने जैसा है। एप्लेट पृष्ठ का हिस्सा बन जाता है, और पाठ उस स्थान के चारों ओर लपेटता है जिस पर वह कब्जा करता है। हालाँकि, अंतर यह है कि छवि अब जीवित है। यह उपयोगकर्ता के आदेशों का जवाब देता है, इसे बदलता है दिखावटऔर उस कंप्यूटर के बीच डेटा ट्रांसफर प्रदान करता है जिस पर एप्लेट देखा जाता है और कंप्यूटर जो एप्लेट को नियंत्रित करता है।
एक एप्लेट लोड करना एक वेब पेज में एक तस्वीर डालने जैसा है। एप्लेट पृष्ठ का हिस्सा बन जाता है, और पाठ उस स्थान के चारों ओर लपेटता है जिस पर वह कब्जा करता है। तथ्य यह है कि छवि "लाइव" है। यह उपयोगकर्ता के आदेशों का जवाब देता है, इसकी उपस्थिति बदलता है, और एप्लेट चलाने वाले कंप्यूटर और एप्लेट चलाने वाले कंप्यूटर के बीच डेटा स्थानांतरित करता है।
अंजीर पर। चित्र 1.1 एक गतिशील वेब पेज का एक अच्छा उदाहरण दिखाता है जो जटिल गणना करता है और अणुओं को खींचने के लिए एप्लेट का उपयोग करता है। अणु की संरचना को बेहतर ढंग से समझने के लिए, आप इसे घुमा सकते हैं या माउस का उपयोग करके ज़ूम इन कर सकते हैं। इस तरह के जोड़तोड़ को स्थिर वेब पेजों पर लागू नहीं किया जा सकता है, लेकिन एप्लेट्स इसे संभव बनाते हैं। (यह एप्लेट http://jmol.sourceforge.net पर पाया जा सकता है।)
चावल। 1.1. जेमोल एप्लेट
वेब पेज पर नए बटन और टेक्स्ट फ़ील्ड जोड़ने के लिए एप्लेट्स का उपयोग किया जा सकता है। हालांकि, ऐसे एप्लेट फोन लाइन पर लोड होने में धीमे होते हैं।
डायनेमिक HTML, HTML के रूपों (हाइपरटेक्स्ट मार्कअप लैंग्वेज), या जावास्क्रिप्ट जैसी स्क्रिप्टिंग भाषा के साथ बहुत कुछ किया जा सकता है। बेशक, पहले एप्लेट एनीमेशन के लिए डिजाइन किए गए थे: कताई ग्लोब, नृत्य कार्टून चरित्र, कलात्मक ग्रंथ, और इसी तरह। हालाँकि, उपरोक्त में से अधिकांश एनिमेटेड GIF भी बना सकते हैं, और डायनेमिक HTML स्क्रिप्टिंग के साथ संयुक्त रूप से एप्लेट्स की तुलना में बहुत अधिक है।
धीमी गति से डाउनलोड प्रक्रिया में ब्राउज़र की असंगति और असंगति के परिणामस्वरूप नेटवर्क कनेक्शनवेब पेजों के लिए डिज़ाइन किए गए एप्लेट कोई बड़ी उपलब्धि नहीं रहे हैं। स्थानीय नेटवर्क (इंट्रानेट) में स्थिति पूरी तरह से अलग है। उनके पास आमतौर पर बैंडविड्थ की समस्या नहीं होती है, इसलिए एप्लेट लोडिंग समय महत्वपूर्ण नहीं है। स्थानीय नेटवर्क पर, आप वांछित ब्राउज़र का चयन कर सकते हैं या जावा प्लग-इन का उपयोग कर सकते हैं। कर्मचारी नेटवर्क पर दिए गए प्रोग्राम को गलत स्थान पर नहीं ले जा सकते हैं या इसे गलत तरीके से स्थापित नहीं कर सकते हैं, और कार्यकारी प्रबंधकसभी क्लाइंट मशीनों को बायपास करने और उन पर प्रोग्राम अपडेट करने की आवश्यकता नहीं है। इन्वेंट्री प्रबंधन, अवकाश योजना, यात्रा प्रतिपूर्ति, और इसी तरह के कार्यक्रमों की एक बड़ी संख्या कई निगमों द्वारा ब्राउज़रों का उपयोग करके एप्लेट के रूप में विकसित की गई है।
जब हम इस पुस्तक को लिख रहे थे, तब पेंडुलम क्लाइंट-साइड प्रोग्रामिंग से सर्वर-साइड प्रोग्रामिंग में वापस आ गया। विशेष रूप से, एप्लिकेशन सर्वर निगरानी क्षमताओं का उपयोग कर सकते हैं आभासी मशीनस्वचालित लोड संतुलन, डेटाबेस लिंक पूलिंग, ऑब्जेक्ट सिंक्रोनाइज़ेशन, सुरक्षित शटडाउन और पुनः लोड करने के लिए जावा, और स्केलेबल सर्वर अनुप्रयोगों के लिए आवश्यक अन्य प्रक्रियाएं जिन्हें सही ढंग से लागू करना लगभग असंभव है। इस प्रकार, एप्लिकेशन बनाने वाले प्रोग्रामर के पास इन जटिल तंत्रों को स्वयं विकसित करने के बजाय, खरीदने का अवसर होता है। इससे प्रोग्रामर की उत्पादकता में वृद्धि हुई - उन्होंने अपने कार्यक्रमों के तर्क पर ध्यान केंद्रित किया, सर्वर के संचालन से जुड़े विवरणों से विचलित नहीं हुए।
जावा सन माइक्रोसिस्टम्स की एक प्रोग्रामिंग भाषा है। मूल रूप से एक प्रोग्रामिंग भाषा के रूप में विकसित किया गया इलेक्ट्रॉनिक उपकरणों, लेकिन बाद में सर्वर सॉफ्टवेयर एप्लिकेशन लिखने के लिए उपयोग किया जाने लगा। जावा प्रोग्राम क्रॉस-प्लेटफॉर्म हैं, यानी वे किसी भी ऑपरेटिंग सिस्टम पर चल सकते हैं।
जावा प्रोग्रामिंग की मूल बातें
जावा, एक वस्तु-उन्मुख भाषा के रूप में, OOP के मूल सिद्धांतों का पालन करता है:
- विरासत;
- बहुरूपता;
- एनकैप्सुलेशन।
"जावा" के केंद्र में, अन्य ओओपी की तरह, एक वस्तु और एक वर्ग होता है जिसमें कंस्ट्रक्टर और गुण होते हैं। जावा प्रोग्रामिंग भाषा सीखना आधिकारिक संसाधनों से नहीं, बल्कि शुरुआती लोगों के लिए मैनुअल से सीखना बेहतर है। ऐसे मैनुअल में, सुविधाओं का विस्तार से वर्णन किया गया है, कोड उदाहरण दिए गए हैं। द जावा प्रोग्रामिंग लैंग्वेज फॉर बिगिनर्स जैसी पुस्तकें नामित भाषा के मूल सिद्धांतों और विशेषताओं के बारे में विस्तार से बताती हैं।
peculiarities
जावा प्रोग्रामिंग भाषा में कोड को बाइटकोड में अनुवादित किया जाता है और फिर JVM वर्चुअल मशीन पर निष्पादित किया जाता है। बाइटकोड में रूपांतरण जावैक, जेक्स, एस्प्रेसो, जीसीजे में किया जाता है। ऐसे कंपाइलर हैं जो सी भाषा को जावा बाइटकोड में अनुवादित करते हैं। इस प्रकार, एक सी एप्लिकेशन किसी भी प्लेटफॉर्म पर चल सकता है।
"जावा" सिंटैक्स की विशेषता निम्नलिखित है:
- कक्षा के नाम बड़े अक्षर से शुरू होने चाहिए। यदि नाम में कई शब्द हैं, तो दूसरे को अपर केस से शुरू करना चाहिए।
- यदि विधि बनाने के लिए कई शब्दों का उपयोग किया जाता है, तो उनमें से दूसरा एक बड़े अक्षर से शुरू होना चाहिए।
- प्रसंस्करण मुख्य () विधि से शुरू होता है - यह हर कार्यक्रम का हिस्सा है।
प्रकार
जावा प्रोग्रामिंग भाषा में 8 आदिम प्रकार हैं। उन्हें नीचे प्रस्तुत किया गया है।
- बूलियन एक बूलियन प्रकार है जो केवल दो मान सही और गलत लेता है।
- बाइट सबसे छोटा पूर्णांक प्रकार है जिसका आकार 1 बाइट है। इसका उपयोग फाइलों या कच्चे बाइनरी डेटा के साथ काम करते समय किया जाता है। -128 से 127 की सीमा है।
- शॉर्ट में -32768 से 32767 की सीमा होती है और इसका उपयोग संख्याओं का प्रतिनिधित्व करने के लिए किया जाता है। इस प्रकार के चरों का आकार 2 बाइट्स होता है।
- Int भी संख्या के लिए खड़ा है, लेकिन इसका आकार 4 बाइट्स है। यह अक्सर पूर्णांक डेटा के साथ काम करने के लिए उपयोग किया जाता है, और बाइट और शॉर्ट को कभी-कभी int में पदोन्नत किया जाता है।
- बड़े पूर्णांकों के लिए long का उपयोग किया जाता है। संभावित मान -9223372036854775808 से लेकर 9223372036854775807 तक हैं।
- भिन्नों को निरूपित करने के लिए फ्लोट और डबल का उपयोग किया जाता है। उनका अंतर यह है कि फ्लोट सुविधाजनक होता है जब संख्या के भिन्नात्मक भाग में उच्च परिशुद्धता की आवश्यकता नहीं होती है।
- सीमांकक "।" के बाद सभी वर्णों को डबल प्रदर्शित करता है, और फ्लोट - केवल पहला।
- स्ट्रिंग सबसे अधिक इस्तेमाल किया जाने वाला आदिम प्रकार है जिसके साथ स्ट्रिंग्स को परिभाषित किया जाता है।
कक्षाएं और वस्तुएं
शुरुआती के लिए जावा प्रोग्रामिंग भाषा सीखने में कक्षाएं और वस्तुएं महत्वपूर्ण भूमिका निभाती हैं।
एक वर्ग किसी वस्तु के लिए एक टेम्पलेट को परिभाषित करता है, इसमें विशेषताएँ और विधियाँ होनी चाहिए। इसे बनाने के लिए Class कीवर्ड का उपयोग करें। यदि इसे एक अलग फ़ाइल में बनाया गया है, तो वर्ग और फ़ाइल का नाम समान होना चाहिए। नाम में ही दो भाग होते हैं: नाम और विस्तार। जावा।
जावा में, आप एक उपवर्ग बना सकते हैं जो माता-पिता के तरीकों को इनहेरिट करेगा। इसके लिए विस्तार शब्द का प्रयोग किया जाता है:
- क्लास क्लासनाम सुपरक्लासनाम () बढ़ाता है;
एक कंस्ट्रक्टर किसी भी वर्ग का सदस्य होता है, भले ही वह स्पष्ट रूप से सेट न हो। इस मामले में, संकलक इसे स्वयं बनाता है:
- पब्लिक क्लास क्लास (पब्लिक क्लास () () पब्लिक क्लास (स्ट्रिंग नाम) ())
कंस्ट्रक्टर का नाम वर्ग के नाम के समान है, डिफ़ॉल्ट रूप से इसका केवल एक पैरामीटर है:
- सार्वजनिक पिल्ला (स्ट्रिंग नाम)
नए () ऑपरेटर का उपयोग करके एक वर्ग से एक वस्तु बनाई जाती है:
- बिंदु p = नया बिंदु ()
यह कक्षा की सभी विधियों और गुणों को प्राप्त करता है, जिसकी सहायता से यह अन्य वस्तुओं के साथ अंतःक्रिया करता है। विभिन्न चरों के अंतर्गत एक वस्तु का कई बार उपयोग किया जा सकता है।
- वर्गनाम चर
- स्थिर वर्गनाम आयात करें;
क्लास प्वाइंट (इंट एक्स, वाई;
शून्य init (int a, int b) (
- पॉइंट.इनिट ();
- इंट ए, बी, सी;
- स्थानीय चर (स्थानीय);
- आवृत्ति चर (उदाहरण चर);
- स्थिर चर (स्थिर)।
- संख्या - 0;
- तर्क - झूठा;
- संदर्भ शून्य हैं।
- अंतिम;
- निजी;
- जनता।
- ClassName.VariableName.
- मानक संस्करण।
- एंटरप्राइज़ संस्करण।
- सूक्ष्म संस्करण।
- कार्ड।
- एसई - मुख्य है, जो व्यापक रूप से व्यक्तिगत उपयोग के लिए कस्टम एप्लिकेशन बनाने के लिए उपयोग किया जाता है।
- ईई उद्यम सॉफ्टवेयर विकास के लिए विशिष्टताओं का एक समूह है। इसमें SE की तुलना में अधिक विशेषताएं हैं, इसलिए इसका उपयोग बड़े और मध्यम आकार के उद्यमों में व्यावसायिक स्तर पर किया जाता है।
- ME - सीमित शक्ति और मेमोरी वाले उपकरणों के लिए डिज़ाइन किया गया, उनके पास आमतौर पर एक छोटा प्रदर्शन आकार होता है। ऐसे उपकरण स्मार्टफोन और पीडीए, रिसीवर हैं डिजिटल टेलीविजन.
- कार्ड - अत्यंत सीमित कंप्यूटिंग संसाधनों वाले उपकरणों के लिए डिज़ाइन किया गया, जैसे स्मार्ट कार्ड, सिम कार्ड, एटीएम। इन उद्देश्यों के लिए, बाइटकोड, प्लेटफ़ॉर्म की आवश्यकताओं और पुस्तकालयों के घटकों को बदल दिया गया है।
- नेटबीन्स आईडीई।
- ग्रहण आईडीई।
- इंटेलीज आइडिया।
- जेडेवलपर।
- आईओएस के लिए जावा।
- गेनी।
बिंदु p = नया बिंदु ()
कक्षा दो बिंदु (
सार्वजनिक स्थैतिक शून्य main (String [] args) (
बिंदु p1 = नया बिंदु ();
बिंदु p2 = नया बिंदु ();
वस्तु चर और वस्तुएं पूरी तरह से अलग संस्थाएं हैं। वस्तु चर लिंक हैं। वे गैर-आदिम प्रकार के किसी भी चर को इंगित कर सकते हैं। सी ++ के विपरीत, उनके प्रकार के रूपांतरण को कड़ाई से विनियमित किया जाता है।
फ़ील्ड और तरीके
फ़ील्ड एक वर्ग या वस्तु से जुड़े सभी चर हैं। वे डिफ़ॉल्ट रूप से स्थानीय होते हैं और अन्य वर्गों में उपयोग नहीं किए जा सकते। "।" ऑपरेटर का उपयोग फ़ील्ड तक पहुँचने के लिए किया जाता है:
आप स्थिर कीवर्ड के साथ स्थिर फ़ील्ड निर्दिष्ट कर सकते हैं। ऐसे क्षेत्र वैश्विक चरों को संग्रहीत करने का एकमात्र तरीका हैं। यह इस तथ्य के कारण है कि जावा में कोई वैश्विक चर नहीं हैं।
अन्य पैकेजों से पहुँच प्राप्त करने के लिए चर आयात करने की क्षमता को लागू किया:
एक विधि उन वर्गों के लिए एक सबरूटीन है जिसमें इसे घोषित किया जाता है। चर के समान स्तर पर वर्णित है। एक फ़ंक्शन के रूप में निर्दिष्ट और शून्य सहित किसी भी प्रकार का हो सकता है:
ऊपर के उदाहरण में, प्वाइंट क्लास में एक पूर्णांक x और y, एक init () विधि है। "।" ऑपरेटर का उपयोग करके, चर की तरह ही तरीकों का उपयोग किया जाता है:
init संपत्ति कुछ भी वापस नहीं करती है, इसलिए यह शून्य प्रकार का है।
चर
जावा प्रोग्रामिंग भाषा ट्यूटोरियल में, चर एक अलग स्थान पर कब्जा कर लेते हैं। सभी चर का एक विशिष्ट प्रकार होता है, यह मूल्यों को संग्रहीत करने के लिए आवश्यक स्थान, संभावित मूल्यों की सीमा, संचालन की सूची निर्धारित करता है। मूल्यों में हेरफेर करने से पहले, चर घोषित किए जाते हैं।
एक ही समय में कई चर घोषित किए जा सकते हैं। उन्हें सूचीबद्ध करने के लिए अल्पविराम का उपयोग किया जाता है:
घोषणा के बाद या उसके दौरान आरंभीकरण किया जाता है:
इंट ए = 10, बी = 10;
कई प्रकार हैं:
स्थानीय चर विधियों और निर्माणकर्ताओं में घोषित किए जाते हैं, वे बाद के स्टार्टअप के दौरान बनाए जाते हैं और पूरा होने के बाद नष्ट हो जाते हैं। उनके लिए, एक्सेस संशोधक निर्दिष्ट करना और एक्सेसिबिलिटी के स्तर को नियंत्रित करना मना है। वे घोषित ब्लॉक के बाहर दिखाई नहीं दे रहे हैं। जावा में, वेरिएबल्स का प्रारंभिक मान नहीं होता है, इसलिए पहले उपयोग से पहले एक को असाइन करना अनिवार्य है।
इंस्टेंस वेरिएबल को कक्षा के अंदर घोषित किया जाना चाहिए। उनका उपयोग विधियों के रूप में किया जाता है, लेकिन ऑब्जेक्ट बनने के बाद ही उन्हें एक्सेस किया जा सकता है। वस्तु के नष्ट होने पर चर नष्ट हो जाता है। इंस्टेंस वेरिएबल, स्थानीय वैरिएबल के विपरीत, डिफ़ॉल्ट मान होते हैं:
स्थैतिक चर वर्ग चर कहलाते हैं। उनके नाम एक बड़े अक्षर से शुरू होते हैं और स्थिर संशोधक के साथ निर्दिष्ट होते हैं। उन्हें क्रमशः स्थिरांक के रूप में उपयोग किया जाता है, सूची से एक विनिर्देशक उनके साथ जोड़ा जाता है:
प्रोग्राम की शुरुआत में चलाएं, निष्पादन रुकने के बाद नष्ट हो गया। इंस्टेंस वेरिएबल्स की तरह, उनके पास डिफ़ॉल्ट मान होते हैं जो खाली वेरिएबल्स को असाइन किए जाते हैं। संख्याओं का मान 0 है, बूलियन का मान गलत है, ऑब्जेक्ट संदर्भ प्रारंभ में शून्य हैं। स्थैतिक चर को निम्न रूप में कहा जाता है:
मल जमा करना
शुरुआती ट्यूटोरियल के लिए जावा प्रोग्रामिंग भाषा में, स्वचालित कचरा संग्रहकर्ता अनुभाग सबसे दिलचस्प है।
जावा में, C भाषा के विपरीत, यह संभव नहीं है मैनुअल हटानेस्मृति से वस्तु। ऐसा करने के लिए, एक स्वचालित विलोपन विधि लागू की जाती है - कचरा संग्रहकर्ता। नल के माध्यम से पारंपरिक विलोपन के साथ, केवल वस्तु का संदर्भ हटा दिया जाता है, और वस्तु को ही हटा दिया जाता है। मजबूर कचरा संग्रहण के तरीके हैं, हालांकि उन्हें सामान्य उपयोग के लिए अनुशंसित नहीं किया जाता है।
अप्रयुक्त वस्तुओं को स्वचालित रूप से हटाने के लिए मॉड्यूल पृष्ठभूमि में चलता है और प्रोग्राम के निष्क्रिय होने पर शुरू होता है। स्मृति से वस्तुओं को साफ़ करने के लिए, प्रोग्राम बंद हो जाता है, स्मृति मुक्त होने के बाद, बाधित संचालन फिर से शुरू हो जाता है।
संशोधक
अंतर करना अलग - अलग प्रकारसंशोधक एक्सेस विधि निर्धारित करने वालों के अलावा, विधियों, चर और एक वर्ग के लिए संशोधक भी हैं। निजी के रूप में घोषित तरीके केवल घोषित वर्ग में उपलब्ध हैं। इस तरह के चर का उपयोग अन्य वर्गों और कार्यों में नहीं किया जा सकता है। जनता किसी भी वर्ग तक पहुंच प्रदान करती है। यदि आपको किसी अन्य पैकेज से सार्वजनिक वर्ग प्राप्त करने की आवश्यकता है, तो आपको पहले इसे आयात करना होगा।
संरक्षित संशोधक जनता की कार्रवाई के समान है - यह वर्ग क्षेत्रों तक पहुंच खोलता है। दोनों ही मामलों में, चर का उपयोग अन्य वर्गों में किया जा सकता है। लेकिन सार्वजनिक संशोधक बिल्कुल सभी के लिए उपलब्ध है, और संरक्षित संशोधक केवल विरासत में मिली कक्षाओं के लिए उपलब्ध है।
विधियों को बनाते समय लागू किया जाने वाला संशोधक स्थिर होता है। इसका मतलब है कि उत्पन्न विधि वर्ग के उदाहरणों से स्वतंत्र रूप से मौजूद है। अंतिम संशोधक पहुंच को नियंत्रित नहीं करता है, लेकिन वस्तु के मूल्यों के आगे हेरफेर की असंभवता को इंगित करता है। यह उस तत्व को बदलने पर रोक लगाता है जिसके लिए इसे निर्दिष्ट किया गया है।
फ़ील्ड के लिए फ़ाइनल चर के पहले मान को बदलना असंभव बनाता है:
सार्वजनिक स्थैतिक शून्य विधि (स्ट्रिंग आर्ग) (
अंतिम इंट नाम = 1;
int नाम = 2;// एक त्रुटि फेंक देगा
अंतिम संशोधक वाले चर स्थिरांक हैं। वे आमतौर पर बड़े अक्षरों में ही लिखे जाते हैं। CamelStyle और अन्य तरीके काम नहीं करते।
विधियों के लिए अंतिम एक विरासत वर्ग में एक विधि को बदलने पर रोक को इंगित करता है:
अंतिम शून्य myMethod () (
System.out.printIn ("हैलो वर्ल्ड");
कक्षाओं के लिए अंतिम का अर्थ है कि आप वर्ग वंशज नहीं बना सकते:
अंतिम सार्वजनिक वर्ग वर्ग(
सार - अमूर्त वर्ग बनाने के लिए संशोधक। किसी भी अमूर्त वर्ग और अमूर्त विधियों को अन्य वर्गों और ब्लॉकों में और विस्तारित करने का इरादा है। संशोधकक्षणिक वर्चुअल मशीन को दिए गए चर को संसाधित नहीं करने के लिए कहता है। इस मामले में, यह बस नहीं बचाएगा। उदाहरण के लिए, क्षणिक इंट नाम = 100 नहीं रहेगा, लेकिन इंट बी होगा।
प्लेटफार्म और संस्करण
मौजूदा जावा प्रोग्रामिंग भाषा परिवार:
आवेदन पत्र
जावा प्रोग्रामिंग भाषा में प्रोग्राम धीमे होते हैं और अधिक लेते हैं यादृच्छिक अभिगम स्मृति. जावा और सी भाषाओं के तुलनात्मक विश्लेषण से पता चला कि सी थोड़ा अधिक उत्पादक है। जावा वर्चुअल मशीन के कई बदलावों और अनुकूलन के बाद, इसने अपने प्रदर्शन में सुधार किया है।
Android के लिए अनुप्रयोगों के लिए सक्रिय रूप से उपयोग किया जाता है। कार्यक्रम को एक गैर-मानक बाइटकोड में संकलित किया गया है और एआरटी वर्चुअल मशीन पर निष्पादित किया गया है। संकलन के लिए Android Studio का उपयोग किया जाता है। Google का यह IDE आधिकारिक Android विकास IDE है।
माइक्रोसॉफ्ट ने जावा वर्चुअल मशीन एमएसजेवीएम का अपना कार्यान्वयन विकसित किया है। इसमें ऐसे अंतर थे जिन्होंने क्रॉस-प्लेटफ़ॉर्म की मौलिक अवधारणा को तोड़ दिया - कुछ तकनीकों और विधियों के लिए कोई समर्थन नहीं था, गैर-मानक एक्सटेंशन थे जो केवल विंडोज प्लेटफॉर्म पर काम करते थे। Microsoft ने J# भाषा जारी की, जिसका सिंटैक्स और समग्र संचालन जावा के समान है। यह आधिकारिक विनिर्देश के अनुरूप नहीं था और अंततः मानक Microsoft Visual Studio डेवलपर टूलकिट से हटा दिया गया था।
जावा प्रोग्रामिंग भाषा और पर्यावरण
सॉफ्टवेयर विकास निम्नलिखित आईडीई में किया जाता है:
JDK को Oracle द्वारा जावा डेवलपमेंट किट के रूप में वितरित किया जाता है। संकलक, मानक पुस्तकालय, उपयोगिताओं, कार्यकारी प्रणाली शामिल है। आधुनिक एकीकृत विकास वातावरण JDK पर निर्भर करता है।
नेटबीन्स और एक्लिप्स आईडीई में जावा प्रोग्रामिंग भाषा में कोड लिखना सुविधाजनक है। ये मुफ्त एकीकृत विकास वातावरण हैं, ये सभी जावा प्लेटफॉर्म के लिए उपयुक्त हैं। पायथन, पीएचपी, जावास्क्रिप्ट, सी ++ में प्रोग्रामिंग के लिए भी उपयोग किया जाता है।
Jetbrains से IntelliJ IDE दो संस्करणों में वितरित किया जाता है: मुफ़्त और व्यावसायिक। कई प्रोग्रामिंग भाषाओं में कोड लिखने का समर्थन करता है, डेवलपर्स से तीसरे पक्ष के प्लग-इन हैं जो और भी प्रोग्रामिंग भाषाओं को लागू करते हैं।
जेडी डेवलपर ओरेकल का एक और विकास है। पूरी तरह से जावा में लिखा गया है, इसलिए यह सभी ऑपरेटिंग सिस्टम पर काम करता है।
परिचय
यह काम आज की सबसे आशाजनक प्रोग्रामिंग भाषाओं में से एक - जावा भाषा को समर्पित है। अतिशयोक्ति के बिना "जावा" नामक तकनीक को सॉफ्टवेयर विकास उद्योग में क्रांतिकारी कहा जा सकता है।
छँटाई को अन्य प्रोग्रामिंग भाषाओं जैसे PHP, C++, आदि में लागू किया जा सकता है। यह जावा में बहुत अधिक लाभदायक है। विवरण नीचे चर्चा कर रहे हैं। नवीनता इस तथ्य में निहित है कि एक छँटाई कार्यक्रम पहले इस भाषा में और इस व्याख्या में लागू नहीं किया गया है।
कार्य को लागू करने के लिए, एक कार्यक्रम लिखने के लिए एक एल्गोरिथ्म प्रस्तावित किया गया था। इसके अलावा, यह एल्गोरिथम जावा में लागू किया गया था।
जावा प्रोग्रामिंग भाषा का विवरण
जावा की सामान्य विशेषताएं
जावा भाषा को सॉर्टर प्रोग्राम लिखने के लिए चुना गया था। जावा 1991 से सन माइक्रोसिस्टम्स द्वारा विकसित एक वस्तु-उन्मुख प्रोग्रामिंग भाषा है और आधिकारिक तौर पर 23 मई, 1995 को जारी की गई है। प्रारंभ में, नई प्रोग्रामिंग भाषा को ओक (जेम्स गोस्लिंग) कहा जाता था और इसे उपभोक्ता इलेक्ट्रॉनिक्स के लिए विकसित किया गया था, लेकिन बाद में इसका नाम बदलकर जावा कर दिया गया और एप्लेट, एप्लिकेशन और सर्वर सॉफ़्टवेयर लिखने के लिए इसका उपयोग किया जाने लगा।
जावा प्रोग्रामिंग भाषा अस्तित्व में किसी अन्य के विपरीत नहीं है। इसे ब्राउज़र के माध्यम से WWW में कंप्यूटर पर काम करना आसान बनाने के लिए डिज़ाइन किया गया है। आजकल हर कंप्यूटर में एक ब्राउज़र होता है। बदले में, प्रत्येक ब्राउज़र जावा का समर्थन करता है। इसका मतलब है कि आप दुनिया भर में संग्रहीत दस्तावेजों को देख सकते हैं और एक लिंक पर क्लिक करके एक जावा प्रोग्राम को सक्रिय कर सकते हैं जिसे नेटवर्क पर स्थानांतरित किया जाएगा और आपके कंप्यूटर पर चलाया जाएगा।
जावा भाषा के मुख्य लाभों में से एक प्लेटफॉर्म और कंप्यूटर के प्रकार से इसकी स्वतंत्रता है जिस पर प्रोग्राम चल रहे हैं। इस प्रकार, एक ही कोड ऑपरेटिंग सिस्टम विंडोज, लिनक्स, फ्रीबीएसडी, सोलारिस, ऐप्पल मैक, आदि के तहत चलाया जा सकता है। यह बहुत महत्वपूर्ण हो जाता है जब प्रोग्राम वैश्विक इंटरनेट के माध्यम से डाउनलोड किए जाते हैं और विभिन्न प्लेटफार्मों पर उपयोग किए जाते हैं। जावा प्रोग्रामिंग भाषा न केवल स्थिर ग्रंथों और ग्राफिक्स के साथ, बल्कि विभिन्न गतिशील वस्तुओं के साथ भी काम कर सकती है।
जावा का एक और समान रूप से महत्वपूर्ण लाभ सी ++ प्रोग्रामिंग भाषा के साथ इसकी महान समानता है। इसलिए, उन प्रोग्रामर के लिए जो सी और सी ++ के सिंटैक्स से परिचित हैं, जावा सीखना आसान होगा।
इसके अलावा, जावा पूरी तरह से वस्तु-उन्मुख भाषा है, यहां तक कि सी ++ से भी ज्यादा। जावा भाषा में सभी इकाइयाँ वस्तुएँ हैं, कुछ आदिम प्रकारों के अपवाद के साथ, जैसे कि संख्याएँ।
यह भी महत्वपूर्ण है कि जावा में प्रोग्राम विकसित करना बहुत आसान है जिसमें सी ++ की तुलना में त्रुटियां नहीं हैं।
बात यह है कि सन कंपनी से जावा भाषा के डेवलपर्स ने सी ++ भाषा में कार्यक्रमों का मौलिक विश्लेषण किया। स्रोत कोड की "अड़चनों" का विश्लेषण किया गया, जिससे पता लगाने में कठिन त्रुटियां सामने आईं। इसलिए, जावा भाषा को प्रोग्राम बनाने की क्षमता के साथ डिजाइन करने का निर्णय लिया गया था जो सबसे आम त्रुटियों को छिपाएगा।
इसके लिए निम्नलिखित किया गया:
डेवलपर्स ने स्मृति को स्पष्ट रूप से आवंटित करने और मुक्त करने की संभावना को समाप्त कर दिया है।
उदाहरण के लिए, जावा में मेमोरी कचरा संग्रह के माध्यम से स्वचालित रूप से मुक्त हो जाती है। यह पता चला है कि प्रोग्रामर को स्मृति के अनुचित उपयोग से उत्पन्न होने वाली त्रुटियों के खिलाफ बीमा किया जाता है।
सच्चे सरणियों का परिचय और संकेत का निषेध।
पॉइंटर्स के गलत उपयोग के कारण अब प्रोग्रामर मेमोरी से डेटा मिटा नहीं सकते हैं।
समानता के लिए तुलना ऑपरेटर के साथ असाइनमेंट ऑपरेटर को भ्रमित करने की संभावना को बाहर रखा गया था। एक नियम के रूप में, "=" संकेत के साथ समस्या अक्सर सी और सी ++ में तार्किक त्रुटियों की ओर ले जाती है, जिनका पता लगाना इतना आसान नहीं है। खासकर बड़े कार्यक्रमों में।
एकाधिक विरासत पूरी तरह से बाहर रखा गया है। इसे एक नई अवधारणा से बदल दिया गया है - एक इंटरफ़ेस, जिसका विचार उद्देश्य सी भाषा से उधार लिया गया था।
एक इंटरफ़ेस प्रोग्रामर को लगभग वह सब कुछ देता है जो एक प्रोग्रामर कई विरासत से प्राप्त कर सकता है, जबकि प्रबंधन वर्ग पदानुक्रम के साथ आने वाली जटिलताओं से बचता है।
नवीनतम रिलीज़ संस्करण 1.6 है, जिसने सुरक्षा में सुधार किया है, मोज़िला राइनो स्क्रिप्टिंग भाषा के लिए बेहतर समर्थन, बेहतर डेस्कटॉप एकीकरण, और ग्राफिकल इंटरफेस बनाने में कुछ नई सुविधाएँ जोड़ी हैं।
जावा और माइक्रोसॉफ्ट
निम्नलिखित कंपनियां मुख्य रूप से .NET के बजाय जावा (J2EE) प्रौद्योगिकियों पर ध्यान केंद्रित करती हैं, हालांकि वे बाद वाले के साथ भी काम करती हैं: IBM, Oracle। विशेष रूप से, Oracle DBMS में इसके घटक के रूप में एक JVM शामिल होता है, जो जावा भाषा में DBMS को सीधे प्रोग्राम करने की क्षमता प्रदान करता है, उदाहरण के लिए, संग्रहीत कार्यविधियाँ।
प्रमुख विशेषताऐं
कार्यक्रम उदाहरण
प्रोग्राम जो "हैलो, वर्ल्ड!" प्रिंट करता है:
सार्वजनिक वर्ग हैलोवर्ल्ड (सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग आर्ग) (सिस्टम। आउट। प्रिंट्लन ("हैलो, वर्ल्ड!");))
टेम्प्लेट का उपयोग करने का एक उदाहरण:
आयात java.util.*; सार्वजनिक वर्ग नमूना (सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग तर्क) ( // टेम्प्लेट से ऑब्जेक्ट बनाएं।सूची
प्रमुख विचार
आदिम प्रकार
जावा भाषा में केवल 8 स्केलर प्रकार हैं: बूलियन, बाइट, चार, शॉर्ट, इंट, लॉन्ग, फ्लोट, डबल।
आदिम प्रकारों के लिए आवरण वर्ग
आदिम प्रकारों की लंबाई और मूल्य श्रेणियां मानक द्वारा परिभाषित की जाती हैं, और कार्यान्वयन नहीं और तालिका में दिए गए हैं। स्थानीयकरण सुविधा (जावा के वैचारिक सिद्धांतों में से एक) के लिए चार प्रकार को दो-बाइट बनाया गया था: जब मानक बनाया गया था, यूनिकोड -16 पहले से मौजूद था, लेकिन यूनिकोड -32 नहीं। चूंकि परिणाम में कोई एकल-बाइट प्रकार नहीं बचा था, इसलिए एक नया बाइट प्रकार जोड़ा गया था। प्रकार फ़्लोट और डबल में विशेष मान हो सकते हैं और "संख्या नहीं" हैं (
के प्रकार | लंबाई (बाइट्स में) | रेंज या मूल्यों का सेट |
---|---|---|
बूलियन | अपरिभाषित | सही गलत |
बाइट | 1 | −128..127 |
चारो | 2 | 0..2 16 -1, या 0.65535 |
कम | 2 | −2 15 ..2 15 -1, या −32768..32767 |
पूर्णांक | 4 | −2 31 ..2 31 -1, या −2147483648..2147483647 |
लंबा | 8 | −2 63 ..2 63 -1, या लगभग −9.2 10 18 ..9.2 10 18 |
पानी पर तैरना | 4 | -(2-2 -23) 2 127 ..(2-2 -23) 2 127 , या लगभग −3.4 10 38 ..3.4 10 38 , साथ ही , , NaN |
दोहरा | 8 | -(2-2 -52) 2 1023 ..(2-2 -52) 2 1023 , या लगभग −1.8 10 308 ..1.8 10 308 , और साथ ही , NaN |
भाषा को मंच-स्वतंत्र बनाने के लिए ऐसा कठोर मानकीकरण आवश्यक था, जो जावा के लिए वैचारिक आवश्यकताओं में से एक है और इसकी सफलता के कारणों में से एक है। फिर भी, मंच स्वतंत्रता के साथ एक छोटी सी समस्या अभी भी बनी हुई है। कुछ प्रोसेसर परिणामों के मध्यवर्ती भंडारण के लिए 10-बाइट रजिस्टरों का उपयोग करते हैं या अन्य तरीकों से गणना की सटीकता में सुधार करते हैं। जावा को विभिन्न प्रणालियों के बीच जितना संभव हो सके इंटरऑपरेबल बनाने के लिए, प्रारंभिक संस्करणों में गणना की सटीकता में सुधार करने के किसी भी तरीके को प्रतिबंधित किया गया था। हालांकि, इसके परिणामस्वरूप धीमा प्रदर्शन हुआ। यह पता चला कि मंच की स्वतंत्रता के लिए कुछ लोगों को सटीकता में गिरावट की आवश्यकता है, खासकर अगर उन्हें कार्यक्रमों के काम को धीमा करके इसके लिए भुगतान करना पड़ता है। कई विरोधों के बाद, इस प्रतिबंध को हटा दिया गया था, लेकिन सटीक वृद्धि को अक्षम करने के लिए सख्त एफपी कीवर्ड जोड़ा गया था।
गणितीय संचालन में परिवर्तन
जावा भाषा के निम्नलिखित नियम हैं:
- यदि एक ऑपरेंड डबल टाइप का है, तो दूसरा भी टाइप डबल में बदल जाता है।
- अन्यथा, यदि एक ऑपरेंड फ्लोट प्रकार का है, तो दूसरा भी टाइप फ्लोट में परिवर्तित हो जाता है।
- अन्यथा, यदि एक ऑपरेंड लंबे प्रकार का है, तो दूसरा भी लंबे प्रकार में परिवर्तित हो जाता है।
- अन्यथा, दोनों ऑपरेंड को टाइप इंट में बदल दिया जाता है।
अंतिम नियम जावा को पुराने कार्यान्वयन और C++ से अलग करता है और कोड को सुरक्षित बनाता है। इसलिए, उदाहरण के लिए, जावा भाषा में, कोड निष्पादित करने के बाद
लघु x = 50 , y = 1000; इंट जेड = एक्स * वाई;
चर z को 50000 मान दिया गया है, न कि −15536, जैसा कि C और C++ के सबसे निराशाजनक रूप से पुराने कार्यान्वयन में है। संस्करण 7 के बाद से MS VC++ द्वारा संकलित प्रोग्राम में, साथ ही साथ कई अन्य आधुनिक कंपाइलर्स (gcc , Intel C++, Borland C++, Comeau, आदि) में, मान भी 50000 होगा।
ऑब्जेक्ट वेरिएबल, ऑब्जेक्ट, संदर्भ, और पॉइंटर्स
जावा भाषा में केवल गतिशील रूप से निर्मित वस्तुएं होती हैं। इसके अलावा, जावा में ऑब्जेक्ट टाइप वेरिएबल और ऑब्जेक्ट पूरी तरह से अलग इकाइयाँ हैं। ऑब्जेक्ट प्रकार चर संदर्भ हैं, जो कि गतिशील रूप से बनाई गई वस्तुओं के लिए निहित संकेत हैं। यह चर की घोषणा के वाक्य रचना द्वारा जोर दिया गया है। उदाहरण के लिए, जावा में आप नहीं लिख सकते हैं:
डबल ए[ 10 ] [ 20 ] ; फू बी (30);
डबल ए = नया डबल [ 10 ] [ 20 ] ; फू बी = नया फू (30);
असाइनमेंट के दौरान, सबरूटीन्स, और तुलनाओं को पास करना, ऑब्जेक्ट वेरिएबल्स पॉइंटर्स की तरह व्यवहार करते हैं, यानी ऑब्जेक्ट्स के पते असाइन किए जाते हैं, कॉपी किए जाते हैं और तुलना की जाती है। और जब किसी ऑब्जेक्ट वेरिएबल का उपयोग करके किसी ऑब्जेक्ट के डेटा फ़ील्ड्स या विधियों को एक्सेस करते हैं, तो कोई विशेष डीरेफरेंस ऑपरेशंस की आवश्यकता नहीं होती है - यह एक्सेस किया जाता है जैसे ऑब्जेक्ट वैरिएबल ऑब्जेक्ट ही था।
साधारण संख्यात्मक प्रकारों को छोड़कर, वस्तु चर किसी भी प्रकार के चर हैं। जावा में कोई स्पष्ट संकेत नहीं हैं। C, C++ और अन्य प्रोग्रामिंग भाषाओं में पॉइंटर्स के विपरीत, जावा में संदर्भ उनके उपयोग पर सख्त प्रतिबंधों के कारण अत्यधिक सुरक्षित हैं, विशेष रूप से:
- आप int या किसी अन्य आदिम प्रकार के ऑब्जेक्ट को पॉइंटर या संदर्भ में नहीं बदल सकते हैं, और इसके विपरीत।
- लिंक पर संचालन ++, -−, +, - या कोई अन्य अंकगणितीय संचालन करने के लिए मना किया गया है।
- संदर्भों के बीच प्रकार रूपांतरण को कड़ाई से विनियमित किया जाता है। सरणी संदर्भों के अपवाद के साथ, इसे केवल विरासत प्रकार और उसके वंशज के बीच संदर्भों को परिवर्तित करने की अनुमति है, और विरासत प्रकार से विरासत प्रकार में रूपांतरण को स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए और रनटाइम पर सार्थकता के लिए जांच की जानी चाहिए। सरणी संदर्भ रूपांतरणों की अनुमति केवल तभी दी जाती है जब उनके मूल प्रकारों के रूपांतरणों की अनुमति हो और कोई आयाम विरोध न हो।
- जावा में, कोई टेक-एड्रेस (&) या टेक-एट-एड्रेस (*) ऑपरेशन नहीं हैं। जावा में तारांकन का अर्थ है गुणा, बस इतना ही। एम्परसेंड (&) का अर्थ है "बिटवाइज़ और" (डबल एम्परसेंड "तार्किक और" है)।
जावा में इस तरह के विशेष रूप से शुरू किए गए प्रतिबंधों के कारण, भौतिक पते के स्तर पर प्रत्यक्ष स्मृति हेरफेर असंभव है (हालांकि ऐसे संदर्भ हैं जो कुछ भी नहीं इंगित करते हैं: ऐसे संदर्भ का मूल्य शून्य द्वारा दर्शाया गया है)।
डुप्लिकेट लिंक और क्लोनिंग
चूंकि ऑब्जेक्ट वेरिएबल संदर्भ चर हैं, असाइनमेंट ऑब्जेक्ट की प्रतिलिपि नहीं बनाता है। तो, अगर आप लिखते हैं
फू फू, बार; ... बार = फू;
फिर पता foo से bar में कॉपी हो जाएगा। यानी, फू और बार एक ही मेमोरी एरिया की ओर इशारा करेंगे, यानी एक ही ऑब्जेक्ट को; foo द्वारा संदर्भित वस्तु के क्षेत्रों को बदलने का प्रयास बार द्वारा संदर्भित वस्तु को बदल देगा, और इसके विपरीत। यदि आपको केवल एक और प्राप्त करने की आवश्यकता है प्रतिलिपिस्रोत ऑब्जेक्ट, या तो विधि (सदस्य फ़ंक्शन, C++ शब्दावली में) का उपयोग करें क्लोन() , जो ऑब्जेक्ट की एक प्रति बनाता है, या एक कॉपी कंस्ट्रक्टर।
क्लोन () विधि को क्लोन करने योग्य इंटरफ़ेस को लागू करने के लिए वर्ग की आवश्यकता होती है (इंटरफ़ेस के लिए नीचे देखें)। यदि कोई वर्ग क्लोन करने योग्य इंटरफ़ेस को लागू करता है, तो डिफ़ॉल्ट रूप से क्लोन () सभी क्षेत्रों की प्रतिलिपि बनाता है ( छोटी प्रति) यदि आप कॉपी करने के बजाय फ़ील्ड्स (साथ ही उनके फ़ील्ड, इत्यादि) को क्लोन करना चाहते हैं, तो आपको क्लोन () विधि को ओवरराइड करना होगा। क्लोन () विधि को परिभाषित करना और उसका उपयोग करना अक्सर एक तुच्छ कार्य नहीं होता है।
कचरा संग्रहण
जावा भाषा में, किसी वस्तु को स्मृति से स्पष्ट रूप से हटाना संभव नहीं है - इसके बजाय कचरा संग्रह लागू किया जाता है। कचरा संग्रहकर्ता को स्मृति को हटाने के लिए "संकेत" देने की पारंपरिक चाल एक चर को शून्य पर सेट करना है। हालांकि, इसका मतलब यह नहीं है कि वस्तु को बदल दिया गया है शून्य, निश्चित रूप से और तुरंत हटा दिया जाएगा। यह तकनीक केवल ऑब्जेक्ट के रेफरेंस को हटाती है, यानी मेमोरी में ऑब्जेक्ट से पॉइंटर को अनबाइंड कर देती है। इस मामले में, यह ध्यान में रखा जाना चाहिए कि कचरा संग्रहकर्ता द्वारा वस्तु को तब तक हटाया नहीं जाएगा जब तक कि प्रयुक्त चर या वस्तुओं से कम से कम एक संदर्भ इसे इंगित करता है। मजबूर कचरा संग्रह शुरू करने के तरीके भी हैं, लेकिन उन्हें रनटाइम द्वारा बुलाए जाने की गारंटी नहीं है और सामान्य उपयोग के लिए अनुशंसित नहीं हैं।
कक्षाएं और कार्य
जावा एक प्रक्रियात्मक भाषा नहीं है: कोई भी फ़ंक्शन केवल एक वर्ग के भीतर ही मौजूद हो सकता है। यह जावा भाषा की शब्दावली द्वारा बल दिया गया है, जहां "फ़ंक्शन" या "सदस्य फ़ंक्शन" (इंजी। सदस्य समारोह), लेकिन सिर्फ तरीका. मानक कार्य भी तरीके बन गए हैं। उदाहरण के लिए, जावा में कोई sin() फ़ंक्शन नहीं है, लेकिन गणित वर्ग की एक Math.sin() विधि है (जिसमें sin() , cos() , exp() , sqrt() के अतिरिक्त शामिल है। , abs() और कई अन्य तरीके)।
स्थिर तरीके और क्षेत्र
हर बार जब आपको पाप () (और इसी तरह के अन्य कार्यों) को कॉल करने की आवश्यकता होती है, तो गणित वर्ग (और अन्य समान वर्गों) की वस्तु नहीं बनाने के लिए, अवधारणा स्थिर तरीके(अंग्रेज़ी) स्थिर विधि; कभी-कभी रूसी में उन्हें स्थिर कहा जाता है)। एक स्थिर विधि (विवरण में स्थिर कीवर्ड के साथ चिह्नित) को उसकी कक्षा का ऑब्जेक्ट बनाए बिना कहा जा सकता है। इसलिए, कोई लिख सकता है
दोहरा x = गणित .sin(1) ;
गणित एम = नया गणित (); डबल x = m.sin(1) ;
स्थैतिक विधियों पर प्रतिबंध यह है कि वे इस वस्तु में केवल स्थिर क्षेत्रों और विधियों तक पहुँच सकते हैं।
स्टेटिक फ़ील्ड का वही अर्थ है जो सी ++ में है: प्रत्येक का केवल एक उदाहरण है।
अन्तिम स्थिति
चर, विधि या वर्ग का वर्णन करते समय अंतिम कीवर्ड का अर्थ अलग-अलग होता है। अंतिम चर (स्थिर नाम दिया गया) को घोषित होने पर प्रारंभ किया जाता है और इसे आगे नहीं बदला जा सकता है। अंतिम विधि को वंशानुक्रम द्वारा ओवरराइड नहीं किया जा सकता है। अंतिम वर्ग के वारिस बिल्कुल नहीं हो सकते।
मतिहीनता
जावा में, जिन विधियों को स्पष्ट रूप से अंतिम या निजी घोषित नहीं किया गया है, वे C++ शब्दावली में आभासी हैं: एक ऐसी विधि को कॉल करना जिसे आधार में अलग-अलग परिभाषित किया गया है और इनहेरिटिंग क्लास में हमेशा एक रनटाइम चेक होता है।
जावा में एब्सट्रैक्ट मेथड (एब्सट्रैक्ट डिस्क्रिप्टर) एक ऐसी विधि है जिसके लिए पैरामीटर और रिटर्न टाइप निर्दिष्ट हैं, लेकिन बॉडी नहीं। व्युत्पन्न कक्षाओं में एक अमूर्त विधि परिभाषित की गई है। सी ++ में, एक ही चीज़ को शुद्ध वर्चुअल फ़ंक्शन कहा जाता है। एक वर्ग के लिए अमूर्त विधियों का वर्णन करने में सक्षम होने के लिए, कक्षा को भी सार घोषित किया जाना चाहिए। सार वर्ग की वस्तुओं को नहीं बनाया जा सकता है।
इंटरफेस
जावा में अमूर्तता की उच्चतम डिग्री इंटरफ़ेस है। सभी इंटरफ़ेस विधियाँ सार हैं: सार विवरणक की भी आवश्यकता नहीं है। एक इंटरफ़ेस एक वर्ग नहीं है। एक वर्ग विरासत में मिल सकता है, या विस्तार(विस्तार) एक और वर्ग, या अमल में लाना(कार्यान्वयन) इंटरफ़ेस। इसके अलावा, एक इंटरफ़ेस दूसरे इंटरफ़ेस से इनहेरिट कर सकता है या उसका विस्तार कर सकता है।
जावा में एक वर्ग एक से अधिक वर्गों का वारिस नहीं कर सकता, लेकिन यह किसी भी संख्या में इंटरफेस को लागू कर सकता है।
इंटरफेस को पैरामीटर के रूप में विधियों में पारित किया जा सकता है, लेकिन उनके प्रकार की वस्तुओं को नहीं बनाया जा सकता है।
मार्कर इंटरफेस
जावा में कुछ इंटरफेस हैं जिनमें लागू करने के तरीके नहीं हैं, लेकिन जेवीएम द्वारा एक विशेष तरीके से नियंत्रित किया जाता है। ये इंटरफेस हैं:
- java.lang.क्लोनेबल
- java.io.Serializable
- java.rmi.Remote
जावा में टेम्पलेट्स (जेनेरिक)
जावा 5 से शुरू होकर, भाषा में एक सामान्य प्रोग्रामिंग तंत्र है - टेम्प्लेट जो बाहरी रूप से C ++ टेम्प्लेट के करीब हैं। वर्गों और विधियों के विवरण में एक विशेष सिंटैक्स का उपयोग करके, आप उन प्रकार के मापदंडों को निर्दिष्ट कर सकते हैं जिनका उपयोग विवरण के अंदर फ़ील्ड के प्रकार, मापदंडों और विधियों के वापसी मूल्यों के रूप में किया जा सकता है।
// सामान्य वर्ग की घोषणाक्लास जेनेरिकक्लास
कक्षाओं, इंटरफेस और विधियों की सामान्य घोषणा की अनुमति है। इसके अलावा, सिंटैक्स पैरामीटर प्रकारों की सीमित घोषणाओं का समर्थन करता है: फॉर्म के निर्माण की घोषणा में एक संकेत
C# टेम्प्लेट के विपरीत, जावा टेम्प्लेट रनटाइम द्वारा समर्थित नहीं होते हैं - कंपाइलर केवल बाइटकोड बनाता है जिसमें कोई टेम्प्लेट नहीं होता है। जावा में टेम्प्लेट का कार्यान्वयन C ++ में समान तंत्र के कार्यान्वयन से मौलिक रूप से भिन्न है: कंपाइलर टेम्प्लेट का उपयोग करने के प्रत्येक मामले के लिए एक वर्ग या टेम्प्लेट विधि का एक अलग संस्करण उत्पन्न नहीं करता है, लेकिन केवल एक एकल बाइटकोड कार्यान्वयन बनाता है जिसमें आवश्यक प्रकार की जाँच और रूपांतरण। इससे जावा प्रोग्राम में टेम्प्लेट के उपयोग पर कई प्रतिबंध लग जाते हैं।
कक्षा सदस्यता जाँच
जावा में, आप स्पष्ट रूप से जांच सकते हैं कि कोई वस्तु किस वर्ग से संबंधित है। अभिव्यक्ति फू उदाहरण फू सच है यदि वस्तु फू वर्ग फू या उसके वंशज से संबंधित है, या फू इंटरफ़ेस को लागू करता है (या, अधिक आम तौर पर, एक वर्ग को विरासत में लेता है जो फू को विरासत में मिला है)।
इसके बाद, सभी ऑब्जेक्ट्स के लिए परिभाषित getClass() फ़ंक्शन Class प्रकार का ऑब्जेक्ट देता है। इन वस्तुओं की तुलना की जा सकती है। इसलिए, उदाहरण के लिए, foo.getClass()==bar.getClass() सही होगा यदि ऑब्जेक्ट foo और bar बिल्कुल एक ही वर्ग के हैं (लेकिन इसका मतलब यह नहीं है कि वे दो समान ऑब्जेक्ट हैं)।
इसके अलावा, किसी भी प्रकार की क्लास का ऑब्जेक्ट इस तरह प्राप्त किया जा सकता है: Integer.class , Object.class ।
हालांकि, कक्षाओं की सीधी तुलना हमेशा कक्षा सदस्यता की जाँच का सबसे अच्छा साधन नहीं होती है। अक्सर, इसके बजाय isAssignableFrom() फ़ंक्शन का उपयोग किया जाता है। यह फ़ंक्शन क्लास प्रकार के ऑब्जेक्ट पर परिभाषित किया गया है और पैरामीटर के रूप में क्लास प्रकार का ऑब्जेक्ट लेता है। इस प्रकार, Foo.class.isAssignableFrom(Bar.class) को कॉल करना सही होगा यदि फू बार वर्ग का पूर्वज है। चूंकि सभी ऑब्जेक्ट ऑब्जेक्ट प्रकार के वंशज हैं, इसलिए Object.class.isAssignableFrom() को कॉल करना हमेशा true होगा। क्लास के ऑब्जेक्ट के उल्लिखित कार्यों के साथ, फ़ंक्शन isInstance () (उदाहरण के बराबर) और कास्ट () (एक पैरामीटर को चयनित वर्ग के ऑब्जेक्ट में कनवर्ट करता है) का भी उपयोग किया जाता है।
कक्षा पुस्तकालय
सॉफ्टवेयर विकास उपकरण
- JDK - जावा एसई और जावा ईई प्लेटफार्मों के लिए पुस्तकालयों के एक सेट के अलावा, इसमें एक कंपाइलर होता है कमांड लाइन javac और उपयोगिताओं का एक सेट जो कमांड लाइन मोड में भी काम करता है।
- नेटबीन्स आईडीई सभी जावा प्लेटफॉर्म - जावा एमई, जावा एसई और जावा ईई के लिए एक मुफ्त आईडीई है। जावा और अन्य भाषाओं (, सी ++, फोरट्रान, आदि) में सॉफ्टवेयर विकास के लिए आधार रेखा के रूप में जावा के डेवलपर सन माइक्रोसिस्टम्स द्वारा प्रचारित।
- जावा एसई और जावा ईई। एक्लिप्स में जावा एमई प्लेटफॉर्म को सपोर्ट करने के लिए काम चल रहा है। सी, सी ++, फोरट्रान, आदि को बढ़ावा दिया जाता है।)
- IntelliJ IDEA Java SE, Java EE और Java ME प्लेटफॉर्म के लिए एक व्यावसायिक विकास वातावरण है।
टिप्पणियाँ
- जावा (अंग्रेजी)। मरियम-वेबस्टर ऑनलाइन शब्दकोश. मेरिएम वेबस्टर। - "जावा" शब्द का अंग्रेजी उच्चारण। 5 जून 2009 को लिया गया।
- रॉबर्ट टॉल्क्सडॉर्फ।जावा वर्चुअल मशीन जेवीएम के लिए प्रोग्रामिंग भाषाएं। अनुसंधान जीएमबीएच है। - JVM के लिए वैकल्पिक भाषाओं और भाषा एक्सटेंशन की ऑनलाइन सूची। 5 जून 2009 को लिया गया।
- माइक्रोसॉफ्ट जावा वर्चुअल मशीन सपोर्ट। माइक्रोसॉफ्ट (2003-09-12)। - MSJVM सपोर्ट प्रोग्राम के बारे में Microsoft का आधिकारिक बयान। 5 जून 2009 को लिया गया।
- टॉड हॉफअमेज़ॅन आर्किटेक्चर (अंग्रेज़ी) (2007-09-18)। - जावा प्रौद्योगिकियों का उपयोग करते हुए अमेज़ॅन वास्तुकला की चर्चा। 6 जून 2009 को लिया गया।
- अमेज़ॅन इलास्टिक कंप्यूट क्लाउड (अमेज़ॅन ईसी 2)। अमेज़ॅन वेब सर्विसेज एलएलसी। - एक वेब सेवा के रूप में Amazon EC2 की तकनीक और क्षमताओं का विवरण। 6 जून 2009 को लिया गया।
- टॉड हॉफईबे आर्किटेक्चर (अंग्रेज़ी) (2008-05-27)। - जावा प्लेटफॉर्म पर ईबे के आर्किटेक्चर की चर्चा। 6 जून 2009 को लिया गया।
- रैंडी शौप, डैन प्रिटचेटईबे आर्किटेक्चर (अंग्रेजी) (पीडीएफ)। एसडी फोरम 2006(2006-11-29)। - ईबे वास्तुकला विकास के इतिहास पर प्रस्तुति। 6 जून 2009 को लिया गया।
- एलन स्टर्नयांडेक्स सीटीओ इल्या सेगलोविच (अंग्रेजी) के साथ विशेष साक्षात्कार। केंद्र नेटवर्क (2008-01-14)। - यांडेक्स सीटीओ इल्या सेगलोविच के साथ साक्षात्कार। 6 जून 2009 को लिया गया।
- अनातोली ओर्लोव Yandex.Search आर्किटेक्चर (रूसी) (PowerPoint)। येकातेरिनबर्ग में JUG बैठक की सामग्री(2008-05-24)। 6 जून 2009 को लिया गया।
- ब्रायन गुआनालिंक्डइन ब्लॉग। ब्लॉग आर्काइव। लिंक्डइन पर ग्रेल्स। (अंग्रेज़ी) । लिंक्डइन.कॉम (2008-06-11)। - Grails Java तकनीक पर आधारित लिंक्डइन सिस्टम के निर्माण का इतिहास। 5 जून 2009 को लिया गया।
- OracleJVM और जावा संग्रहीत कार्यविधियाँ। Oracle Inc.. - Oracle DBMS सर्वर के हिस्से के रूप में Java तकनीकों को समर्पित Oracle पोर्टल का एक भाग। 5 जून 2009 को लिया गया।
- Object.clone() विधि के लिए दस्तावेज़ीकरण से लिंक करें
साहित्य
- मोनाखोव वादिमजावा प्रोग्रामिंग लैंग्वेज और नेटबीन्स एनवायरनमेंट, दूसरा संस्करण। - सेंट पीटर्सबर्ग .: "बीएचवी-पीटर्सबर्ग", 2009. - एस. 720. - आईएसबीएन 978-5-9775-0424-9
- जोशुआ बलोच।जावा। प्रभावी प्रोग्रामिंग = प्रभावी जावा। - एम।: "लोरी", 2002। - एस। 224. - आईएसबीएन 5-85582-169-2
- जावा 2. प्रोफेशनल की लाइब्रेरी, वॉल्यूम 1. फंडामेंटल्स = कोर जावा™ 2, वॉल्यूम I--फंडामेंटल्स। - 7 वां संस्करण। - एम।: "विलियम्स", 2007. - एस। 896. - आईएसबीएन 0-13-148202-5
- के एस होर्स्टमैन, गैरी कॉर्नेल।जावा 2. प्रोफेशनल की लाइब्रेरी, वॉल्यूम 2. प्रोग्रामिंग टिप्स = कोर जावा™ 2, वॉल्यूम II--उन्नत सुविधाएं। - 7 वां संस्करण। - एम।: "विलियम्स", 2007. - एस 1168. - आईएसबीएन 0-13-111826-9
- ब्रूस एकेल।जावा फिलॉसफी = जावा में सोच। - तीसरा संस्करण। - सेंट पीटर्सबर्ग: "पिटर", 2003. - एस। 976. - आईएसबीएन 5-88782-105-1
- हर्बर्ट शिल्ड्ट, जेम्स होम्स।जावा प्रोग्रामिंग की कला = जावा की कला। - एम।: "डायलेक्टिक्स", 2005। - एस। 336. - आईएसबीएन 0-07-222971-3
- लुबोस ब्रुगा।क्विक जावा: प्रैक्टिकल एक्सप्रेस कोर्स = लुबो बृहा। Java Hotová ešení.. - M .: विज्ञान और प्रौद्योगिकी, 2006. - S. 369. - ISBN 5-94387-282-5
जावा सनमाइक्रोसिस्टम्स द्वारा विकसित एक प्रोग्रामिंग भाषा है। जावा अनुप्रयोगों को आमतौर पर विशेष बायटेकोड में संकलित किया जाता है, इसलिए वे कंप्यूटर आर्किटेक्चर की परवाह किए बिना किसी भी जावा वर्चुअल मशीन (JVM) पर चल सकते हैं। आधिकारिक रिलीज की तारीख 23 मई, 1995 है। आज, जावा तकनीक स्थिर वेब पेजों को इंटरैक्टिव, गतिशील दस्तावेज़ों में बदलने और वितरित, प्लेटफ़ॉर्म-स्वतंत्र एप्लिकेशन बनाने का साधन प्रदान करती है।
जावा प्रोग्राम को बाइटकोड में अनुवादित किया जाता है, जिसे जावा वर्चुअल मशीन (JVM) द्वारा निष्पादित किया जाता है, एक प्रोग्राम जो बाइट कोड को प्रोसेस करता है और एक दुभाषिया के रूप में हार्डवेयर को निर्देश देता है।
कार्यक्रमों को क्रियान्वित करने के इस तरीके का लाभ बायटेकोड की पूर्ण स्वतंत्रता में है ऑपरेटिंग सिस्टमऔर हार्डवेयर, जो आपको किसी भी डिवाइस पर जावा एप्लिकेशन चलाने की अनुमति देता है जिसके लिए संबंधित वर्चुअल मशीन मौजूद है। दूसरा महत्वपूर्ण विशेषताजावा तकनीक इस तथ्य के कारण एक लचीली सुरक्षा प्रणाली है कि प्रोग्राम का निष्पादन पूरी तरह से वर्चुअल मशीन द्वारा नियंत्रित होता है। कोई भी ऑपरेशन जो प्रोग्राम की सेट अनुमतियों से अधिक है (जैसे डेटा तक अनधिकृत पहुंच का प्रयास करना या किसी अन्य कंप्यूटर से कनेक्ट करना) तत्काल निरस्त हो जाता है।
अक्सर, वर्चुअल मशीन की अवधारणा के नुकसान में यह तथ्य शामिल होता है कि वर्चुअल मशीन द्वारा बाइटकोड का निष्पादन जावा भाषा में लागू एल्गोरिदम के प्रोग्राम के प्रदर्शन को कम कर सकता है। हाल ही में, कई सुधार किए गए हैं जो जावा प्रोग्राम को निष्पादित करने की गति को थोड़ा बढ़ा देते हैं:
मशीन कोड में वर्ग संस्करणों को सहेजने की क्षमता के साथ प्रोग्राम ऑपरेशन (जेआईटी प्रौद्योगिकी) के दौरान सीधे मशीन कोड में बाइटकोड का अनुवाद करने की तकनीक का अनुप्रयोग,
मानक पुस्तकालयों में मंच-उन्मुख कोड (मूल कोड) का व्यापक उपयोग,
हार्डवेयर जो त्वरित बायटेकोड प्रसंस्करण प्रदान करता है (उदाहरण के लिए, कुछ एआरएम प्रोसेसर द्वारा समर्थित जैज़ेल तकनीक)।
भाषा की मुख्य विशेषताएं:
स्वचालित स्मृति प्रबंधन;
असाधारण परिस्थितियों से निपटने के लिए विस्तारित क्षमताएं;
इनपुट / आउटपुट फ़िल्टरिंग टूल का एक समृद्ध सेट;
एक सरणी, सूची, ढेर, आदि जैसे मानक संग्रह का एक सेट;
नेटवर्क एप्लिकेशन बनाने के लिए सरल उपकरणों की उपलब्धता (आरएमआई प्रोटोकॉल का उपयोग करने सहित);
कक्षाओं की उपस्थिति जो आपको HTTP अनुरोध करने और प्रतिक्रियाओं को संसाधित करने की अनुमति देती है;
बहु-थ्रेडेड एप्लिकेशन बनाने के लिए अंतर्निहित भाषा उपकरण;
एकीकृत डेटाबेस पहुंच:
व्यक्तिगत SQL प्रश्नों के स्तर पर - JDBC, SQLJ पर आधारित;
डेटाबेस में स्टोर करने की क्षमता वाली वस्तुओं की अवधारणा के स्तर पर - जावा डेटा ऑब्जेक्ट्स और जावा पर्सिस्टेंस एपीआई पर आधारित;
टेम्प्लेट के लिए समर्थन (संस्करण 1.5 से शुरू);
कार्यक्रमों का समानांतर निष्पादन।
1.4.3 सी# प्रोग्रामिंग भाषा
जून 2000 में, यह एक नई प्रोग्रामिंग भाषा के बारे में जाना गया जो माइक्रोसॉफ्ट के आंत में पैदा हुई थी। वह एक हिस्सा बन गया नई टेक्नोलॉजीमाइक्रोसॉफ्ट ने .NET (उच्चारण "डॉट नेट") कहा। इस तकनीक के ढांचे के भीतर, विभिन्न प्रोग्रामिंग भाषाओं में लिखे गए कार्यक्रमों (कॉमन लैंग्वेज रनटाइम, सीएलआर) के लिए एकल निष्पादन वातावरण प्रदान किया जाता है। इन भाषाओं में से एक, इस वातावरण में मुख्य भाषा है, C # (C #, "C शार्प", "C शार्प") पढ़ें। भाषा के नाम से, निश्चित रूप से, वे C++ के साथ इसके संबंध पर जोर देना चाहते थे, क्योंकि # दो प्रतिच्छेद करने वाले प्लस हैं। लेकिन सबसे बढ़कर, नई भाषा जावा के समान है। और इसमें कोई संदेह नहीं है कि इसके प्रकट होने का एक कारण सूर्य की चुनौती का जवाब देने के लिए Microsoft की इच्छा थी।
हालाँकि C# के लेखकों का आधिकारिक रूप से नाम नहीं है, लेकिन भाषा गाइड के प्रारंभिक संस्करणों में से एक के शीर्षक पृष्ठ पर, टर्बो पास्कल और डेल्फी के निर्माता एंडर्स हेजल्सबर्ग, जो 1996 में Microsoft में चले गए, और स्कॉट विल्टामुथ का संकेत दिया गया है।
एकीकृत कार्यक्रम निष्पादन वातावरण मध्यवर्ती भाषा आईएल (मध्यवर्ती भाषा - मध्यवर्ती भाषा) के उपयोग पर आधारित है, जो जावा वर्चुअल मशीन के बाइटकोड के समान ही भूमिका निभाता है। .NET तकनीक के भीतर उपयोग की जाने वाली विभिन्न भाषाओं के कंपाइलर प्रोग्राम को IL कोड में ट्रांसलेट करते हैं। जावा बाइटकोड की तरह, IL कोड एक काल्पनिक स्टैक कंप्यूटर के निर्देशों का प्रतिनिधित्व करता है। लेकिन आईएल के डिजाइन और इस्तेमाल में भी अंतर है।
सबसे पहले, जेवीएम के विपरीत, आईएल एक प्रोग्रामिंग भाषा से बंधा नहीं है। Microsoft.NET के प्रारंभिक संस्करणों में C++, C#, Visual Basic के लिए कंपाइलर शामिल हैं। स्वतंत्र डेवलपर्स उन भाषाओं से आईएल कोड में कंपाइलर बनाकर अन्य भाषाओं को जोड़ सकते हैं।
दूसरे, आईएल प्रोग्रामेटिक व्याख्या के लिए नहीं है, बल्कि मशीन कोड में बाद के संकलन के लिए है। यह आपको काफी उच्च प्रदर्शन कार्यक्रम प्राप्त करने की अनुमति देता है। आईएल कोड वाली फाइलें काम करने के लिए एक अनुकूलन संकलक के लिए पर्याप्त जानकारी रखती हैं।
"सी # सी और सी ++ से प्राप्त एक सरल, आधुनिक, टाइप-सुरक्षित ऑब्जेक्ट-ओरिएंटेड भाषा है। सी # उन प्रोग्रामर के लिए सुविधाजनक और समझने योग्य होगा जो सी और सी ++ जानते हैं। C# विजुअल बेसिक की उत्पादकता को C++ की शक्ति के साथ जोड़ता है।" ये शब्द C# का विवरण शुरू करते हैं।
विचार करना तकनीकी विशेषताएंभाषा: हिन्दी:
संकलन इकाई एक फ़ाइल है (जैसा कि C, C++, Java में है)। फ़ाइल में एक या अधिक प्रकार के विवरण हो सकते हैं: वर्ग (वर्ग), इंटरफेस (इंटरफ़ेस), संरचनाएं (संरचना), गणना (एनम), प्रतिनिधि प्रकार (प्रतिनिधि) नामस्थान पर उनके वितरण के संकेत के साथ या बिना;
नेमस्पेस (नेमस्पेस) प्रोग्राम ऑब्जेक्ट्स की दृश्यता को नियंत्रित करता है (जैसे सी ++ में)। नेमस्पेस को नेस्ट किया जा सकता है। इसे उस नामस्थान को स्पष्ट रूप से निर्दिष्ट किए बिना प्रोग्राम ऑब्जेक्ट का उपयोग करने की अनुमति है जिससे यह ऑब्जेक्ट संबंधित है। उपयोग निर्देश में (टर्बो पास्कल के रूप में) इस नामस्थान के उपयोग का एक सामान्य उल्लेख पर्याप्त है। प्रयोग निर्देश में नामस्थान नामों के लिए उपनाम हैं (जैसा कि ओबेरॉन भाषा में है);
प्राथमिक डेटा प्रकार: 8-बिट (sbyte, बाइट), 16-बिट (लघु, ushort), 32-बिट (int, uint), और 64-बिट (लंबा, उलॉन्ग) हस्ताक्षरित और अहस्ताक्षरित पूर्णांक, एकल वास्तविक (फ्लोट) और डबल (डबल) परिशुद्धता, यूनिकोड वर्ण (चार), बूलियन प्रकार (बूल, पूर्णांकों के साथ संगत नहीं), दशमलव प्रकार सटीकता के 28 महत्वपूर्ण अंक प्रदान करता है (दशमलव);
संरचित प्रकार: कक्षाएं और इंटरफेस (जावा में), एक-आयामी और बहुआयामी (जावा के विपरीत) सरणी, तार (स्ट्रिंग), संरचनाएं (लगभग कक्षाओं के समान, लेकिन ढेर पर और विरासत के बिना नहीं रखा गया), गणना, असंगत पूर्णांकों के साथ (जैसे पास्कल में);
प्रतिनिधि प्रकार या बस "प्रतिनिधि" (जैसे मॉड्यूल -2 और ओबेरॉन में प्रक्रियात्मक प्रकार, सी और सी ++ में फ़ंक्शन पॉइंटर्स);
प्रकारों को संदर्भ प्रकार (वर्ग, इंटरफेस, सरणियाँ, प्रतिनिधि) और मूल्य प्रकार (प्राथमिक प्रकार, गणना, संरचना) में विभाजित किया गया है। संदर्भ प्रकार की वस्तुओं को गतिशील स्मृति (ढेर) में आवंटित किया जाता है, और संदर्भ प्रकार के चर, वास्तव में, इन वस्तुओं के सूचक होते हैं। मूल्य प्रकारों के मामले में, चर सूचक नहीं हैं, बल्कि स्वयं को मान देते हैं। निहित प्रकार के रूपांतरणों की अनुमति केवल तभी दी जाती है जब वे प्रकार की सुरक्षा का उल्लंघन न करें या जानकारी के नुकसान का कारण न बनें। प्राथमिक प्रकार सहित सभी प्रकार, वस्तु प्रकार के साथ संगत हैं, जो अन्य सभी प्रकारों का आधार वर्ग है। मूल्य प्रकारों का ऑब्जेक्ट प्रकार में एक अंतर्निहित रूपांतरण होता है, जिसे बॉक्सिंग कहा जाता है, और एक स्पष्ट उलटा रूपांतरण - अनबॉक्सिंग;
स्वचालित कचरा संग्रह (ओबेरॉन और जावा में);
14 प्राथमिकता स्तरों के साथ संचालन का व्यापक सेट। संचालन को फिर से परिभाषित करना (जैसा कि अल्गोल -68, एडीए, सी ++ में)। चेक किए गए और अनियंत्रित ऑपरेटरों के साथ, आप पूर्णांकों पर संचालन करते समय अतिप्रवाह नियंत्रण को नियंत्रित कर सकते हैं;
मान पैरामीटर, संदर्भ पैरामीटर (रेफरी), और आउटपुट पैरामीटर (आउट) के साथ विधियां। न केवल विधि के विवरण में, बल्कि कॉल करते समय भी ref और out शब्द को पैरामीटर से पहले लिखा जाना चाहिए। आउटपुट पैरामीटर की उपस्थिति आपको परिभाषित असाइनमेंट के निष्पादन को नियंत्रित करने की अनुमति देती है। भाषा के नियमों के अनुसार, किसी भी चर का उपयोग करने का प्रयास करने से पहले उसके मूल्य की गारंटी होनी चाहिए;
कंट्रोल स्टेटमेंट: अगर, स्विच, जबकि, डू, फॉर, ब्रेक, कंटिन्यू (जैसे सी, सी ++ और जावा में)। फ़ोरैच स्टेटमेंट, जो "संग्रह" के प्रत्येक तत्व के माध्यम से लूप करता है, गोटो जंप स्टेटमेंट की कई किस्में;
अपवाद हैंडलिंग (जैसा कि जावा में है);
गुण - वर्गों (ऑब्जेक्ट्स) के तत्व, जिस तक पहुंच उसी तरह से की जाती है जैसे फ़ील्ड (आप असाइन कर सकते हैं या मान प्राप्त कर सकते हैं), लेकिन अंतर्निहित रूप से प्राप्त और सेट सबरूटीन्स (जैसा कि ऑब्जेक्ट पास्कल - इनपुट भाषा में) द्वारा कार्यान्वित किया जाता है डेल्फी प्रणाली के);
इंडेक्सर्स कक्षाओं (ऑब्जेक्ट्स) के तत्व हैं जो आपको ऑब्जेक्ट्स को उसी तरह एक्सेस करने की अनुमति देते हैं जैसे सरणी (में एक इंडेक्स निर्दिष्ट करके) वर्ग कोष्ठक) निहित रूप से प्राप्त और सेट रूटीन द्वारा कार्यान्वित किया जाता है। उदाहरण के लिए, एक स्ट्रिंग के पात्रों तक पहुंच (पढ़ने के लिए) एक सरणी के तत्वों के रूप में किया जा सकता है क्योंकि मानक स्ट्रिंग वर्ग के लिए एक इंडेक्सर लागू किया जाता है;
ईवेंट एक प्रक्रियात्मक प्रकार (प्रतिनिधियों) के वर्गों (फ़ील्ड या गुण) के तत्व हैं, जिसके लिए, कक्षा के बाहर जहां उन्हें परिभाषित किया गया है, केवल += और -= संचालन लागू होते हैं, जिससे आप वस्तुओं के लिए ईवेंट हैंडलर विधियों को जोड़ या हटा सकते हैं। इस वर्ग के;
पॉइंटर्स और एड्रेस अंकगणित का उपयोग कर असुरक्षित (असुरक्षित) कोड असुरक्षित संशोधक के साथ चिह्नित कार्यक्रम के कुछ हिस्सों में स्थानीयकृत है;
एक प्रीप्रोसेसर, जो सी और सी ++ के विपरीत, केवल सशर्त संकलन सुविधाएं प्रदान करता है।
बेशक, सी # की चर्चा की गई कमियां संभावनाओं की भाषा को बिल्कुल भी वंचित नहीं करती हैं। यह कई मायनों में C++ से बेहतर है। सी ++ भाषा के साथ सामान्य असंतोष, जिसे एक नई भाषा की उपस्थिति से पहचाना जाता है, सी # की सफलता के लिए मुख्य पूर्वापेक्षाओं में से एक है।
जावा के साथ C# की तुलना करने पर आप कई समानताएं देख सकते हैं। सच है, यदि जावा सिस्टम मल्टीप्लेटफार्म हैं, तो सी # कार्यान्वयन केवल ऑपरेटिंग सिस्टम के लिए मौजूद है। विंडोज सिस्टमऔर केवल एक। लेकिन, भारीपन के बावजूद, यह उम्मीद की जा सकती है कि भाषा अन्य प्रणालियों के लिए लागू की जाएगी। इसके अलावा, Microsoft .NET प्लेटफ़ॉर्म स्वयं एकल प्रोग्राम निष्पादन परिवेश के साथ वैकल्पिक आर्किटेक्चर में प्रचारित किया जा सकता है, मुख्य रूप से UNIX सिस्टम के लिए।
सी # जावा की तुलना में अधिक यथार्थवादी भाषा प्रतीत होती है। जावा के विपरीत, यह आत्मनिर्भर है। यानी आप किसी भी प्रोग्राम को बिना दूसरी भाषा का सहारा लिए C# में लिख सकते हैं। यह कोड के "असुरक्षित" ब्लॉकों की उपस्थिति के कारण संभव है जो सीधे हार्डवेयर तक पहुंच खोलते हैं। जावा में, निम्न-स्तरीय सुविधाओं तक पहुंच को "मूल विधियों" (मूल विधियों) का उपयोग करना चाहिए, जिन्हें अन्य भाषाओं में प्रोग्राम किया जाना चाहिए।
और, ज़ाहिर है, सी # के लिए संभावनाएं मुख्य रूप से उन प्रयासों से संबंधित हैं, जो निश्चित रूप से, माइक्रोसॉफ्ट इसे बढ़ावा देने के लिए करेगा।