2015-10-06 4 views
7

क्या जावा में प्रदर्शन, मेमोरी, संकलन-समय इत्यादि के संदर्भ में "इनलाइन आयात" (पूरी तरह से योग्य नाम) और सामान्य आयात का उपयोग करने में कोई अंतर है?जावा में पूरी तरह से योग्य नाम और आयात का उपयोग करने के बीच अंतर

chooser.setCurrentDirectory(new java.io.File(".")); 

और

import java.io.File; 
... 
    chooser.setCurrentDirectory(new File(".")); 
+4

कोई फर्क नहीं पड़ता, केवल दूसरा समाधान अधिक पठनीय है। अन्यथा कक्षाओं का संघर्ष होने पर आपको केवल 'इनलाइन आयात' का उपयोग करना चाहिए। – hotzst

+1

मैं सुझाव दूंगा कि आप बेहतर पठनीयता के लिए दूसरे का उपयोग करें। और प्रदर्शन के बारे में चिंता करें जब आपके पास माप होता है जो खराब करता है। – Kuchi

उत्तर

9

मुख्य बात जो आपको ध्यान में रखनी चाहिए वह पठनीयता है। मुझे दूसरा एक और पठनीय लगता है।

दुर्लभ मामलों में, मैं दूसरा दृष्टिकोण पसंद करता हूं। आइए निम्नलिखित परिदृश्य पर विचार करें: किसी कारण से, मैंने एक कक्षा लिखी और इसे File नाम दिया। मैंने File file = new File(...) टाइप किया और मेरे आईडीई ने मेरे लिए java.io.File ऑटो-आयात किया। लेकिन मैं उस तरह की वस्तु नहीं चाहता, मुझे मेराFile कक्षा चाहिए। तो सही वर्ग आयात करने की बजाय, मैं इसे इनलाइन-आयात करना पसंद करता हूं, बस अन्य उपयोगकर्ता जावा की File कक्षा से भ्रमित नहीं होंगे।

प्रदर्शन के संबंध में उसने वास्तव में कर रहे हैं ही, और यहाँ सबूत है -

यह पहला टुकड़ा के लिए उत्पन्न बाईटकोड है:

public class java8.tests.General { 
    public java8.tests.General(); 
    Code: 
     0: aload_0 
     1: invokespecial #1     // Method java/lang/Object."<init>":()V 
     4: return 

    public static void main(java.lang.String[]); 
    Code: 
     0: new   #2     // class javax/swing/JFileChooser 
     3: dup 
     4: invokespecial #3     // Method javax/swing/JFileChooser."<init>":()V 
     7: astore_1 
     8: aload_1 
     9: new   #4     // class java/io/File 
     12: dup 
     13: ldc   #5     // String . 
     15: invokespecial #6     // Method java/io/File."<init>":(Ljava/lang/String;)V 
     18: invokevirtual #7     // Method javax/swing/JFileChooser.setCurrentDirectory:(Ljava/io/File;)V 
     21: return 
} 

इस पल के लिए बाईटकोड है :

public class java8.tests.General { 
    public java8.tests.General(); 
    Code: 
     0: aload_0 
     1: invokespecial #1     // Method java/lang/Object."<init>":()V 
     4: return 

    public static void main(java.lang.String[]); 
    Code: 
     0: new   #2     // class javax/swing/JFileChooser 
     3: dup 
     4: invokespecial #3     // Method javax/swing/JFileChooser."<init>":()V 
     7: astore_1 
     8: aload_1 
     9: new   #4     // class java/io/File 
     12: dup 
     13: ldc   #5     // String . 
     15: invokespecial #6     // Method java/io/File."<init>":(Ljava/lang/String;)V 
     18: invokevirtual #7     // Method javax/swing/JFileChooser.setCurrentDirectory:(Ljava/io/File;)V 
     21: return 
} 
4

नहीं दोनों प्रदर्शन, स्मृति के मामले में बिल्कुल एक जैसे हैं, संकलन समय। उनके बीच एकमात्र अंतर यह है कि सामान्य आयात आपके टाइपिंग प्रयासों को बचाता है और यह अधिक पठनीय है कि 'यह।

2

आप एक वर्ग में एक ही नाम की कक्षाओं आयात कर रहे हैं, तो आप स्पष्ट रूप से जो एक का उपयोग करने के यह बता सकते हैं जहां (पूर्ण वर्ग के नाम):

import java.io.File; 
... 
chooser.setCurrentDirectory(new File(".")); // java.io.File 

new org.yourpackage.File("sdfsdf");   // org.yourpackage.File 
2

नहीं, यह wouldn ' टी आपके कोड के प्रदर्शन को प्रभावित करता है। आयात विवरण आपके कोड को अधिक पठनीय बनाते हैं क्योंकि आप अपना सभी पैकेज नाम नहीं लिख रहे हैं। लेकिन कभी-कभी, आपके पास कक्षा नामों का संघर्ष होता है, तो योग्य नामों का उपयोग करने की सलाह दी जाती है।

1

जावा वर्गों में हमेशा अंतिम बाईटकोड में उनकी पूरी तरह से योग्य नाम से संदर्भित कर रहे हैं। यह पहली बार होता है जब वर्ग की वस्तु बनाई जाती है (या कक्षा का स्थिर सदस्य एक्सेस किया जाता है)।

उस ने कहा, import का उपयोग कंप्रेसर द्वारा उनके अयोग्य नाम (MyClassmypackage.MyClass के बजाय) तक कक्षाओं तक पहुंचने के लिए किया जाता है।

तो वर्ग आयात करने के बीच 0 अंतर या स्पष्ट रूप से पूरी तरह से योग्य नाम लिखने के बीच 0 अंतर है - यह केवल पठनीयता की बात है, कुछ टाइपिंग बचाता है और समान नाम वाले वर्गों के बीच संघर्ष को रोकने में मदद करता है।

3

यह केवल निम्नलिखित मामले में मायने रखती है,

आप एक वर्ग जो गुणकों संकुल में उपलब्ध है उपयोग करना चाहते हैं। यानी तिथि वर्ग java.util & जावा में उपलब्ध है।एसक्यूएल

आप प्रोग्राम की शुरुआत में उपर्युक्त कक्षा में से एक आयात कर सकते हैं, और किसी अन्य के लिए योग्य वाक्यविन्यास का उपयोग कर सकते हैं।

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