2013-02-25 7 views
6

मैं 1Z0-851 Oracla जावा SE 1.6 प्रमाणन के लिए अध्ययन कर रहा हूँ और मैं इस सवाल को देखा:जावा जोर बयान उपयोग, परीक्षा प्रमाणन 1Z0-851

Question from test

मैं सही एक के रूप में पहले विकल्प के रूप में चिह्नित और अनुत्तीर्ण होना! "सभी जोरदार बयान उचित रूप से उपयोग किए जाते हैं" और उत्तर कहता है कि पहला assert(x > 0); गलत है .. सवाल यह है कि क्यों?

+1

शब्द "उचित उपयोग" बहुत व्यक्तिपरक है, इसलिए भ्रम की स्थिति है। उन्हें उस प्रश्न को स्पष्ट करना चाहिए। –

+0

यह भी देखें [उत्तर] (http://stackoverflow.com/questions/1957645/when-to-use-assertion-vs-exception) – Amarnath

+1

यह वास्तव में मदद करेगा यदि उन्होंने कोड नमूना का उपयोग किया जो कि एक छोटी राशि भी बना समझ में – asteri

उत्तर

4

सही जवाब दावे

के इस

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

src: http://www.freejavaguide.com/java-scjp-part1.pdf

+0

gooooood आदमी !!! अंत में सही जवाब !!! – thiagoh

+0

+1 अच्छा, उसे नहीं पता था। हालांकि व्यक्तिगत रूप से मैं केवल यूनिट परीक्षणों में कभी भी दावा का उपयोग करता हूं ..! – cowls

1

यदि आप केवल पहले जोर देने वाले कथन को पढ़ते हैं - जिसे इसकी स्थिति के कारण "पूर्व शर्त" के रूप में व्याख्या किया जाना चाहिए - इसका तात्पर्य है कि फ़ंक्शन को किसी भी सकारात्मक int मान के साथ ठीक से काम करना चाहिए, जो सत्य नहीं है। इसलिए, वह दावा भ्रामक है।

+0

फ़ंक्शन x के किसी भी मान के लिए काम नहीं करता है। या तो यह एक ऋणात्मक संख्या है और पहले विफल रहता है, या यह झूठी बात करता है। – asteri

3

लाइन 12 अनावश्यक है।

अगर आप इसे हटा सकते हैं, लाइन 15 पर जोर मामले को कवर किया जाएगा जहां x <= 0

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

0

go2 से शुरू हो रहा है, यह जोर से समझना आसान है।
विधि कुछ भी नहीं करता है, यह सिर्फ आपकी उम्मीद पर जोर देता है, x < 0

दूसरी ओर, go विधि, switch है।
यह default खंड पर assert false करना एक अच्छी आदत है अगर आप बिल्कुल अपने कार्यक्रम इस धारा के अंतर्गत गिरावट की उम्मीद नहीं है, यानी, सामान्य परिस्थितियों में, case रों में से एक सही हो गया है।

switch पर केवल मामले की उम्मीद xबिल्कुल2 किया जाना है।
तो, समेकित करने के लिए, x से 0 से अधिक होने की उम्मीद नहीं है, जैसा कि पहले दावा के अनुसार, आप x2 और कुछ भी नहीं होने की उम्मीद करते हैं। इस प्रकार, दावा उचित रूप से उपयोग नहीं किया जाता है।

लेकिन, जैसा कि Jeff बताया गया है, case कोई break, जो default हमेशा की तरह, निष्पादित किया जाएगा प्रमुख, हर स्थिति में, assert false का मतलब है।

निष्कर्ष:go विधि हमेशा एक त्रुटि में परिणाम चाहिए, assert false ठीक से इस्तेमाल कर रही है, जबकि assert x > 0 बिल्कुल सही नहीं है।

+1

सिवाय इसके कि 'केस 2' में कोई संबंधित 'ब्रेक' नहीं है, जिसका अर्थ है कि यह हमेशा 'झूठ बोलने' के माध्यम से भी गिर जाएगा। – asteri

+0

अच्छी तरह से देखा गया। मैंने स्वचालित रूप से 'ब्रेक' ग्रहण किया। – afsantos

+0

मुझे भी जब मैंने इसे पहले पढ़ा था। यही कारण है कि मुझे अपना जवाब हटाना पड़ा। हाहा – asteri

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