मुफ़्त ट्रायल शुरू करें
Searching...
SoBrief
हिन्दी
EnglishEnglish
EspañolSpanish
简体中文Chinese
繁體中文Chinese (Traditional)
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
इफेक्टिव जावा
3 दिन के लिए पूर्ण एक्सेस आज़माएँ
सुनना और बहुत कुछ अनलॉक करें!
जारी रखें

मुख्य बातें

1. कंस्ट्रक्टर के बजाय स्टैटिक फैक्ट्री: नामकरण, नियंत्रण और लचीलापन

सार्वजनिक कंस्ट्रक्टर के बजाय स्टैटिक फैक्ट्री मेथड देना अपने फायदे और नुकसान दोनों लेकर आता है।

नामकरण के फायदे। स्टैटिक फैक्ट्री मेथड्स कंस्ट्रक्टर की तुलना में अधिक वर्णनात्मक नाम प्रदान करते हैं, जिससे कोड की पठनीयता और उपयोगिता बढ़ती है। खासकर तब जब कंस्ट्रक्टर के पैरामीटर यह स्पष्ट नहीं करते कि ऑब्जेक्ट किस प्रकार का बनाया जा रहा है। उदाहरण के लिए, BigInteger.probablePrime() नामक मेथड BigInteger(int, int, Random) कंस्ट्रक्टर से कहीं अधिक स्पष्ट है।

इंस्टेंस नियंत्रण। स्टैटिक फैक्ट्री हर बार नया ऑब्जेक्ट बनाने के लिए बाध्य नहीं होती, जिससे इम्यूटेबल क्लासेज़ अपने इंस्टेंस कैश कर सकती हैं और अनावश्यक ऑब्जेक्ट निर्माण से बच सकती हैं। इससे प्रदर्शन में काफी सुधार होता है, खासकर बार-बार मांगे जाने वाले ऑब्जेक्ट्स के लिए। Boolean.valueOf(boolean) इसका उदाहरण है, जो हमेशा वही Boolean.TRUE या Boolean.FALSE इंस्टेंस लौटाता है।

सबटाइप लचीलापन। स्टैटिक फैक्ट्री अपने रिटर्न टाइप के किसी भी सबटाइप का ऑब्जेक्ट लौटा सकती है, जिससे API को सार्वजनिक क्लास बनाए बिना ऑब्जेक्ट लौटाने की सुविधा मिलती है। यह API को कॉम्पैक्ट बनाता है और इनपुट पैरामीटर या रिलीज़ के अनुसार रिटर्न क्लास को बदलने की अनुमति देता है, जिससे रखरखाव और लचीलापन बढ़ता है। यही जावा क्रिप्टोग्राफी एक्सटेंशन (JCE) जैसे सर्विस प्रोवाइडर फ्रेमवर्क का आधार है।

2. सिंगलटन कार्यान्वयन: प्राइवेट कंस्ट्रक्टर और सार्वजनिक पहुँच

सिंगलटन वह क्लास है जिसका केवल एक ही इंस्टेंस बनाया जाता है [Gamma98, पृ. 127]।

अद्वितीयता सुनिश्चित करना। सिंगलटन, जो सिस्टम के अद्वितीय घटकों का प्रतिनिधित्व करता है, प्राइवेट कंस्ट्रक्टर और सार्वजनिक स्टैटिक सदस्य के माध्यम से लागू किया जाता है। इससे केवल एक ही इंस्टेंस मौजूद रहता है। इसके दो सामान्य तरीके हैं: फाइनल फील्ड या स्टैटिक फैक्ट्री मेथड का उपयोग।

फाइनल फील्ड तरीका। सार्वजनिक स्टैटिक सदस्य एक फाइनल फील्ड होता है, जिसे सिंगलटन इंस्टेंस से इनिशियलाइज़ किया जाता है। यह तरीका सरल है और स्पष्ट करता है कि क्लास सिंगलटन है। उदाहरण:

  • public static final Elvis INSTANCE = new Elvis();

स्टैटिक फैक्ट्री तरीका। एक सार्वजनिक स्टैटिक फैक्ट्री मेथड सिंगलटन इंस्टेंस लौटाता है। इससे API को बदले बिना कार्यान्वयन में लचीलापन मिलता है। उदाहरण:

  • public static Elvis getInstance() { return INSTANCE; }

सीरियलाइज़ेशन का ध्यान। सीरियलाइज़ेशन के दौरान सिंगलटन की अद्वितीयता बनाए रखने के लिए readResolve मेथड प्रदान करनी चाहिए, जो मौजूदा इंस्टेंस लौटाए और डीसिरियलाइज़ेशन पर नया इंस्टेंस बनने से रोके। इससे सिंगलटन की विशिष्टता बनी रहती है।

3. यूटिलिटी क्लासेज़: इंस्टैंसिएशन रोकना

ऐसी यूटिलिटी क्लासेज़ को इंस्टैंसिएट करने के लिए नहीं बनाया गया है: उनका कोई इंस्टेंस बनाना निरर्थक होगा।

यूटिलिटी क्लासेज़ का उद्देश्य। यूटिलिटी क्लासेज़, जो स्थैतिक मेथड्स और फील्ड्स का समूह होती हैं, संबंधित कार्यक्षमताओं को व्यवस्थित करने के लिए होती हैं, जैसे प्रिमिटिव वैल्यूज, एरेज़ या विशेष इंटरफेस लागू करने वाले ऑब्जेक्ट्स पर। इन्हें इंस्टैंसिएट करने का कोई तुक नहीं होता। उदाहरण के लिए java.lang.Math और java.util.Arrays

इंस्टैंसिएशन रोकना। इंस्टैंसिएशन रोकने के लिए एक सरल तरीका है एक स्पष्ट प्राइवेट कंस्ट्रक्टर शामिल करना। इससे कंपाइलर सार्वजनिक, पैरामीटर रहित डिफ़ॉल्ट कंस्ट्रक्टर नहीं बनाता और क्लास को बाहर से इंस्टैंसिएट नहीं किया जा सकता।

साइड इफेक्ट्स। यह तरीका सबक्लासिंग को भी रोकता है क्योंकि सबक्लास के पास सुपरक्लास का कंस्ट्रक्टर कॉल करने के लिए कोई सुलभ कंस्ट्रक्टर नहीं होगा। इसलिए प्राइवेट कंस्ट्रक्टर के उद्देश्य को समझाने वाला एक टिप्पणी शामिल करना बुद्धिमानी है, क्योंकि यह पहली नजर में उल्टा लग सकता है।

4. ऑब्जेक्ट पुन: उपयोग: दक्षता और इम्यूटेबिलिटी

अक्सर एक ही ऑब्जेक्ट को पुनः उपयोग करना बेहतर होता है बजाय हर बार नया समान ऑब्जेक्ट बनाने के।

पुन: उपयोग के फायदे। ऑब्जेक्ट्स, खासकर इम्यूटेबल, को बार-बार नया बनाने की बजाय पुनः उपयोग करना अधिक कुशल और बेहतर होता है। क्योंकि ऑब्जेक्ट निर्माण और गार्बेज कलेक्शन महंगे हो सकते हैं, विशेषकर भारी ऑब्जेक्ट्स के लिए। उदाहरण के लिए, String s = "silly"; का उपयोग String s = new String("silly"); से बेहतर है।

इम्यूटेबल ऑब्जेक्ट्स। इम्यूटेबल ऑब्जेक्ट्स को हमेशा सुरक्षित रूप से पुनः उपयोग किया जा सकता है। उदाहरण के लिए, Boolean.valueOf(String) Boolean(String) से बेहतर है क्योंकि यह मौजूदा इंस्टेंस का पुनः उपयोग कर सकता है।

म्यूटेबल ऑब्जेक्ट्स। म्यूटेबल ऑब्जेक्ट्स को तब पुनः उपयोग किया जा सकता है जब यह ज्ञात हो कि उन्हें संशोधित नहीं किया जाएगा। उदाहरण के लिए, Calendar और Date के इंस्टेंस को एक बार स्टैटिक इनिशियलाइज़ेशन के माध्यम से बनाना और बार-बार मेथड कॉल पर नया न बनाना प्रदर्शन में सुधार करता है।

5. मेमोरी प्रबंधन: अप्रचलित संदर्भों को हटाना

अप्रचलित संदर्भ वह होता है जिसे फिर कभी डिरेफरेंस नहीं किया जाएगा।

मेमोरी लीक। गार्बेज-कलेक्टेड भाषाओं में मेमोरी लीक तब होती है जब ऑब्जेक्ट संदर्भ अनजाने में बनाए रखे जाते हैं, जिससे गार्बेज कलेक्शन नहीं हो पाता। इससे प्रदर्शन घटता है, मेमोरी उपयोग बढ़ता है और OutOfMemoryError तक हो सकता है।

मेमोरी लीक की पहचान। मेमोरी लीक का एक सामान्य स्रोत ऐसे क्लासेज़ हैं जो अपनी मेमोरी स्वयं प्रबंधित करते हैं, जैसे Stack क्लास। जब कोई एलिमेंट मुक्त किया जाता है, तो उसमें मौजूद ऑब्जेक्ट संदर्भों को null करना चाहिए।

समाधान। मेमोरी लीक रोकने के लिए संदर्भों को अप्रचलित होते ही null कर देना चाहिए। साथ ही, कैश का ध्यान रखें, जो संदर्भों को लंबे समय तक रख सकता है। ऐसे कैश के लिए WeakHashMap का उपयोग करें, जहां एंट्री केवल तब तक प्रासंगिक होती है जब उसके कीज़ के बाहर भी संदर्भ मौजूद हों।

6. equals अनुबंध: परावर्तकता, सममिति और संक्रमणीयता

equals मेथड एक समतुल्यता संबंध लागू करता है।

समतुल्यता संबंध। equals मेथड को ओवरराइड करते समय इसके सामान्य अनुबंध का पालन करना आवश्यक है, जो समतुल्यता संबंध को परिभाषित करता है। इसमें परावर्तकता (x.equals(x) हमेशा true), सममिति (x.equals(y) तभी true जब y.equals(x) भी true हो), और संक्रमणीयता (यदि x.equals(y) और y.equals(z) true हैं, तो x.equals(z) भी true होना चाहिए) शामिल हैं।

सममिति का उल्लंघन। सममिति का उल्लंघन संग्रहों में अप्रत्याशित व्यवहार पैदा कर सकता है। उदाहरण के लिए, CaseInsensitiveString क्लास जो सामान्य स्ट्रिंग्स के साथ इंटरऑपरेट करने की कोशिश करता है, सममिति का उल्लंघन कर सकता है।

संक्रमणीयता का उल्लंघन। संक्रमणीयता का उल्लंघन तब हो सकता है जब किसी इंस्टैंसिएबल क्लास का विस्तार किया जाए और equals तुलना को प्रभावित करने वाला कोई पहलू जोड़ा जाए। इससे बचने के लिए विरासत की बजाय संयोजन (composition) को प्राथमिकता दें।

गैर-नलता। equals मेथड को किसी भी गैर-नल संदर्भ x के लिए false लौटाना चाहिए जब x.equals(null) कॉल किया जाए। instanceof ऑपरेटर यह स्वचालित रूप से संभालता है।

7. hashCode ओवरराइड: equals के साथ संगति

जो भी क्लास equals ओवरराइड करता है, उसे hashCode भी ओवरराइड करना चाहिए।

hashCode का महत्व। equals ओवरराइड करते समय hashCode को भी ओवरराइड करना जरूरी है ताकि समान ऑब्जेक्ट्स के समान हैश कोड हों। ऐसा न करने से Object.hashCode के सामान्य अनुबंध का उल्लंघन होता है और क्लास हैश-आधारित संग्रहों जैसे HashMap और HashSet में ठीक से काम नहीं करता।

वैध लेकिन खराब हैश फंक्शन। एक सरल hashCode मेथड जो हमेशा एक ही मान लौटाता है वैध है, लेकिन हैश टेबल के प्रदर्शन को खराब करता है क्योंकि सभी ऑब्जेक्ट्स एक ही बकेट में जाते हैं।

अच्छे हैश फंक्शन की विधि। अच्छा हैश फंक्शन असमान ऑब्जेक्ट्स के लिए असमान हैश कोड उत्पन्न करता है। एक सरल विधि:

  • एक int वेरिएबल result को गैर-शून्य स्थिरांक (जैसे 17) से इनिशियलाइज़ करें।
  • ऑब्जेक्ट के प्रत्येक महत्वपूर्ण फील्ड f के लिए, उसका हैश कोड c निकालें और result = 37 * result + c; करें।
  • अंत में result लौटाएं।

8. toString ओवरराइड: संक्षिप्त और सूचनात्मक प्रस्तुति

जब आपका ऑब्जेक्ट println, स्ट्रिंग संयोजन ऑपरेटर (+), या रिलीज़ 1.4 से assert को दिया जाता है, तो toString मेथड अपने आप कॉल होता है।

toString का महत्व। toString मेथड को ओवरराइड करने से ऑब्जेक्ट का संक्षिप्त और सूचनात्मक स्ट्रिंग प्रतिनिधित्व मिलता है, जिससे क्लास का उपयोग अधिक सुखद हो जाता है। यह डिबगिंग और लॉगिंग के लिए विशेष रूप से उपयोगी है।

toString की सामग्री। जब संभव हो, toString मेथड को ऑब्जेक्ट की सभी महत्वपूर्ण जानकारी लौटानी चाहिए। यदि ऑब्जेक्ट बड़ा है या उसकी स्थिति स्ट्रिंग में व्यक्त करना कठिन है, तो सारांश देना चाहिए।

फॉर्मेट निर्दिष्ट करना। toString लागू करते समय यह तय करें कि क्या रिटर्न वैल्यू का फॉर्मेट दस्तावेज़ में निर्दिष्ट करना है। फॉर्मेट निर्दिष्ट करने से मानक और स्पष्ट प्रतिनिधित्व मिलता है, लेकिन भविष्य में बदलाव की लचीलापन कम हो जाती है। यदि फॉर्मेट निर्दिष्ट करें, तो एक मेल खाता स्ट्रिंग कंस्ट्रक्टर या स्टैटिक फैक्ट्री भी प्रदान करें।

9. Cloneable इंटरफेस: सावधानीपूर्वक लागू करें

Cloneable इंटरफेस एक मिक्सिन इंटरफेस के रूप में बनाया गया था ताकि ऑब्जेक्ट्स यह सूचित कर सकें कि वे क्लोनिंग की अनुमति देते हैं।

Cloneable की कमियाँ। Cloneable इंटरफेस में clone मेथड नहीं है, और Object का clone मेथड प्रोटेक्टेड है। इससे केवल Cloneable लागू करने के कारण clone मेथड को कॉल करना मुश्किल हो जाता है।

क्लोन अनुबंध। clone मेथड का सामान्य अनुबंध कमजोर है, जो केवल कहता है कि यह ऑब्जेक्ट की एक कॉपी बनाता और लौटाता है। यह निर्दिष्ट नहीं करता कि कॉपी कैसे बनाई जाए या कंस्ट्रक्टर कॉल होने चाहिए या नहीं।

Cloneable लागू करना। Cloneable को सही ढंग से लागू करने के लिए क्लास को clone मेथड को सार्वजनिक रूप से ओवरराइड करना चाहिए, जो पहले super.clone कॉल करे और फिर आवश्यक फील्ड्स को ठीक करे। आमतौर पर इसका मतलब है आंतरिक "डीप स्ट्रक्चर" के म्यूटेबल ऑब्जेक्ट्स की कॉपी बनाना।

Cloneable के विकल्प। ऑब्जेक्ट कॉपी करने का बेहतर तरीका कॉपी कंस्ट्रक्टर या स्टैटिक फैक्ट्री प्रदान करना है। ये जोखिम भरे बाहरी ऑब्जेक्ट निर्माण तंत्र पर निर्भर नहीं करते और फाइनल फील्ड्स के सही उपयोग के साथ टकराव नहीं करते।

10. Comparable इंटरफेस: प्राकृतिक क्रम

Comparable लागू करके, एक क्लास यह संकेत देता है कि उसके इंस्टेंस का एक प्राकृतिक क्रम होता है।

Comparable के फायदे। Comparable इंटरफेस लागू करने से क्लास जेनरिक एल्गोरिदम और संग्रह कार्यान्वयन के साथ इंटरऑपरेट कर सकता है जो क्रम पर निर्भर करते हैं, जैसे Arrays.sort और TreeSet

compareTo अनुबंध। compareTo मेथड का सामान्य अनुबंध equals के समान है, जिसमें परावर्तकता, संक्रमणीयता और सममिति शामिल हैं। यह कड़ा सुझाव दिया जाता है कि (x.compareTo(y)==0) == (x.equals(y)) हो।

compareTo मेथड लिखना। compareTo मेथड लिखते समय, ऑब्जेक्ट संदर्भ फील्ड्स की तुलना पुनरावर्ती compareTo कॉल से करें। प्रिमिटिव फील्ड्स की तुलना < और > ऑपरेटर से करें। यदि क्लास में कई महत्वपूर्ण फील्ड्स हैं, तो उन्हें महत्व के क्रम में तुलना करें।

11. पहुँच कम करें: सूचना छुपाना

एक अच्छी डिज़ाइन की गई मॉड्यूल और खराब डिज़ाइन की गई मॉड्यूल में सबसे बड़ा अंतर यह है कि मॉड्यूल अपने आंतरिक डेटा और अन्य कार्यान्वयन विवरणों को अन्य मॉड्यूल से कितना छुपाता है।

सूचना छुपाने के फायदे। सूचना छुपाना या एन्कैप्सुलेशन मॉड्यूल्स को अलग करता है, जिससे वे स्वतंत्र रूप से विकसित, परीक्षण, अनुकूलित और संशोधित किए जा सकते हैं। इससे सिस्टम विकास तेज होता है, रखरखाव आसान होता है, सॉफ़्टवेयर पुन: उपयोग बढ़ता है और जोखिम कम होता है।

पहुँच स्तर। जावा भाषा पहुँच संशोधक (private, पैकेज-प्राइवेट, protected, और public) प्रदान करती है जो सूचना छुपाने में मदद करते हैं। नियम यह है कि प्रत्येक क्लास या सदस्य को यथासंभव कम सुलभ बनाएं।

सार्वजनिक फील्ड्स। सार्वजनिक क्लासेज़ में सार्वजनिक फील्ड्स होना दुर्लभ होना चाहिए (सार्वजनिक मेथड्स के विपरीत)। अपवाद वे हैं जो सार्वजनिक स्थैतिक फाइनल फील्ड्स हैं, जिनमें प्रिमिटिव वैल्यूज या इम्यूटेबल ऑब्जेक्ट्स के संदर्भ होते हैं।

12. इम्यूटेबिलिटी को प्राथमिकता दें: सरलता और थ्रेड सुरक्षा

एक इम्यूटेबल क्लास वह क्लास है जिसके इंस्टेंस संशोधित नहीं किए जा सकते।

इम्यूटेबिलिटी के फायदे। इम्यूटेबल क्लासेज़ डिजाइन, कार्यान्वयन और उपयोग में आसान होती हैं। वे त्रुटि के प्रति कम संवेदनशील और अधिक सुरक्षित होती हैं।

इम्यूटेबिलिटी के नियम। क्लास को इम्यूटेबल बनाने के लिए:

  • कोई भी मेथड न दें जो ऑब्जेक्ट को संशोधित करे (म्यूटेटर्स)।
  • सुनिश्चित करें कि कोई मेथड ओवरराइड न हो सके (क्लास को फाइनल बनाएं या प्राइवेट कंस्ट्रक्टर और स्टैटिक फैक्ट्री का उपयोग करें)।
  • सभी फील्ड्स को फाइनल बनाएं।
  • सभी फील्ड्स को प्राइवेट बनाएं।
  • किसी भी म्यूटेबल कंपोनेंट तक विशेष पहुँच सुनिश्चित करें (डिफेंसिव कॉपी बनाएं)।

इम्यूटेबिलिटी के नुकसान। इम्यूटेबल क्लासेज़ का एकमात्र वास्तविक नुकसान यह है कि प्रत्येक अलग मान के लिए अलग ऑब्जेक्ट चाहिए। इसे संभालने के लिए, अक्सर उपयोग होने वाले मानों के लिए सार्वजनिक स्थैतिक फाइनल कॉन्स्टेंट्स प्रदान करें और एक सार्वजनिक म्यूटेबल साथी क्लास पर विचार करें।

अंतिम अपडेट:

Report Issue

समीक्षा सारांश

4.51 में से 5
औसत 8,000+ Goodreads और Amazon से रेटिंग्स.

इफेक्टिव जावा को जावा डेवलपर्स के लिए एक अनिवार्य पुस्तक माना जाता है, जिसे इसकी स्पष्ट व्याख्याओं और व्यावहारिक सलाह के लिए सराहा जाता है। पाठक ब्लॉच की विशेषज्ञता और पुस्तक के उच्च गुणवत्ता, मेंटेन करने योग्य कोड लिखने पर केंद्रित दृष्टिकोण की प्रशंसा करते हैं। कई लोग इसे शुरुआती और अनुभवी दोनों प्रोग्रामर्स के लिए पढ़ना आवश्यक मानते हैं। यह पुस्तक जावा की विभिन्न विशेषताओं, सर्वोत्तम प्रथाओं और सामान्य गलतियों को विस्तार से समझाती है। हालांकि कुछ पाठकों को कुछ अध्याय पुराने या बहुत जटिल लगते हैं, फिर भी अधिकांश इस बात से सहमत हैं कि यह पुस्तक कोडिंग कौशल और जावा की गहराइयों को समझने में महत्वपूर्ण सुधार लाती है।

Your rating:
4.69
389 रेटिंग्स
Want to read the full book?

अक्सर पूछे जाने वाले प्रश्न

What's Effective Java about?

  • Java best practices: Effective Java by Joshua Bloch is a comprehensive guide focused on best practices for Java programming. It aims to help developers write clear, correct, robust, and reusable code.
  • Practical advice: The book is tailored for developers familiar with Java who wish to enhance their coding skills. It covers a wide range of topics, including object creation, methods, classes, and interfaces.
  • Structured format: The content is organized into distinct items, each addressing a specific aspect of Java programming. This structure allows readers to easily navigate and apply the advice.

Why should I read Effective Java?

  • Improve coding skills: Reading Effective Java can significantly enhance your Java programming abilities by providing insights not commonly found in other resources.
  • Expert insights: Joshua Bloch, a key contributor to the Java platform, shares his extensive experience through practical examples and rules of thumb.
  • Code quality focus: The book emphasizes writing code that is not only functional but also maintainable and efficient, leading to fewer bugs and easier code management.

What are the key takeaways of Effective Java?

  • Clarity and simplicity: The book stresses the importance of writing clear and simple code, ensuring understandability and maintainability over time.
  • Composition over inheritance: Bloch advises using composition instead of inheritance to create more flexible and robust code structures, reducing dependencies and potential fragility.
  • Static factory methods: The book recommends using static factory methods for object creation, offering better readability and flexibility.

What are some specific rules from Effective Java?

  • Static Factory Methods: Consider providing static factory methods instead of constructors for better naming and performance.
  • Singleton Property: Enforce the singleton property with a private constructor to ensure a class has only one instance.
  • Override Equals and HashCode: Always override hashCode when you override equals to ensure correct functioning of hash-based collections.

How does Effective Java address object creation?

  • Static Factory Methods: Suggests using static factory methods for object creation instead of constructors for better naming and performance.
  • Avoiding Duplicate Objects: Advises against creating duplicate objects, especially for immutable types, to improve memory management.
  • Enforcing Noninstantiability: Discusses enforcing noninstantiability with a private constructor for utility classes to prevent unnecessary instances.

What are the benefits of immutability discussed in Effective Java?

  • Thread Safety: Immutable objects are inherently thread-safe, eliminating the need for synchronization and simplifying concurrent programming.
  • Simplicity and Clarity: Immutability leads to simpler code, making reasoning about the code easier and reducing the likelihood of bugs.
  • Reuse and Performance: Immutable objects can be shared freely, allowing for efficient memory usage and reduced overhead of object creation.

How does Effective Java suggest handling exceptions?

  • Use Exceptions for Exceptional Conditions: Advises using exceptions only for exceptional conditions, not for regular control flow, to maintain clarity and avoid performance penalties.
  • Document Exceptions: Emphasizes documenting exceptions that a method can throw to improve code readability and help users handle potential errors.
  • Favor Standard Exceptions: Recommends using standard exceptions provided by the Java platform for consistency and familiarity.

What is the significance of the Effective Java item on interfaces?

  • Define Types with Interfaces: Emphasizes using interfaces to define types, not to export constants, keeping the API clean and focused on behavior.
  • Favor Interfaces Over Abstract Classes: Advises using interfaces for flexibility, allowing multiple implementations without single inheritance constraints.
  • Avoid Constant Interfaces: Warns against using constant interfaces, suggesting utility classes instead to group constants.

How does Effective Java recommend designing for inheritance?

  • Design and Document for Inheritance: If a class is designed for inheritance, it must document the effects of overriding methods to ensure subclass understanding.
  • Prohibit Unnecessary Inheritance: Suggests making classes final or using private constructors to prevent unintended inheritance, reducing fragility.
  • Provide Protected Methods: Expose protected methods judiciously to allow subclass extension while avoiding excessive implementation detail exposure.

How does Effective Java address concurrency?

  • Synchronize Access to Shared Data: Emphasizes synchronizing access to shared mutable data to prevent data corruption and ensure thread safety.
  • Avoid Excessive Synchronization: Advises minimizing work within synchronized blocks to enhance performance and avoid deadlocks.
  • Document Thread Safety: Stresses the importance of documenting the thread safety of classes and methods for safe multithreaded use.

What is the double-checked locking idiom, and why is it problematic?

  • Lazy Initialization Purpose: Used to reduce synchronization overhead when lazily initializing a resource by checking if it's initialized before locking.
  • Inconsistent States Risk: Without proper synchronization, threads may see a partially constructed object, leading to inconsistent states and bugs.
  • Avoidance Recommendation: Advises against using double-checked locking due to its complexity and potential pitfalls, suggesting simpler alternatives.

What are the best quotes from Effective Java and what do they mean?

  • "Programs must be written for people to read, and only incidentally for machines to execute." Emphasizes writing code understandable to humans, not just optimized for machines.
  • "The single most important factor that distinguishes a well-designed module from a poorly designed one is the degree to which the module hides its internal data." Highlights the principle of encapsulation for maintainable and flexible code.
  • "Don't create a new object when you should reuse an existing one." Encourages object reuse, especially for immutable objects, to enhance performance and reduce memory usage.

लेखक के बारे में

जोशुआ ब्लोच एक प्रसिद्ध कंप्यूटर वैज्ञानिक और लेखक हैं, जो विशेष रूप से जावा प्रोग्रामिंग में माहिर हैं। उन्होंने जावा भाषा और इसकी लाइब्रेरीज़ के विकास में महत्वपूर्ण योगदान दिया है, जिनमें जावा कलेक्शंस फ्रेमवर्क का डिज़ाइन और कार्यान्वयन शामिल है। ब्लोच की विशेषज्ञता उनके सॉफ़्टवेयर विकास के व्यापक अनुभव और आधुनिक जावा फीचर्स के निर्माण में उनकी सक्रिय भागीदारी से उत्पन्न हुई है। उनकी लेखन शैली को स्पष्ट, सटीक और गहन माना जाता है, जो जटिल अवधारणाओं को पाठकों के लिए सहज और समझने योग्य बनाती है। ब्लोच का कार्य, विशेषकर "इफेक्टिव जावा," जावा डेवलपर्स के लिए एक महत्वपूर्ण संदर्भ बन चुका है, जो सर्वोत्तम प्रथाओं और प्रभावी प्रोग्रामिंग तकनीकों के अनमोल ज्ञान प्रदान करता है।

Follow
सुनें
Now playing
इफेक्टिव जावा
0:00
-0:00
Now playing
इफेक्टिव जावा
0:00
-0:00
1x
Queue
Home
Swipe
Library
Get App
Try Full Access for 3 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
Read unlimited summaries. Free users get 3 per month
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 4
📜 Unlimited History
Free users are limited to 4
📥 Unlimited Downloads
Free users are limited to 1
Risk-Free Timeline
आज: तुरंत एक्सेस पाएं
26,000+ किताबों का पूरा सारांश सुनें। यानी 12,000+ घंटे का ऑडियो!
दिन 2: ट्रायल रिमाइंडर
हम आपको सूचना भेजेंगे कि आपका ट्रायल जल्द समाप्त हो रहा है।
दिन 3: आपकी सदस्यता शुरू होगी
आपसे शुल्क लिया जाएगा Jun 13,
उससे पहले कभी भी रद्द करें।
Consume 2.8× More Books
2.8× more books Listening Reading
Our users love us
600,000+ readers
Trustpilot Rating
TrustPilot
4.6 Excellent
This site is a total game-changer. I've been flying through book summaries like never before. Highly, highly recommend.
— Dave G
Worth my money and time, and really well made. I've never seen this quality of summaries on other websites. Very helpful!
— Em
Highly recommended!! Fantastic service. Perfect for those that want a little more than a teaser but not all the intricate details of a full audio book.
— Greg M
Save 62%
Yearly
$119.88 $44.99/year/yr
$3.75/mo
Monthly
$9.99/mo
Start a 3-Day Free Trial
3 days free, then $44.99/year. Cancel anytime.
Unlock a world of fiction & nonfiction books
26,000+ books for the price of 2 books
Read any book in 10 minutes
Discover new books like Tinder
Request any book if it's not summarized
Read more books than anyone you know
#1 app for book lovers
Lifelike & immersive summaries
30-day money-back guarantee
Download summaries in EPUBs or PDFs
Cancel anytime in a few clicks
Scanner
Find a barcode to scan

We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel
Settings
General
Widget
Loading...
We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel