जावा अपवाद प्रबंधन में महारत: थ्रो और थ्रोज़ का पूर्ण गाइड

目次

1. परिचय

जब आप Java में प्रोग्रामिंग शुरू करते हैं, तो आपको अपरिहार्य रूप से “exception handling” शब्द का सामना करना पड़ेगा। विभिन्न कीवर्ड्स में से, “throw” और “throws” शुरुआती लोगों के लिए विशेष रूप से भ्रमित करने वाले हैं क्योंकि वे समान दिखते हैं लेकिन अलग-अलग उद्देश्यों की सेवा करते हैं। Java एक भाषा है जो सुरक्षा और मजबूती को ध्यान में रखकर डिज़ाइन की गई है, और यह त्रुटियों तथा अप्रत्याशित स्थितियों को ठीक से संभालने के लिए एक अंतर्निहित तंत्र प्रदान करती है। इस तंत्र को “exception handling” कहा जाता है। Exception handling प्रोग्रामों की विश्वसनीयता और रखरखाव को सुधारने में महत्वपूर्ण भूमिका निभाती है। इस लेख में, हम “java throws” के उपयोग पर ध्यान केंद्रित करते हैं, exception handling के बुनियादी सिद्धांतों से शुरू करके अक्सर पूछे जाने वाले प्रश्नों तथा सामान्य गड्ढों तक जाते हुए। यह गाइड उन लोगों के लिए विशेष रूप से सहायक है जो “throw” और “throws” के बीच के अंतर के बारे में अनिश्चित हैं, या जो throws को प्रभावी ढंग से कहाँ और कैसे उपयोग करना चाहते हैं। हम वास्तविक दुनिया के प्रोजेक्ट्स में अक्सर देखे जाने वाले व्यावहारिक जानकारी, टिप्स, तथा सैंपल कोड भी शामिल करते हैं, इसलिए अंत तक पढ़ें।

2. Java में Exception Handling क्या है?

Java प्रोग्राम लिखते समय, रनटाइम पर विभिन्न अप्रत्याशित स्थितियाँ उत्पन्न हो सकती हैं। उदाहरण के लिए, कोई फाइल नहीं मिल सकती, शून्य से भाग देने की त्रुटि हो सकती है, या किसी ऐरे की सीमाओं से बाहर पहुँचने का प्रयास किया जा सकता है। इन स्थितियों को “exceptions” के रूप में जाना जाता है।

2.1 Exception Handling के बुनियादी अवधारणाएँ

Exception handling एक तंत्र है जो प्रोग्राम निष्पादन के दौरान उत्पन्न होने वाली असामान्य स्थितियों (exceptions) का पता लगाता है और डेवलपर्स को उन्हें उचित रूप से संभालने की अनुमति देता है। जब कोई अपवाद उत्पन्न होता है तो प्रोग्राम को अचानक समाप्त करने के बजाय, Java एप्लिकेशन को त्रुटि के प्रकार और सामग्री के आधार पर अर्थपूर्ण प्रतिक्रिया देने में सक्षम बनाता है। इससे एप्लिकेशन की स्थिरता और उपयोगकर्ता अनुभव में सुधार होता है।

2.2 Checked Exceptions और Unchecked Exceptions

Java अपवाद दो प्रमुख श्रेणियों में आते हैं।

Checked Exceptions

Checked exceptions वे अपवाद हैं जिन्हें संकलन समय पर संभालना अनिवार्य होता है। उदाहरणों में फाइल ऑपरेशन्स के दौरान IOException शामिल है। इन अपवादों को try-catch ब्लॉक का उपयोग करके कैप्चर करना होता है या throws घोषणा का उपयोग करके कॉलर को प्रचारित करना होता है।

try {
    FileReader fr = new FileReader("data.txt");
} catch (IOException e) {
    e.printStackTrace();
}

Unchecked Exceptions

Unchecked exceptions वे अपवाद हैं जिन्हें संकलन समय पर अनिवार्य रूप से संभालने की आवश्यकता नहीं होती। सामान्य उदाहरणों में NullPointerException और ArrayIndexOutOfBoundsException शामिल हैं, जो आमतौर पर प्रोग्रामिंग गलतियों के परिणामस्वरूप होते हैं। हालांकि Java इन अपवादों को स्पष्ट रूप से संभालने के बिना संकलित कर देगा, लेकिन अप्रत्याशित त्रुटियों से बचने के लिए आवश्यक होने पर इन्हें संबोधित करने की सिफारिश की जाती है।

2.3 Exception Handling क्यों आवश्यक है

Exception handling का उचित कार्यान्वयन निम्नलिखित लाभ प्रदान करता है:

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

Java में exception handling मजबूत एप्लिकेशन्स बनाने के लिए एक आवश्यक कौशल है। अगले अध्याय में, हम “throw” के बुनियादी सिद्धांतों की व्याख्या करते हैं।

3. throw क्या है?

Java में, “throw” एक कीवर्ड है जो अपवाद को जानबूझकर उत्पन्न करने के लिए उपयोग किया जाता है। हालांकि अपवाद अक्सर प्रोग्राम निष्पादन के दौरान स्वचालित रूप से उत्पन्न होते हैं, लेकिन कुछ शर्तों के पूरा होने पर आप अपवाद को बनाने और उठाने की इच्छा कर सकते हैं—यही वह समय है जब “throw” का उपयोग किया जाता है।

3.1 throw का बुनियादी उपयोग

“throw” स्पष्ट रूप से एक अपवाद ऑब्जेक्ट उत्पन्न करता है और उसे फेंकता है, जिससे अपवाद उत्पन्न होता है। बुनियादी सिंटैक्स निम्नलिखित है:

throw new ExceptionClass("Error message");

उदाहरण के लिए, यदि कोई अमान्य तर्क पास किया जाता है, तो आप अपवाद को इस तरह उठा सकते हैं:

public void setAge(int age) {
    if (age < 0) {
        throw new IllegalArgumentException("Age must be zero or greater");
    }
    this.age = age;
}

इस उदाहरण में, जब आयु शून्य से कम होती है तो IllegalArgumentException फेंका जाता है।

3.2 आप अपवाद (Exceptions) क्यों फेंकना चाहेंगे

“throw” का मुख्य उद्देश्य प्रोग्राम को तुरंत अवैध स्थितियों या नियम उल्लंघनों के बारे में सूचित करना है। यह बग्स को जल्दी पकड़ने में मदद करता है और अनपेक्षित व्यवहार को रोकता है।
उदाहरण शामिल हैं:

  • जब उपयोगकर्ता इनपुट मान्यकरण में विफल हो जाता है
  • जब अमान्य पैरामीटर या कॉन्फ़िगरेशन पास किए जाते हैं
  • जब व्यावसायिक तर्क आगे की प्रक्रिया को रोकता है

3.3 throw के उपयोग पर नोट्स

जब “throw” का उपयोग करके कोई अपवाद फेंका जाता है, तो यह कॉलर तक पहुँचता है जब तक कि उसी मेथड में try-catch ब्लॉक द्वारा इसे संभाला न जाए। जाँच किए गए अपवादों (जैसे IOException) के लिए, मेथड को अपने सिग्नेचर में “throws” भी घोषित करना आवश्यक है। अनजाँचित अपवादों के लिए, throws घोषणा वैकल्पिक है, लेकिन “throw” और “throws” के बीच अंतर को समझना उचित उपयोग के लिए आवश्यक है।

4. throws क्या है?

जावा प्रोग्राम लिखते समय, आप मेथड डिक्लेरेशन में “throws” कीवर्ड का सामना कर सकते हैं। throws कीवर्ड का उपयोग कॉलर को सूचित करने के लिए किया जाता है कि मेथड निष्पादन के दौरान एक या अधिक अपवाद फेंक सकता है।

4.1 throws का मूल उपयोग

मेथड डिक्लेरेशन में अपवाद क्लास के नाम निर्दिष्ट करके, throws कीवर्ड मेथड के भीतर उत्पन्न होने वाले किसी भी अपवाद को कॉलर तक पहुँचाता है। विशेष रूप से, जाँच किए गए अपवादों को सही ढंग से संभालने के लिए कॉलर को सुनिश्चित करने हेतु throws के साथ घोषित किया जाना चाहिए।
उदाहरण:

public void readFile(String path) throws IOException {
    FileReader reader = new FileReader(path);
    // File reading process
}

इस उदाहरण में, FileReader का कंस्ट्रक्टर IOException फेंक सकता है, इसलिए मेथड को throws IOException घोषित करना होगा।

4.2 मेथड डिक्लेरेशन में अपवाद प्रसार

जब कोई मेथड throws घोषित करता है, तो उसके भीतर उत्पन्न होने वाले सभी अपवाद कॉलर तक पहुँचते हैं। कॉलर को तब या तो अपवाद को पकड़ना होगा या अपने स्वयं के throws को घोषित करके आगे प्रसारित करना होगा।

public void processFile() throws IOException {
    readFile("test.txt"); // readFile throws IOException, so this method must also declare throws
}

4.3 कई अपवादों की घोषणा

यदि कोई मेथड कई अपवाद फेंक सकता है, तो उन्हें throws कीवर्ड के बाद कॉमा-सेपरेटेड सूची के रूप में घोषित किया जा सकता है।

public void connect(String host) throws IOException, SQLException {
    // Network or database operations
}

4.4 throws की भूमिका और लाभ

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

5. throw और throws के बीच अंतर

हालांकि अक्सर भ्रमित किया जाता है, “throw” और “throws” जावा के अपवाद-हैंडलिंग तंत्र में बहुत अलग भूमिकाएँ निभाते हैं। यह अध्याय उनके अंतर को स्पष्ट करता है और बताता है कि प्रत्येक को कब और कैसे सही ढंग से उपयोग किया जाए।

5.1 throw और throws के कार्यात्मक अंतर

Itemthrowthrows
RoleActually generates an exceptionDeclares that a method may throw exceptions
UsageUsed inside methods to throw exception objectsUsed in method declarations to specify throwable exceptions
TargetException objects created with newBoth checked and unchecked exceptions
Examplethrow new IOException(“Error occurred”);public void sample() throws IOException
When requiredWhen intentionally raising an exceptionWhen a method may throw checked exceptions

5.2 प्रत्येक का उपयोग कब किया जाता है

  • throw
  • जब आप सक्रिय रूप से एक अपवाद उत्पन्न करना चाहते हैं—उदाहरण के लिए, जब अमान्य इनपुट या नियम उल्लंघन का पता चलता है।
  • उदाहरण: “यदि आयु शून्य से कम है, तो IllegalArgumentException फेंकेँ।”

  • throws

  • जब कोई मेथड या कंस्ट्रक्टर अपवाद फेंक सकता है और कॉलर को इसके बारे में सूचित करना आवश्यक हो।
  • उदाहरण: “फ़ाइल ऑपरेशन्स या डेटाबेस एक्सेस को संभालने वाले मेथड्स में throws का उपयोग करें, जहाँ अपवाद अपेक्षित होते हैं।”

5.3 तुलना के लिए कोड उदाहरण

throw का उदाहरण:

public void setName(String name) {
    if (name == null || name.isEmpty()) {
        throw new IllegalArgumentException("Name cannot be empty");
    }
    this.name = name;
}

throws का उदाहरण:

public void loadConfig(String path) throws IOException {
    FileReader reader = new FileReader(path);
    // Configuration loading process
}

5.4 सारांश तालिका

Decision Pointthrowthrows
Where it’s usedInside a methodMethod declaration
What it doesGenerates an exceptionDeclares exception propagation
Who handles itThrown at the point of errorHandled by the caller
When requiredOptional (only when needed)Required for checked exceptions

थ्रो (throw) और थ्रोस (throws) की भूमिकाएँ स्पष्ट रूप से अलग हैं, इसलिए किसे किस परिदृश्य में उपयोग करना है को समझना मजबूत अपवाद हैंडलिंग की ओर पहला कदम है।

6. throws के उपयोग के सर्वोत्तम अभ्यास

throws का प्रभावी उपयोग जावा प्रोग्रामों की पठनीयता और रखरखाव को सुधारता है, साथ ही अपवाद हैंडलिंग की समग्र गुणवत्ता को बढ़ाता है। यह अध्याय वास्तविक विकास में सामान्यतः उपयोग किए जाने वाले अनुशंसित अभ्यास और महत्वपूर्ण विचारों को प्रस्तुत करता है।

6.1 विशिष्ट अपवाद वर्ग निर्दिष्ट करें

throws घोषणाओं में, हमेशा संभवतः सबसे विशिष्ट अपवाद वर्ग निर्दिष्ट करें। Exception या Throwable को व्यापक रूप से घोषित करने से बचें। IOException या SQLException जैसे विशिष्ट अपवादों का उपयोग करके, कॉलर सटीक रूप से निर्धारित कर सकते हैं कि त्रुटियों को कैसे संभालना है।
उदाहरण के लिए अच्छा:

public void saveData() throws IOException {
    // File-saving process
}

इसे न करें:

public void saveData() throws Exception {
    // Too vague: unclear what exceptions may occur
}

6.2 अपवाद पदानुक्रम का उपयोग करें

क्योंकि जावा अपवाद वर्ग एक पदानुक्रमिक संरचना बनाते हैं, संबंधित अपवादों को उपयुक्त होने पर एक पैरेंट क्लास के तहत समूहित किया जा सकता है। हालांकि, उच्च-स्तरीय अपवादों (जैसे Exception) के साथ अत्यधिक सामान्यीकरण से बचें, क्योंकि इससे स्पष्टता कम होती है और त्रुटि हैंडलिंग अधिक कठिन हो जाती है।

6.3 Javadoc में @throws टैग का उपयोग करें

जब आप API या लाइब्रेरी प्रदान करते हैं, तो आपको Javadoc टिप्पणियों में @throws टैग का उपयोग करके अपवादों का दस्तावेज़ीकरण करना चाहिए। यह स्पष्ट रूप से उन स्थितियों को समझाता है जिनमें अपवाद होते हैं, जिससे API उपयोगकर्ता सही अपवाद हैंडलिंग लागू कर सकें।

/**
 * Reads a file.
 * @param filePath Path of the file to read
 * @throws IOException If the file cannot be read
 */
public void readFile(String filePath) throws IOException {
    // ...
}

6.4 अनावश्यक अपवाद पुनः-थ्रो से बचें

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

6.5 कस्टम अपवाद वर्गों का उपयोग

व्यावसायिक अनुप्रयोगों और बड़े सिस्टमों में, कस्टम अपवाद वर्ग परिभाषित करना और उन्हें throws घोषणाओं में शामिल करना सामान्य है। यह त्रुटि कारणों और जिम्मेदारियों को स्पष्ट करने में मदद करता है, जिससे सिस्टम को बनाए रखना और विस्तारित करना आसान हो जाता है।

public class DataNotFoundException extends Exception {
    public DataNotFoundException(String message) {
        super(message);
    }
}

public void findData() throws DataNotFoundException {
    // Throw when data is not found
}

throws का उचित उपयोग करके, आप अपवाद हैंडलिंग की जिम्मेदारी वितरित कर सकते हैं, समस्या निवारण को सरल बना सकते हैं, और विश्वसनीय तथा सुरक्षित जावा अनुप्रयोग बना सकते हैं।

7. व्यावहारिक अपवाद हैंडलिंग पैटर्न

जावा में अपवाद हैंडलिंग केवल साधारण try-catch ब्लॉकों या throws घोषणाओं से अधिक है। यह अध्याय वास्तविक विकास में सामान्यतः उपयोग किए जाने वाले व्यावहारिक पैटर्न और डिज़ाइन रणनीतियों को प्रस्तुत करता है।

7.1 try-with-resources के साथ संसाधन प्रबंधन

फ़ाइलों, नेटवर्क कनेक्शनों या डेटाबेस कनेक्शनों के साथ काम करते समय, अपवाद होने पर भी संसाधनों को सही ढंग से मुक्त करना अत्यंत महत्वपूर्ण है। जावा 7 से, try-with-resources कथन संसाधनों को स्वचालित रूप से बंद करने की अनुमति देता है।

try (FileReader reader = new FileReader("data.txt")) {
    // File reading process
} catch (IOException e) {
    System.out.println("Failed to read file: " + e.getMessage());
}

यह सिंटैक्स सुनिश्चित करता है कि close() स्वचालित रूप से कॉल हो, जिससे अपवाद उत्पन्न होने पर भी संसाधन लीक नहीं होते।

7.2 कई अपवादों को कुशलतापूर्वक संभालना

जटिल ऑपरेशनों में कई प्रकार के अपवाद उत्पन्न हो सकते हैं। जावा 7 से, आप मल्टी‑कैच फीचर का उपयोग करके एक ही catch क्लॉज़ में कई अपवादों को पकड़ सकते हैं।

try {
    methodA();
    methodB();
} catch (IOException | SQLException e) {
    // Handle both exceptions here
    e.printStackTrace();
}

आप प्रत्येक अपवाद प्रकार के लिए अनुकूलित हैंडलिंग प्रदान करने हेतु अलग‑अलग catch ब्लॉक्स भी बना सकते हैं।

7.3 अपवाद हैंडलिंग के प्रदर्शन संबंधी विचार

हालांकि अपवाद शक्तिशाली होते हैं, उन्हें सामान्य नियंत्रण प्रवाह की जगह नहीं लेनी चाहिए। अपवाद उत्पन्न करने में काफी ओवरहेड लगता है क्योंकि स्टैक ट्रेस बनाना पड़ता है, इसलिए इन्हें केवल वास्तव में असाधारण मामलों में ही उपयोग किया जाना चाहिए। गलत उपयोग (सिफारिश नहीं की जाती):

try {
    int value = array[index];
} catch (ArrayIndexOutOfBoundsException e) {
    // Bounds checking should be done beforehand
}

सिफारिश किया गया उपयोग:

if (index >= 0 && index < array.length) {
    int value = array[index];
} else {
    // Out-of-range handling
}

7.4 लॉगिंग और सूचनाएँ

जब अपवाद होते हैं तो समस्या निवारण के लिए उचित लॉगिंग और अलर्टिंग आवश्यक हैं। व्यावसायिक सिस्टम अक्सर लॉगिंग फ्रेमवर्क (जैसे Log4j, SLF4J) का उपयोग करके विस्तृत अपवाद जानकारी रिकॉर्ड करते हैं।

catch (Exception e) {
    logger.error("An error has occurred", e);
}

7.5 कस्टम रिकवरी लॉजिक लागू करना

कुछ मामलों में, ऑपरेशन को पुनः प्रयास करना, कॉन्फ़िगरेशन फ़ाइलों को पुनः लोड करना या उपयोगकर्ताओं को सूचित करना जैसी रिकवरी लॉजिक लागू करना उपयोगी होता है। प्रोग्राम को तुरंत समाप्त करने के बजाय, संभव हो तो सेवा निरंतरता बनाए रखने का प्रयास करें। व्यावहारिक अपवाद‑हैंडलिंग तकनीकों को अपनाकर आप ऐसे जावा एप्लिकेशन बना सकते हैं जो विश्वसनीय और रखरखाव योग्य दोनों हों।

8. अक्सर पूछे जाने वाले प्रश्न (FAQ)

नीचे जावा अपवाद हैंडलिंग, विशेष रूप से “throws” के बारे में शुरुआती लोगों के सामान्य प्रश्न और उनके उत्तर दिए गए हैं।

Q1. throw और throws के बीच मुख्य अंतर क्या है?

throw एक कीवर्ड है जो प्रोग्राम निष्पादन के दौरान वास्तव में एक अपवाद उत्पन्न करता है।
throws का उपयोग मेथड डिक्लेरेशन में यह बताने के लिए किया जाता है कि मेथड अपवाद फेंक सकता है।
→ इसे याद रखने का एक अच्छा तरीका: throw = “चलाना”, throws = “घोषित करना”।

Q2. throws का उपयोग करते समय मुझे किन बातों का ध्यान रखना चाहिए?

throws के साथ घोषित किए गए अपवादों को या तो कॉलर द्वारा पकड़ा जाना चाहिए या आगे throws के माध्यम से प्रसारित किया जाना चाहिए। चेक्ड अपवादों के लिए स्पष्ट हैंडलिंग अनिवार्य है। यदि आप अपवाद को नहीं पकड़ते या प्रसारित नहीं करते, तो प्रोग्राम कंपाइल नहीं होगा।

Q3. क्या throw और throws को साथ‑साथ उपयोग किया जा सकता है?

हाँ। एक सामान्य पैटर्न यह है कि मेथड के भीतर throw का उपयोग करके अपवाद फेंका जाए और उसी अपवाद को throws के साथ घोषित किया जाए ताकि वह कॉलर तक प्रसारित हो सके।

Q4. throws का उपयोग करके कई अपवादों को कैसे घोषित करूँ?

throws कीवर्ड के बाद उन्हें कॉमा से अलग करके सूचीबद्ध करें। उदाहरण: public void sample() throws IOException, SQLException

Q5. क्या मुझे अनचेक्ड अपवादों के साथ throws का उपयोग करना चाहिए?

अनचेक्ड अपवाद (जो RuntimeException को विस्तारित करते हैं) के लिए throws डिक्लेरेशन आवश्यक नहीं है। हालांकि, यदि आप कॉलर को स्पष्ट रूप से बताना चाहते हैं कि मेथड एक विशिष्ट अनचेक्ड अपवाद फेंक सकता है, तो पढ़ने में आसानी और API स्पष्टता के लिए throws का उपयोग किया जा सकता है।

Q6. क्या यह ठीक है कि मैं throws क्लॉज़ में Exception या Throwable घोषित करूँ?

तकनीकी रूप से हाँ, लेकिन यह सिफारिश नहीं की जाती। बहुत व्यापक अपवाद प्रकारों को घोषित करने से यह स्पष्ट नहीं रहता कि कौन‑से त्रुटियाँ हो सकती हैं और कॉलर पर उचित हैंडलिंग कठिन हो जाती है। संभव हो तो विशिष्ट अपवाद क्लासों का उपयोग करें।

Q7. क्या मुझे हमेशा उन अपवादों को पकड़ना चाहिए जो throws में घोषित किए गए हैं?

A7.
जाँच किए गए अपवादों (checked exceptions) के लिए, कॉलर को या तो अपवाद को पकड़ना (catch) चाहिए या उसे throws के माध्यम से आगे प्रसारित (propagate) करना चाहिए।
ऐसा न करने पर संकलन (compilation) त्रुटि उत्पन्न होगी।
अनजाँच अपवादों (unchecked exceptions) को इनमें से किसी की आवश्यकता नहीं होती।

Q8. यदि मैं throws लिखना भूल जाऊँ तो क्या होगा?

A8.
यदि कोई मेथड जाँच किए गए अपवाद (checked exception) को थ्रो करता है लेकिन उसे throws के साथ घोषित नहीं करता, तो संकलन‑समय (compile-time) त्रुटि उत्पन्न होगी।
अनजाँच अपवादों (unchecked exceptions) के लिए, मेथड बिना throws के भी सामान्य रूप से संकलित हो जाता है, लेकिन उचित त्रुटि प्रबंधन (error handling) अभी भी लागू किया जाना चाहिए।
जावा में अपवाद प्रबंधन (exception handling) की अपनी समझ को गहरा करने के लिए इस FAQ अनुभाग का उपयोग करें।