ব্যতিক্রম এবং ত্রুটির মধ্যে পার্থক্য


173

আমি বেসিক জাভা এবং বিভিন্ন ধরণের থ্রোয়েবাল সম্পর্কে আরও জানার চেষ্টা করছি, কেউ কি আমাকে ব্যতিক্রম এবং ত্রুটিগুলির মধ্যে পার্থক্য জানতে দিতে পারে?

উত্তর:


178

ত্রুটিগুলি ধরা বা পরিচালনা করা উচিত নয় (মামলার বিরল বাদে)। ব্যতিক্রম ব্যতিক্রম হ্যান্ডলিংয়ের রুটি এবং মাখন। Javadoc এটা ভাল ব্যাখ্যা করে:

একটি ত্রুটি থ্রোয়েবলের একটি সাবক্লাস যা গুরুতর সমস্যাগুলি নির্দেশ করে যা যুক্তিসঙ্গত প্রয়োগটি ধরার চেষ্টা করা উচিত নয়। এ জাতীয় বেশিরভাগ ত্রুটিগুলি অস্বাভাবিক শর্ত।

Errorতাদের জাভাডকের কয়েকটি মন্তব্য নিয়ে কয়েকটি সাবক্লাসটি দেখুন :

  • AnnotationFormatError - এনোটেশন পার্সার যখন ক্লাস ফাইল থেকে একটি টীকা পড়ার চেষ্টা করে এবং লক্ষ্য করে যে টীকাটি ত্রুটিযুক্ত Th
  • AssertionError - দৃ as়ভাবে বলা হয়েছে যে একটি দৃser়তা ব্যর্থ হয়েছে।
  • LinkageError- লিঙ্কেজেরর সাবক্লাসগুলি ইঙ্গিত দেয় যে একটি শ্রেণীর অন্য শ্রেণীর উপর কিছুটা নির্ভরতা থাকে; তবে পূর্ববর্তী শ্রেণীর সংকলনের পরে উত্তর শ্রেণিটি অসম্পূর্ণভাবে পরিবর্তিত হয়েছে।
  • VirtualMachineError - জাভা ভার্চুয়াল মেশিনটি ভাঙা হয়েছে বা এটি চালিয়ে যাওয়ার জন্য প্রয়োজনীয় সংস্থানগুলি শেষ হয়ে গেছে তা বোঝাতে ছুড়ে দেওয়া হয়েছিল।

এর তিনটি গুরুত্বপূর্ণ উপশ্রেণী রয়েছে Throwable:

  • Error - সমস্যাটি হ্যান্ডেল করার পরিবর্তে বেশিরভাগ অ্যাপ্লিকেশনের ক্রাশ হওয়া উচিত enough
  • চেক করা ব্যতিক্রম (ওরফে RuntimeException) - খুব প্রায়ই প্রোগ্রামিং ত্রুটি যেমন একটি NullPointerExceptionবা অবৈধ যুক্তি। অ্যাপ্লিকেশনগুলি কখনও কখনও এই Throwableবিভাগটি থেকে পরিচালনা করতে পারে বা পুনরুদ্ধার করতে পারে - বা কমপক্ষে এটি থ্রেডের run()পদ্ধতিতে ধরতে পারে , অভিযোগটি লগ করতে এবং চালিয়ে যাওয়া চালিয়ে যেতে পারে।
  • চেক ইন ব্যতিক্রম (অন্য সব কিছুর ওরফে) - অ্যাপ্লিকেশন যেমন ধরা ও অর্থপূর্ণ অংশের সাথে কিছু করতে, পাবে বলে আশা করা হয় FileNotFoundExceptionএবং TimeoutException...

10
ওরাকল বলেছেন যে Unchecked exceptions != RuntimeExceptions; Unchecked exceptions = RuntimeExceptions + Errors। আমি জানি যে এটি প্রশ্ন উত্থাপন করে: ত্রুটিটি কি ব্যতিক্রম? , তবে এটি তারা লিখেন। এখানে সেই উদাহরণগুলির মধ্যে একটি মাত্র: ডকস.অরাকল . com / জাভাস / টিউটোরিয়াল / এসেনসিয়াল / এক্সেপশনস / ……
রোমানিয়া_আজ্ঞানী

1
অনুত্তরিত প্রশ্ন হল কিভাবে RuntimeException এবং ত্রুটি সারাংশ মধ্যে আলাদা? উভয়ই চেক করা এবং অন্যভাবে সমান।
পেসারিয়ার

38

@ জর্জিও-গুসিওস দ্বারা জাভাটির ব্যতিক্রম শ্রেণিবিন্যাস দেখানো এই স্লাইডটি জাভায় ত্রুটি এবং ব্যতিক্রমগুলির মধ্যে পার্থক্যগুলি সংক্ষেপে ব্যাখ্যা করেছে।

জাভা ব্যতিক্রম হায়ারার্কি


6
আমি একজন নুলপয়েন্টার এক্সসেপশন থেকে কেউ পুনরুদ্ধার করতে দেখতে চাই: ডি: ডি: ডি
ইগনাসিও সোলার গার্সিয়া

2
@ ইগানাসিওসোলারগার্সিয়া এটি হতে পারে এবং এর বুদ্ধিও রয়েছে (অন্য প্রশ্নটি যদি ভাল হয় তবে)। সাধারণত আপনি চেক করে দেখুন যে অবজেক্টটি বিদ্যমান এবং তার পরে পদ্ধতিটি কল করুন বা ক্ষেত্রটি ব্যবহার করুন। তবে আপনি অস্তিত্বের জন্য পরীক্ষা করার পরিবর্তে এনপিই ধরার চেষ্টা করতে পারেন। এবং এটি সম্পর্কে একটি বার্তা লগ ইন এবং উদাহরণস্বরূপ যান।
গাংনাস

@ গাংনাস: কোনও ধারণা নেই। মনে রাখবেন যে একটি ব্যতিক্রম কোডের অংশগুলি এড়িয়ে যায় এবং ত্রুটিগুলি
Ignacio Soler Garcia

17

ত্রুটিগুলি আপনার অ্যাপ্লিকেশনটির শেষের সংকেত দেয় যা আপনি জানেন। এটি সাধারণত থেকে পুনরুদ্ধার করা যায় না এবং এটি আপনার ভিএম থেকে প্রস্থান করতে পারে। সম্ভবত লগ করা বা প্রদর্শন এবং প্রস্থান করার আগে যথাযথ বার্তা ব্যতীত এগুলি ক্যাচিং করা উচিত নয়।

উদাহরণ: আউটআফমিউরিওরির - আপনার প্রোগ্রামটি আর চালাতে না পারার মতো আপনি বেশি কিছু করতে পারবেন না।

ব্যতিক্রমগুলি প্রায়শই পুনরুদ্ধারযোগ্য এবং এমনকি না হলেও, তাদের সাধারণত বোঝানো হয় একটি চেষ্টা করা অপারেশন ব্যর্থ হয়েছিল, তবে আপনার প্রোগ্রামটি এখনও চালিয়ে যেতে পারে।

উদাহরণ: অবৈধ অর্গমেন্ট এক্সেপশন - কোনও পদ্ধতিতে অবৈধ তথ্য পাস করেছে যাতে সেই পদ্ধতি কলটি ব্যর্থ হয়, তবে এটি ভবিষ্যতের ক্রিয়াকলাপগুলিকে প্রভাবিত করে না।

এগুলি সরল উদাহরণ এবং কেবলমাত্র ব্যতিক্রম সম্পর্কিত তথ্যের আরও একটি সম্পদ রয়েছে।


উদাহরণ হিসাবে দেখুন । জাভাকোডিজেক্সস / জাভা- বেসিকস / এক্সেপশনস / ......... উদাহরণ হিসাবে। অবৈধআর্গুমেন্ট এক্সেপশনটি রানটাইম ব্যতিক্রম, ত্রুটি নয়। docs.oracle.com/javase/7/docs/api/java/lang/…
গাংনাস

8

ত্রুটিগুলি -

  1. Errorজাভা মধ্যে এস টাইপ হয় java.lang.Error
  2. জাভাতে সমস্ত ত্রুটিগুলি চেক করা টাইপ নয়।
  3. Errorরান সময় হয়। তারা সংকলক পরিচিত হবে না।
  4. ত্রুটিগুলি থেকে পুনরুদ্ধার করা অসম্ভব।
  5. Errorঅ্যাপ্লিকেশন চলমান পরিবেশের কারণে বেশিরভাগ ক্ষেত্রেই ঘটে।
  6. উদাহরণ: java.lang.StackOverflowError ,java.lang.OutOfMemoryError

ব্যতিক্রম -

  1. Exceptionজাভা মধ্যে এস টাইপ হয় java.lang.Exception
  2. Exceptionগুলি উভয় চেক পাশাপাশি চেক করা টাইপ অন্তর্ভুক্ত।
  3. চেক করা ব্যতিক্রমগুলি সংকলক হিসাবে পরিচিত যেখানে চেক করা ব্যতিক্রমগুলি সংকলক হিসাবে পরিচিত না কারণ তারা রান সময়ে ঘটে।
  4. আপনি try-catchব্লকগুলির মাধ্যমে পরিচালনা করে ব্যতিক্রমগুলি থেকে পুনরুদ্ধার করতে পারেন ।
  5. Exceptionগুলি মূলত অ্যাপ্লিকেশন থেকেই হয়।
  6. উদাহরণ: চেক ইন ব্যতিক্রমসমূহ: SQLException, IOException
    টিক চিহ্ন সরিয়ে দিলে ব্যতিক্রমসমূহ: ArrayIndexOutOfBoundException, ClassCastException,NullPointerException

আরো পড়ার: http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/ http://javaconceptoftheday.com/wp-content/uploads/2015/04/ErrorVsException.png


7

রোদ এটি সেরা রাখে :

একটি ত্রুটি থ্রোয়েবলের একটি সাবক্লাস যা গুরুতর সমস্যাগুলি নির্দেশ করে যা যুক্তিসঙ্গত প্রয়োগটি ধরার চেষ্টা করা উচিত নয়।


3

Errorশ্রেণীর বর্ণনা বেশ স্পষ্ট:

একটি Errorএটি একটি সাবক্লাস Throwable যা গুরুতর সমস্যাগুলি নির্দেশ করে যা যুক্তিসঙ্গত প্রয়োগটি ধরার চেষ্টা করা উচিত নয়। এ জাতীয় বেশিরভাগ ত্রুটিগুলি অস্বাভাবিক শর্ত। ThreadDeath ত্রুটি, যদিও একটি "স্বাভাবিক" অবস্থায়, এছাড়াও একটি উপশ্রেণী হয় Errorকারণ অধিকাংশ অ্যাপ্লিকেশন এটা ধরতে চেষ্টা করা উচিত নয়।

কোনও পদ্ধতি তার ছোঁড়াছুটিতে ঘোষণার প্রয়োজন হয় না Errorযে পদ্ধতিটি কার্যকর করার সময় যে কোনও সাবক্লাস ফেলে দেওয়া যেতে পারে তবে ধরা পড়ে না, কারণ এই ত্রুটিগুলি অস্বাভাবিক পরিস্থিতি যা কখনই ঘটে না।

জাভার নিজস্ব ক্লাসের ডকুমেন্টেশনError থেকে উদ্ধৃত ।

সংক্ষেপে, আপনার এস করা উচিত নয় Error, যদি আপনার এটি করার উপযুক্ত কারণ না থাকে। (উদাহরণস্বরূপ, কোনও সার্লেট স্মৃতিশক্তি বা এরকম কিছু শেষ হয়ে গেলে আপনার ওয়েব সার্ভারটি ক্র্যাশ হতে আটকাতে পারে))

একটি Exceptionঅন্যদিকে, অন্য কোন আধুনিক ভাষায় শুধু একটি স্বাভাবিক ব্যতিক্রম নয়। আপনি জাভা এপিআই ডকুমেন্টেশন বা কোনও অনলাইন বা অফলাইন সংস্থানতে একটি বিশদ বিবরণ পাবেন।


2

ক্লাস java.lang.Exceptionএবং এর মধ্যে বেশ কয়েকটি মিল এবং পার্থক্য রয়েছে java.lang.Error

মিল:

  • প্রথম - উভয় শ্রেণীর প্রসারিত java.lang.Throwableএবং এর ফলে পদ্ধতি যা ব্যবহার করা সাধারণ যখন যেমন ত্রুটি সাথে ডিল করার অনেক উত্তরাধিকারী: getMessage, getStackTrace,printStackTrace ইত্যাদি।

  • দ্বিতীয়ত, java.lang.Throwableউভয়েরই সাবক্লাস হওয়ায় নিম্নলিখিত বৈশিষ্ট্যগুলি উত্তরাধিকার সূত্রে প্রাপ্ত:

    • থ্রোয়েবল নিজেই এবং এর যে কোনও সাবক্লাস (সহ java.lang.Error) throwsকীওয়ার্ড ব্যবহার করে পদ্ধতি ব্যতিক্রম তালিকায় ঘোষণা করা যেতে পারে । এই জাতীয় ঘোষণাপত্রের জন্য কেবল java.lang.Exceptionএবং সাবক্লাসের জন্য প্রয়োজন java.lang.Throwable, java.lang.Errorএবং java.lang.RuntimeExceptionএবং তাদের সাবক্লাসগুলি এটি alচ্ছিক।

    • java.lang.Throwableক্লজটিতে কেবল এবং সাবক্লাস ব্যবহার করার অনুমতি দেওয়া হয়েছিল catch

    • কেবলমাত্র java.lang.Throwableএবং সাবক্লাসগুলি কীওয়ার্ড - সহ ব্যবহার করা যেতে পারে throw

এই সম্পত্তি থেকে উপসংহার উভয় অনুসরণ করে java.lang.Errorএবং java.lang.Exceptionপদ্ধতি শিরোনামে ঘোষণা করা যেতে পারে, হতে পারেcatch শর্তে থাকতে পারে, কীওয়ার্ড সহ ব্যবহার করা যেতে পারে throw

পার্থক্য:

  • প্রথম - ধারণাগত পার্থক্য: java.lang.Errorজেভিএম দ্বারা ছুঁড়ে ফেলার জন্য নকশাকৃত এবং গুরুতর সমস্যাগুলি ইঙ্গিত করেছে এবং ধরা পড়ার পরিবর্তে প্রোগ্রামের সম্পাদন বন্ধ করার উদ্দেশ্যে করা হয়েছে (তবে এটি অন্য কোনও হিসাবে সম্ভবjava.lang.Throwable উত্তরসূরির )।

    জাভাডোক বর্ণনা থেকে একটি প্যাসেজ java.lang.Error:

    ... গুরুতর সমস্যাগুলি নির্দেশ করে যা যুক্তিসঙ্গত প্রয়োগটি ধরার চেষ্টা করা উচিত নয়।

    বিপরীতে java.lang.Exception এমন ত্রুটিগুলি উপস্থাপনের জন্য ডিজাইন করা হয়েছে যা প্রত্যাশিত এবং প্রোগ্রামার সম্পাদন বন্ধ না করে কোনও প্রোগ্রামার দ্বারা পরিচালিত হতে পারে।

    জাভাডোক বর্ণনা থেকে একটি প্যাসেজ java.lang.Exception:

    ... একটি যুক্তিসঙ্গত অ্যাপ্লিকেশন ধরতে চাইতে পারে এমন পরিস্থিতিতে নির্দেশ করে।

  • দ্বিতীয় পার্থক্য java.lang.Errorএবং java.lang.Exceptionযে প্রথমে একটি হিসেবে বিবেচনা করা অবারিত কম্পাইল-টাইম ব্যতিক্রম পরীক্ষণের জন্য ব্যতিক্রম। ফলাফল কোড নিক্ষেপ java.lang.Errorবা এর উপশ্রেণীগুলিকে পদ্ধতি শিরোনামে এই ত্রুটিটি ঘোষণার প্রয়োজন হয় না। java.lang.Exceptionপদ্ধতি শিরোনামে প্রয়োজনীয় ঘোষণা নিক্ষেপ করার সময় ।

নিক্ষেপযোগ্য এবং এর উত্তরসূরি শ্রেণীর ডায়াগ্রাম (বৈশিষ্ট্য এবং পদ্ধতি বাদ দেওয়া হয়)। এখানে চিত্র বর্ণনা লিখুন


1

আইএমও ত্রুটি এমন একটি বিষয় যা আপনার অ্যাপ্লিকেশনটিকে ব্যর্থ করতে পারে এবং পরিচালনা করা উচিত নয়। একটি ব্যতিক্রম এমন একটি বিষয় যা প্রত্যাশিত ফলাফলের কারণ হতে পারে তবে তা থেকে পুনরুদ্ধার করা যায়।

উদাহরণ:

যদি কোনও প্রোগ্রামের স্মৃতি শেষ না হয় তবে এটি ত্রুটি কারণ অ্যাপ্লিকেশনটি চালিয়ে যেতে পারে না। তবে, কোনও প্রোগ্রাম যদি কোনও ভুল ইনপুট প্রকার গ্রহণ করে তবে এটি ব্যতিক্রম কারণ প্রোগ্রামটি এটি পরিচালনা করতে পারে এবং সঠিক ইনপুট প্রকারটি পুনর্নির্দেশ করতে পারে।


1

ত্রুটিগুলি মূলত সেই পরিবেশে তৈরি হয় যেখানে অ্যাপ্লিকেশন চলছে। উদাহরণস্বরূপ, জেভিএম মেমরির বাইরে চলে যায় বা স্ট্যাক ওভারফ্লো এরির যখন স্ট্যাক ওভারফ্লো হয় তখন আউটআফমিউরিরির ঘটে।

ব্যতিক্রমগুলি মূলত অ্যাপ্লিকেশন থেকেই হয়। উদাহরণস্বরূপ, নালপয়েন্টার এক্সসেপশনটি ঘটে যখন কোনও অ্যাপ্লিকেশন নাল অবজেক্ট অ্যাক্সেস করার চেষ্টা করে বা ক্লাসকাস্টএক্সসেপশন ঘটে যখন কোনও অ্যাপ্লিকেশন বেমানান শ্রেণীর ধরণের কাস্ট করার চেষ্টা করে।

উত্স: জাভাতে ত্রুটি বনাম ব্যতিক্রমের মধ্যে পার্থক্য


"ত্রুটিগুলি মূলত সেই পরিবেশের কারণে ঘটে যেখানে অ্যাপ্লিকেশন চলছে" এবং "ব্যতিক্রমগুলি মূলত অ্যাপ্লিকেশনটির ফলেই ঘটে" নিখুঁত!
এডিজে

0

একটি ত্রুটি এবং ব্যতিক্রম কী উপস্থাপন করে তা জাভা এপিআই থেকে একটি দুর্দান্ত উত্তম সংক্ষিপ্তসার এখানে:

একটি ত্রুটি থ্রোয়েবলের একটি সাবক্লাস যা গুরুতর সমস্যাগুলি নির্দেশ করে যা যুক্তিসঙ্গত প্রয়োগটি ধরার চেষ্টা করা উচিত নয়। এ জাতীয় বেশিরভাগ ত্রুটিগুলি অস্বাভাবিক শর্ত। থ্রেডডিথ ত্রুটি, যদিও একটি "স্বাভাবিক" শর্ত, ত্রুটিটির একটি সাবক্লাসও কারণ বেশিরভাগ অ্যাপ্লিকেশনগুলি এটি ধরার চেষ্টা করা উচিত নয়।

কোনও পদ্ধতিতে এর ছোঁড়াছুটিতে ত্রুটির কোনও সাবক্লাস ক্লজ করার দরকার নেই যা পদ্ধতিটি কার্যকর করার সময় নিক্ষেপ করা হতে পারে তবে ধরা পড়ে না, কারণ এই ত্রুটিগুলি অস্বাভাবিক পরিস্থিতি যা কখনই ঘটে না।

OTOH, ব্যতিক্রমগুলির জন্য, জাভা এপিআই বলেছেন:

ক্লাস ব্যতিক্রম এবং এর সাবক্ল্যাসগুলি হ'ল থ্রোয়েবলের একটি ফর্ম যা যুক্তিযুক্ত অ্যাপ্লিকেশনটি ধরতে চায় এমন পরিস্থিতিতেগুলি নির্দেশ করে।


0

আপনার অ্যাপ্লিকেশন বা প্রোগ্রামটি চালিত পরিবেশের কারণে ত্রুটিগুলি ঘটে। বেশিরভাগ সময়, আপনি এটি থেকে পুনরুদ্ধার করতে পারেন না কারণ এটি আপনার অ্যাপ্লিকেশন বা প্রোগ্রাম শেষ করে। জাভাডোক পরামর্শ দিয়েছেন যে আপনার যেমন পরিবেশ যেমন জেভিএম যেমন ত্রুটিগুলি যে কোনওভাবেই ছাড়তে চলেছে তাই আপনার এ জাতীয় ত্রুটিগুলি ধরা ধরা বিরক্ত করবেন না।

উদাহরণস্বরূপ: VirtualMachineError- জাভা ভার্চুয়াল মেশিনটি চালিত হয়েছে বা অপারেশন চালিয়ে যাওয়ার জন্য প্রয়োজনীয় সংস্থান হারিয়েছে তা বোঝাতে ছুড়ে দেওয়া হয়েছে। OutOfMemoryErrorযখন জেভিএম মেমরির বাইরে চলে যায় বা StackOverflowErrorস্ট্যাক শেষ হয়ে যায় তখন ঘটে।

ব্যতিক্রমগুলি নিজেই আপনার অ্যাপ্লিকেশন বা প্রোগ্রামের কারণে ঘটে; আপনার নিজের ভুলের কারণে হতে পারে বেশিরভাগ সময় আপনি এটি থেকে পুনরুদ্ধার করতে পারেন এবং আপনার অ্যাপ্লিকেশনটি এখনও চালিয়ে যেতে থাকবে। আপনার অ্যাপ্লিকেশন বা প্রোগ্রামের অস্বাভাবিক সমাপ্তি রোধ করতে এবং / অথবা ব্যতিক্রম বার্তাগুলি কাস্টমাইজ করতে সক্ষম হওয়ার জন্য আপনাকে এই জাতীয় ত্রুটিগুলি ধরার পরামর্শ দেওয়া হয় যাতে ব্যবহারকারীরা সমস্ত জায়গায় ছড়িয়ে ছিটিয়ে থাকা ডিফল্ট কুৎসিত ব্যতিক্রম বার্তাগুলির পরিবর্তে সুন্দর বিন্যাসিত বার্তাটি দেখতে পান।

উদাহরণস্বরূপ: NullPointerExceptionযখন কোনও অ্যাপ্লিকেশন নাল বস্তুটি অ্যাক্সেস করার চেষ্টা করে। বা অ-বিদ্যমান সূচক সহ একটি অ্যারে অ্যাক্সেস করার চেষ্টা করা বা ভুল ডেটা বা পরামিতি সহ কোনও ফাংশন কল করা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.