2010-10-06 11 views
65

मैं अपने आदेश पंक्ति तर्कजावा: जाँच करें कि आदेश पंक्ति तर्क अशक्त हैं

public static void main(String[] args) 
{ 
    if(args[0] == null) 
    { 
     System.out.println("Proper Usage is: java program filename"); 
     System.exit(0); 
    } 
} 

हालांकि, इस सीमा अपवाद है, जो समझ में आता है से बाहर एक सरणी रिटर्न के लिए जाँच कुछ त्रुटि करने के लिए देख रहा हूँ। मैं सिर्फ उचित उपयोग की तलाश में हूं।

उत्तर

117

तर्क कभी नहीं null हो सकता है। वे बस अस्तित्व में नहीं होंगे।

दूसरे शब्दों में, आप क्या करने की जरूरत है अपने तर्कों की लंबाई की जांच है।

public static void main(String[] args) 
{ 
    // Check how many arguments were passed in 
    if(args.length == 0) 
    { 
     System.out.println("Proper Usage is: java program filename"); 
     System.exit(0); 
    } 
} 
-8

यदि आप कोई तर्क नहीं देते हैं तो भी उस मामले में तर्क शुरू हो जाते हैं लेकिन बिना किसी आइटम/तत्व के। के बाद एक कोशिश करें, आप ही प्रभाव मिल जाएगा:


public static void main(String[] args) throws InterruptedException { 
     String [] dummy= new String [] {}; 
     if(dummy[0] == null) 
     { 
      System.out.println("Proper Usage is: java program filename"); 
      System.exit(0); 
     } 

    } 
 
+1

यह पूरी तरह गलत है। यदि कोई आदेश कमांड लाइन तर्क के साथ लॉन्च किया गया है, तो 'मुख्य' विधि को 'args' सरणी के साथ बुलाया जाएगा जिसका लंबाई शून्य है। –

+0

@Stephen बिना किसी तत्व के एक सरणी, शून्य लंबाई है। तो मेरे जवाब के बारे में क्या गलत है? –

+0

@ पुस्पेन्दु - क्या गलत है कि 'डमी [0]' सीमा अपवाद से बाहर एक सरणी सूचकांक फेंकता है !! अगर आप प्रोग्राम (बैक) को 'args [0]' का परीक्षण करने के लिए बदलते हैं और इसे बिना किसी तर्क के चलाते हैं। –

12

@ jjnguy के जवाब सबसे परिस्थितियों में सही है। यदि आप कभी भी तर्क सरणी में एक null स्ट्रिंग (या एक null सरणी) main अनुप्रयोग चल सामान्य ढंग से कार्य कमांड लाइन से संचालित है के द्वारा कहा जाता है अगर नहीं दिखाई देगा।

हालांकि, अगर आवेदन के किसी अन्य भाग एक main प्रणाली को बुलाती है, यह कल्पना है कि यह एक null तर्क या null तर्क सरणी पारित हो सकता है।

हालांकि (2), यह स्पष्ट रूप से एक बेहद असामान्य यूज-केस और है, यह एक main प्रवेश बिंदु विधि के लिए गर्भित अनुबंध का गंभीर उल्लंघन है। इसलिए, मुझे नहीं लगता कि आपको main में null तर्क मानों की जांच करना परेशान होना चाहिए। वे होने वाली संभावित घटना में, कॉलिंग कोड को NullPointerException प्राप्त करने के लिए स्वीकार्य है। आखिरकार, यह कॉलर में अनुबंध का उल्लंघन करने के लिए एक बग है।

0

आपको (args == null || args.length == 0) के लिए जांच करनी चाहिए। हालांकि null चेक की वास्तव में आवश्यकता नहीं है, यह एक अच्छा अभ्यास है।

6

इस बिंदु पर विस्तार करने के लिए:

ऐसा नहीं है कि आर्ग चर ही अशक्त हो जाएगा संभव है, लेकिन सामान्य निष्पादन के माध्यम से नहीं। सामान्य निष्पादन कमांड लाइन से प्रविष्टि बिंदु के रूप में java.exe का उपयोग करेगा। हालांकि, मैंने कुछ प्रोग्राम देखे हैं जो java.exe को पूरी तरह से बाईपास करके jvm.dll का उपयोग करने के लिए जेएनआई के साथ संकलित C++ कोड का उपयोग करते हैं। इस मामले में, NULL को मुख्य विधि में पास करना संभव है, जिसमें मामला तर्क शून्य होगा।

मैं आपकी आवश्यकता के आधार पर हमेशा if ((args == null) || (args.length == 0)), या if ((args != null) && (args.length > 0)) की जांच करने की सलाह देता हूं।

संबंधित मुद्दे