আমি বেসিক জাভা এবং বিভিন্ন ধরণের থ্রোয়েবাল সম্পর্কে আরও জানার চেষ্টা করছি, কেউ কি আমাকে ব্যতিক্রম এবং ত্রুটিগুলির মধ্যে পার্থক্য জানতে দিতে পারে?
আমি বেসিক জাভা এবং বিভিন্ন ধরণের থ্রোয়েবাল সম্পর্কে আরও জানার চেষ্টা করছি, কেউ কি আমাকে ব্যতিক্রম এবং ত্রুটিগুলির মধ্যে পার্থক্য জানতে দিতে পারে?
উত্তর:
ত্রুটিগুলি ধরা বা পরিচালনা করা উচিত নয় (মামলার বিরল বাদে)। ব্যতিক্রম ব্যতিক্রম হ্যান্ডলিংয়ের রুটি এবং মাখন। Javadoc এটা ভাল ব্যাখ্যা করে:
একটি ত্রুটি থ্রোয়েবলের একটি সাবক্লাস যা গুরুতর সমস্যাগুলি নির্দেশ করে যা যুক্তিসঙ্গত প্রয়োগটি ধরার চেষ্টা করা উচিত নয়। এ জাতীয় বেশিরভাগ ত্রুটিগুলি অস্বাভাবিক শর্ত।
Error
তাদের জাভাডকের কয়েকটি মন্তব্য নিয়ে কয়েকটি সাবক্লাসটি দেখুন :
AnnotationFormatError
- এনোটেশন পার্সার যখন ক্লাস ফাইল থেকে একটি টীকা পড়ার চেষ্টা করে এবং লক্ষ্য করে যে টীকাটি ত্রুটিযুক্ত ThAssertionError
- দৃ as়ভাবে বলা হয়েছে যে একটি দৃser়তা ব্যর্থ হয়েছে।LinkageError
- লিঙ্কেজেরর সাবক্লাসগুলি ইঙ্গিত দেয় যে একটি শ্রেণীর অন্য শ্রেণীর উপর কিছুটা নির্ভরতা থাকে; তবে পূর্ববর্তী শ্রেণীর সংকলনের পরে উত্তর শ্রেণিটি অসম্পূর্ণভাবে পরিবর্তিত হয়েছে।VirtualMachineError
- জাভা ভার্চুয়াল মেশিনটি ভাঙা হয়েছে বা এটি চালিয়ে যাওয়ার জন্য প্রয়োজনীয় সংস্থানগুলি শেষ হয়ে গেছে তা বোঝাতে ছুড়ে দেওয়া হয়েছিল। এর তিনটি গুরুত্বপূর্ণ উপশ্রেণী রয়েছে Throwable
:
Error
- সমস্যাটি হ্যান্ডেল করার পরিবর্তে বেশিরভাগ অ্যাপ্লিকেশনের ক্রাশ হওয়া উচিত enoughRuntimeException
) - খুব প্রায়ই প্রোগ্রামিং ত্রুটি যেমন একটি NullPointerException
বা অবৈধ যুক্তি। অ্যাপ্লিকেশনগুলি কখনও কখনও এই Throwable
বিভাগটি থেকে পরিচালনা করতে পারে বা পুনরুদ্ধার করতে পারে - বা কমপক্ষে এটি থ্রেডের run()
পদ্ধতিতে ধরতে পারে , অভিযোগটি লগ করতে এবং চালিয়ে যাওয়া চালিয়ে যেতে পারে।FileNotFoundException
এবং TimeoutException
...@ জর্জিও-গুসিওস দ্বারা জাভাটির ব্যতিক্রম শ্রেণিবিন্যাস দেখানো এই স্লাইডটি জাভায় ত্রুটি এবং ব্যতিক্রমগুলির মধ্যে পার্থক্যগুলি সংক্ষেপে ব্যাখ্যা করেছে।
ত্রুটিগুলি আপনার অ্যাপ্লিকেশনটির শেষের সংকেত দেয় যা আপনি জানেন। এটি সাধারণত থেকে পুনরুদ্ধার করা যায় না এবং এটি আপনার ভিএম থেকে প্রস্থান করতে পারে। সম্ভবত লগ করা বা প্রদর্শন এবং প্রস্থান করার আগে যথাযথ বার্তা ব্যতীত এগুলি ক্যাচিং করা উচিত নয়।
উদাহরণ: আউটআফমিউরিওরির - আপনার প্রোগ্রামটি আর চালাতে না পারার মতো আপনি বেশি কিছু করতে পারবেন না।
ব্যতিক্রমগুলি প্রায়শই পুনরুদ্ধারযোগ্য এবং এমনকি না হলেও, তাদের সাধারণত বোঝানো হয় একটি চেষ্টা করা অপারেশন ব্যর্থ হয়েছিল, তবে আপনার প্রোগ্রামটি এখনও চালিয়ে যেতে পারে।
উদাহরণ: অবৈধ অর্গমেন্ট এক্সেপশন - কোনও পদ্ধতিতে অবৈধ তথ্য পাস করেছে যাতে সেই পদ্ধতি কলটি ব্যর্থ হয়, তবে এটি ভবিষ্যতের ক্রিয়াকলাপগুলিকে প্রভাবিত করে না।
এগুলি সরল উদাহরণ এবং কেবলমাত্র ব্যতিক্রম সম্পর্কিত তথ্যের আরও একটি সম্পদ রয়েছে।
Error
জাভা মধ্যে এস টাইপ হয় java.lang.Error
।Error
রান সময় হয়। তারা সংকলক পরিচিত হবে না। Error
অ্যাপ্লিকেশন চলমান পরিবেশের কারণে বেশিরভাগ ক্ষেত্রেই ঘটে। java.lang.StackOverflowError
,java.lang.OutOfMemoryError
Exception
জাভা মধ্যে এস টাইপ হয় java.lang.Exception
।Exception
গুলি উভয় চেক পাশাপাশি চেক করা টাইপ অন্তর্ভুক্ত।try-catch
ব্লকগুলির মাধ্যমে পরিচালনা করে ব্যতিক্রমগুলি থেকে পুনরুদ্ধার করতে পারেন ।Exception
গুলি মূলত অ্যাপ্লিকেশন থেকেই হয়।SQLException
, IOException
ArrayIndexOutOfBoundException
, ClassCastException
,NullPointerException
আরো পড়ার: http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/
রোদ এটি সেরা রাখে :
একটি ত্রুটি থ্রোয়েবলের একটি সাবক্লাস যা গুরুতর সমস্যাগুলি নির্দেশ করে যা যুক্তিসঙ্গত প্রয়োগটি ধরার চেষ্টা করা উচিত নয়।
Error
শ্রেণীর বর্ণনা বেশ স্পষ্ট:
একটি
Error
এটি একটি সাবক্লাসThrowable
যা গুরুতর সমস্যাগুলি নির্দেশ করে যা যুক্তিসঙ্গত প্রয়োগটি ধরার চেষ্টা করা উচিত নয়। এ জাতীয় বেশিরভাগ ত্রুটিগুলি অস্বাভাবিক শর্ত।ThreadDeath
ত্রুটি, যদিও একটি "স্বাভাবিক" অবস্থায়, এছাড়াও একটি উপশ্রেণী হয়Error
কারণ অধিকাংশ অ্যাপ্লিকেশন এটা ধরতে চেষ্টা করা উচিত নয়।কোনও পদ্ধতি তার ছোঁড়াছুটিতে ঘোষণার প্রয়োজন হয় না
Error
যে পদ্ধতিটি কার্যকর করার সময় যে কোনও সাবক্লাস ফেলে দেওয়া যেতে পারে তবে ধরা পড়ে না, কারণ এই ত্রুটিগুলি অস্বাভাবিক পরিস্থিতি যা কখনই ঘটে না।
জাভার নিজস্ব ক্লাসের ডকুমেন্টেশনError
থেকে উদ্ধৃত ।
সংক্ষেপে, আপনার এস করা উচিত নয় Error
, যদি আপনার এটি করার উপযুক্ত কারণ না থাকে। (উদাহরণস্বরূপ, কোনও সার্লেট স্মৃতিশক্তি বা এরকম কিছু শেষ হয়ে গেলে আপনার ওয়েব সার্ভারটি ক্র্যাশ হতে আটকাতে পারে))
একটি Exception
অন্যদিকে, অন্য কোন আধুনিক ভাষায় শুধু একটি স্বাভাবিক ব্যতিক্রম নয়। আপনি জাভা এপিআই ডকুমেন্টেশন বা কোনও অনলাইন বা অফলাইন সংস্থানতে একটি বিশদ বিবরণ পাবেন।
ক্লাস 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
পদ্ধতি শিরোনামে প্রয়োজনীয় ঘোষণা নিক্ষেপ করার সময় ।নিক্ষেপযোগ্য এবং এর উত্তরসূরি শ্রেণীর ডায়াগ্রাম (বৈশিষ্ট্য এবং পদ্ধতি বাদ দেওয়া হয়)।
আইএমও ত্রুটি এমন একটি বিষয় যা আপনার অ্যাপ্লিকেশনটিকে ব্যর্থ করতে পারে এবং পরিচালনা করা উচিত নয়। একটি ব্যতিক্রম এমন একটি বিষয় যা প্রত্যাশিত ফলাফলের কারণ হতে পারে তবে তা থেকে পুনরুদ্ধার করা যায়।
উদাহরণ:
যদি কোনও প্রোগ্রামের স্মৃতি শেষ না হয় তবে এটি ত্রুটি কারণ অ্যাপ্লিকেশনটি চালিয়ে যেতে পারে না। তবে, কোনও প্রোগ্রাম যদি কোনও ভুল ইনপুট প্রকার গ্রহণ করে তবে এটি ব্যতিক্রম কারণ প্রোগ্রামটি এটি পরিচালনা করতে পারে এবং সঠিক ইনপুট প্রকারটি পুনর্নির্দেশ করতে পারে।
ত্রুটিগুলি মূলত সেই পরিবেশে তৈরি হয় যেখানে অ্যাপ্লিকেশন চলছে। উদাহরণস্বরূপ, জেভিএম মেমরির বাইরে চলে যায় বা স্ট্যাক ওভারফ্লো এরির যখন স্ট্যাক ওভারফ্লো হয় তখন আউটআফমিউরিরির ঘটে।
ব্যতিক্রমগুলি মূলত অ্যাপ্লিকেশন থেকেই হয়। উদাহরণস্বরূপ, নালপয়েন্টার এক্সসেপশনটি ঘটে যখন কোনও অ্যাপ্লিকেশন নাল অবজেক্ট অ্যাক্সেস করার চেষ্টা করে বা ক্লাসকাস্টএক্সসেপশন ঘটে যখন কোনও অ্যাপ্লিকেশন বেমানান শ্রেণীর ধরণের কাস্ট করার চেষ্টা করে।
একটি ত্রুটি এবং ব্যতিক্রম কী উপস্থাপন করে তা জাভা এপিআই থেকে একটি দুর্দান্ত উত্তম সংক্ষিপ্তসার এখানে:
একটি ত্রুটি থ্রোয়েবলের একটি সাবক্লাস যা গুরুতর সমস্যাগুলি নির্দেশ করে যা যুক্তিসঙ্গত প্রয়োগটি ধরার চেষ্টা করা উচিত নয়। এ জাতীয় বেশিরভাগ ত্রুটিগুলি অস্বাভাবিক শর্ত। থ্রেডডিথ ত্রুটি, যদিও একটি "স্বাভাবিক" শর্ত, ত্রুটিটির একটি সাবক্লাসও কারণ বেশিরভাগ অ্যাপ্লিকেশনগুলি এটি ধরার চেষ্টা করা উচিত নয়।
কোনও পদ্ধতিতে এর ছোঁড়াছুটিতে ত্রুটির কোনও সাবক্লাস ক্লজ করার দরকার নেই যা পদ্ধতিটি কার্যকর করার সময় নিক্ষেপ করা হতে পারে তবে ধরা পড়ে না, কারণ এই ত্রুটিগুলি অস্বাভাবিক পরিস্থিতি যা কখনই ঘটে না।
OTOH, ব্যতিক্রমগুলির জন্য, জাভা এপিআই বলেছেন:
ক্লাস ব্যতিক্রম এবং এর সাবক্ল্যাসগুলি হ'ল থ্রোয়েবলের একটি ফর্ম যা যুক্তিযুক্ত অ্যাপ্লিকেশনটি ধরতে চায় এমন পরিস্থিতিতেগুলি নির্দেশ করে।
আপনার অ্যাপ্লিকেশন বা প্রোগ্রামটি চালিত পরিবেশের কারণে ত্রুটিগুলি ঘটে। বেশিরভাগ সময়, আপনি এটি থেকে পুনরুদ্ধার করতে পারেন না কারণ এটি আপনার অ্যাপ্লিকেশন বা প্রোগ্রাম শেষ করে। জাভাডোক পরামর্শ দিয়েছেন যে আপনার যেমন পরিবেশ যেমন জেভিএম যেমন ত্রুটিগুলি যে কোনওভাবেই ছাড়তে চলেছে তাই আপনার এ জাতীয় ত্রুটিগুলি ধরা ধরা বিরক্ত করবেন না।
উদাহরণস্বরূপ:
VirtualMachineError
- জাভা ভার্চুয়াল মেশিনটি চালিত হয়েছে বা অপারেশন চালিয়ে যাওয়ার জন্য প্রয়োজনীয় সংস্থান হারিয়েছে তা বোঝাতে ছুড়ে দেওয়া হয়েছে।
OutOfMemoryError
যখন জেভিএম মেমরির বাইরে চলে যায় বা
StackOverflowError
স্ট্যাক শেষ হয়ে যায় তখন ঘটে।
ব্যতিক্রমগুলি নিজেই আপনার অ্যাপ্লিকেশন বা প্রোগ্রামের কারণে ঘটে; আপনার নিজের ভুলের কারণে হতে পারে বেশিরভাগ সময় আপনি এটি থেকে পুনরুদ্ধার করতে পারেন এবং আপনার অ্যাপ্লিকেশনটি এখনও চালিয়ে যেতে থাকবে। আপনার অ্যাপ্লিকেশন বা প্রোগ্রামের অস্বাভাবিক সমাপ্তি রোধ করতে এবং / অথবা ব্যতিক্রম বার্তাগুলি কাস্টমাইজ করতে সক্ষম হওয়ার জন্য আপনাকে এই জাতীয় ত্রুটিগুলি ধরার পরামর্শ দেওয়া হয় যাতে ব্যবহারকারীরা সমস্ত জায়গায় ছড়িয়ে ছিটিয়ে থাকা ডিফল্ট কুৎসিত ব্যতিক্রম বার্তাগুলির পরিবর্তে সুন্দর বিন্যাসিত বার্তাটি দেখতে পান।
উদাহরণস্বরূপ:
NullPointerException
যখন কোনও অ্যাপ্লিকেশন নাল বস্তুটি অ্যাক্সেস করার চেষ্টা করে। বা অ-বিদ্যমান সূচক সহ একটি অ্যারে অ্যাক্সেস করার চেষ্টা করা বা ভুল ডেটা বা পরামিতি সহ কোনও ফাংশন কল করা।
Unchecked exceptions != RuntimeExceptions
;Unchecked exceptions = RuntimeExceptions + Errors
। আমি জানি যে এটি প্রশ্ন উত্থাপন করে: ত্রুটিটি কি ব্যতিক্রম? , তবে এটি তারা লিখেন। এখানে সেই উদাহরণগুলির মধ্যে একটি মাত্র: ডকস.অরাকল . com / জাভাস / টিউটোরিয়াল / এসেনসিয়াল / এক্সেপশনস / ……