2012-08-31 20 views
6

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

+0

[जावा मूल निवासी इंटरफ़ेस प्रोग्रामर की मार्गदर्शिका और विशिष्टता] (http://java.sun.com/docs/books/jni/html/jniTOC.html) – Sujay

+0

@Sujay THX! मैं समझ गया – blackdog

उत्तर

16

JNI Programmer's Guide and Specification:

यहाँ कार्य करता है और संकेत के विषय में JNI डॉक्स के प्रासंगिक अनुभाग है

"JNI वर्ग लागू नहीं करता है, क्षेत्र, और विधि अभिगम नियंत्रण प्रतिबंध जिन्हें जावा प्रोग्रामिंग भाषा स्तर पर निजी और अंतिम जैसे संशोधकों के उपयोग के माध्यम से व्यक्त किया जा सकता है। जावा में ऐसा करने के बावजूद किसी ऑब्जेक्ट के फ़ील्ड को एक्सेस या संशोधित करने के लिए मूल कोड लिखना संभव है प्रोग्रामिंग भाषा स्तर एक के लिए नेतृत्व करेंगे एन IllegalAccessException। । JNI के सहनशीलता एक सचेत डिजाइन निर्णय, दिया गया था कि मूल कोड वैसे भी पहुँच सकते हैं और ढेर में किसी भी स्मृति स्थान संशोधित कर सकते हैं "

तो अपने प्रश्नों के उत्तर दिए गए हैं:

यह एक फोन कर सकते हैं निजी विधि?

हां।

अगर यह एक हाँ है, तो केवल रों में एमई कक्षा या कोई अन्य कक्षाएं?

कोई भी वर्ग।

यदि यह दूसरे को कॉल कर सकता है, तो क्या यह एक समस्या है कि शायद यह खतरनाक है? यानी, यह नियम तोड़ दिया। सामान्य जावा पहुँच नियमों को लागू करने के लिए प्रयास नहीं करने के लिए

डिजाइनर 'औचित्य स्पष्ट रूप से पाठ ऊपर उद्धृत में कहा गया है। हां यह संभावित रूप से खतरनाक है, लेकिन किसी भी जेएनआई का उपयोग संभावित रूप से खतरनाक है।

3

आप जावा ऑब्जेक्ट पर निजी विधियों को कॉल कर सकते हैं जो जेएनआई इंटरफेस के माध्यम से देशी विधि में पास हो जाते हैं। जावा के भीतर यह वही बात नहीं है, अन्य जावा ऑब्जेक्ट्स पर कॉलिंग विधियां। आपको बहुत सावधान रहना होगा क्योंकि जेएनआई क्लास, फ़ील्ड और विधि एक्सेस कंट्रोल प्रतिबंधों को लागू नहीं करता है जो private और final जैसे संशोधक के उपयोग के माध्यम से व्यक्त किए जाते हैं। तो यह खतरनाक हो सकता है। उदाहरण के लिए, जेआईटी कंपाइलर ने इसे रेखांकित करने के बाद मूल कोड final कक्षा के निरंतर क्षेत्र को संशोधित कर सकता है। में "10.9 का उल्लंघन अभिगम नियंत्रण नियम" इस कहते हैं http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp16696

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