জাভা ব্যতিক্রমগুলি কীভাবে সঠিকভাবে পরিচালনা করবেন

জাভা ব্যতিক্রমগুলি কীভাবে সঠিকভাবে পরিচালনা করবেন

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



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





জাভা ব্যতিক্রমগুলি বোঝা

জাভাতে, একটি ব্যতিক্রম এমন একটি বস্তু যা নির্দেশ করে যে আপনার অ্যাপ্লিকেশন চলাকালীন অস্বাভাবিক কিছু (বা 'ব্যতিক্রমী') ঘটেছে। এই ধরনের ব্যতিক্রমগুলি হল নিক্ষিপ্ত , যার মূল অর্থ হল একটি ব্যতিক্রম বস্তু তৈরি করা হয়েছে (ত্রুটিগুলি কীভাবে উত্থাপিত হয় তার অনুরূপ)।





সৌন্দর্য যে আপনি পারেন ধরা নিক্ষিপ্ত ব্যতিক্রমগুলি, যা আপনাকে অস্বাভাবিক অবস্থার সাথে মোকাবিলা করতে দেয় এবং আপনার অ্যাপ্লিকেশনটি চলতে দেয় যেন কিছু ভুল হয়নি। উদাহরণস্বরূপ, যেখানে সি -তে একটি নাল পয়েন্টার আপনার অ্যাপ্লিকেশনটি ক্র্যাশ করতে পারে, জাভা আপনাকে নিক্ষেপ এবং ধরতে দেয়

NullPointerException

s এর আগে একটি নাল ভেরিয়েবল একটি ক্র্যাশ কারণ একটি সুযোগ আছে।



মনে রাখবেন, একটি ব্যতিক্রম কেবল একটি বস্তু, কিন্তু একটি গুরুত্বপূর্ণ বৈশিষ্ট্যের সাথে: এটি অবশ্যই থেকে বর্ধিত হতে হবে

Exception

শ্রেণী বা এর কোন উপশ্রেণী





Exception

। যদিও জাভাতে সব ধরণের অন্তর্নির্মিত ব্যতিক্রম রয়েছে, আপনি চাইলে নিজের তৈরিও করতে পারেন। কিছু সবচেয়ে সাধারণ জাভা ব্যতিক্রম অন্তর্ভুক্ত:

  • NullPointerException
  • NumberFormatException
  • IllegalArgumentException
  • RuntimeException
  • IllegalStateException

সুতরাং আপনি যখন একটি ব্যতিক্রম নিক্ষেপ করবেন তখন কি হবে?





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

প্রতি স্ট্যাক ট্রেস একটি ব্যতিক্রম হ্যান্ডলার খুঁজতে গিয়ে জাভা যে সমস্ত পদ্ধতি অতিক্রম করেছে তার একটি তালিকা। এখানে একটি স্ট্যাক ট্রেস কেমন দেখাচ্ছে:

Exception in thread 'main' java.lang.NullPointerException
at com.example.myproject.Book.getTitle(Book.java:16)
at com.example.myproject.Author.getBookTitles(Author.java:25)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)

এ থেকে আমরা অনেক কিছু সংগ্রহ করতে পারি। প্রথম, নিক্ষিপ্ত ব্যতিক্রম ছিল a

NullPointerException

। এর মধ্যে ঘটেছিল

getTitle()

Book.java এর লাইন 16 এ পদ্ধতি। সেই পদ্ধতি থেকে ডাকা হয়েছিল

getBookTitles()

Author.java এর লাইন 25 এ। যে পদ্ধতি থেকে বলা হয়েছিল

main()

Bootstrap.java এর 14 লাইনে। আপনি দেখতে পাচ্ছেন, এই সব জেনে ডিবাগিং সহজ করে তোলে।

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

কোডে জাভা ব্যতিক্রমগুলি ব্যবহার করা

ধরা যাক আপনার আছে

someMethod()

এটি একটি পূর্ণসংখ্যা নেয় এবং কিছু যুক্তি সম্পাদন করে যা পূর্ণসংখ্যা 0 বা 100 এর চেয়ে কম হলে ভেঙে যেতে পারে। এটি একটি ব্যতিক্রম নিক্ষেপ করার জন্য একটি ভাল জায়গা হতে পারে:

ভার্চুয়ালবক্সের জন্য উইন্ডোজ এক্সপি আইএসও ডাউনলোড করুন
public void someMethod(int value) {
if (value 100) {
throw new
IllegalArgumentException

এই ব্যতিক্রমটি ধরতে হলে আপনাকে কোথায় যেতে হবে

someMethod()

বলা হয় এবং ব্যবহার করুন ট্রাই-ক্যাচ ব্লক :

public void callingMethod() {
try {
someMethod(200);
someOtherMethod();
} catch (IllegalArgumentException e) {
// handle the exception in here
}
// ...
}

এর মধ্যে সবকিছু চেষ্টা করুন একটি ব্যতিক্রম নিক্ষিপ্ত না হওয়া পর্যন্ত ব্লকটি ক্রমানুসারে কার্যকর হবে। যত তাড়াতাড়ি একটি ব্যতিক্রম নিক্ষেপ করা হয়, সমস্ত পরবর্তী বিবৃতি বাদ দেওয়া হয় এবং অ্যাপ্লিকেশন যুক্তি অবিলম্বে লাফ দেয় ধরা ব্লক

আমাদের উদাহরণে, আমরা চেষ্টা ব্লকে প্রবেশ করি এবং অবিলম্বে কল করি

someMethod()

। যেহেতু 200 0 এবং 100 এর মধ্যে নয়, একটি

IllegalArgumentException

নিক্ষেপ করা হয়। এটি অবিলম্বে মৃত্যুদন্ড কার্যকর করে

someMethod()

, ট্রাই ব্লকে বাকি যুক্তি বাদ দেয় (

someOtherMethod()

বলা হয় না), এবং ক্যাচ ব্লকের মধ্যে পুনরায় কার্যকর করা শুরু করে।

আমরা ফোন করলে কি হবে

someMethod(50)

পরিবর্তে? দ্য

IllegalArgumentException

কখনও নিক্ষেপ করা হবে না।

someMethod()

স্বাভাবিক হিসাবে চালানো হবে। চেষ্টা ব্লক স্বাভাবিক হিসাবে চালানো হবে, কলিং

someOtherMethod()

যখন someMethod () সম্পন্ন হয়। কখন

someOtherMethod()

শেষ, ক্যাচ ব্লক বাদ দেওয়া হবে এবং

callingMethod()

চলবে।

লক্ষ্য করুন যে প্রতি ট্রাই ব্লকে আপনার একাধিক ক্যাচ ব্লক থাকতে পারে:

public void callingMethod() {
try {
someMethod(200);
someOtherMethod();
} catch (IllegalArgumentException e) {
// handle the exception in here
} catch (NullPointerException e) {
// handle the exception in here
}
// ...
}

এছাড়াও মনে রাখবেন যে একটি চ্ছিক অবশেষে ব্লকটিও বিদ্যমান:

public void method() {
try {
// ...
} catch (Exception e) {
// ...
} finally {
// ...
}
}

অবশেষে ব্লকের মধ্যে কোড হল সর্বদা যাই হোক না কেন মৃত্যুদন্ড কার্যকর করা হয়েছে। আপনার যদি ট্রাই ব্লকে রিটার্ন স্টেটমেন্ট থাকে, তাহলে অবশেষে ব্লকটি পদ্ধতি থেকে ফিরে আসার আগে কার্যকর করা হয়। যদি আপনি ক্যাচ ব্লকে আরেকটি ব্যতিক্রম নিক্ষেপ করেন, তবে ব্যতিক্রমটি নিক্ষেপ করার আগে অবশেষে ব্লকটি কার্যকর করা হয়।

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

মনে রাখবেন যে আপনি একটি ক্যাচ ব্লক ছাড়া অবশেষে ব্লক করতে পারেন:

public void method() {
try {
// ...
} finally {
// ...
}
}

এটি আপনাকে যে কোনও প্রয়োজনীয় পরিচ্ছন্নতা করতে দেয় যখন নিক্ষিপ্ত ব্যতিক্রমগুলিকে পদ্ধতি আহ্বান স্ট্যাকটি প্রচার করার অনুমতি দেয় (যেমন আপনি এখানে ব্যতিক্রমটি পরিচালনা করতে চান না তবে আপনাকে এখনও প্রথমে পরিষ্কার করতে হবে)।

জাভাতে চেক করা বনাম আনচেকড ব্যতিক্রম

বেশিরভাগ ভাষার বিপরীতে, জাভা পার্থক্য করে পরীক্ষা করা ব্যতিক্রম এবং অনির্ধারিত ব্যতিক্রম (উদা C# শুধুমাত্র অনির্ধারিত ব্যতিক্রম আছে)। একটি পরীক্ষা করা ব্যতিক্রম অবশ্যই এমন পদ্ধতিতে ধরা পড়ুন যেখানে ব্যতিক্রমটি নিক্ষেপ করা হয় অন্যথায় কোড কম্পাইল হবে না।

একটি চেক করা ব্যতিক্রম তৈরি করতে, থেকে প্রসারিত করুন

Exception

। একটি অনির্বাচিত ব্যতিক্রম তৈরি করতে, থেকে প্রসারিত করুন

RuntimeException

যে কোনও পদ্ধতি যা একটি চেক করা ব্যতিক্রম ছুঁড়ে দেয় অবশ্যই এটি ব্যবহার করে পদ্ধতির স্বাক্ষরে বোঝাতে হবে নিক্ষেপ করে কীওয়ার্ড যেহেতু জাভার অন্তর্নির্মিত

IOException

একটি পরীক্ষা করা ব্যতিক্রম, নিম্নলিখিত কোড কম্পাইল হবে না:

public void wontCompile() {
// ...
if (someCondition) {
throw new IOException();
}
// ...
}

আপনাকে প্রথমে ঘোষণা করতে হবে যে এটি একটি চেক করা ব্যতিক্রম ছুঁড়েছে:

public void willCompile() throws IOException {
// ...
if (someCondition) {
throw new IOException();
}
// ...
}

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

আপনার কখন পরীক্ষা করা বা অনির্বাচিত ব্যতিক্রমগুলি ব্যবহার করা উচিত?

অফিসিয়াল জাভা ডকুমেন্টেশনে আছে a এই প্রশ্নের পৃষ্ঠা । এটি একটি সংক্ষিপ্ত নিয়মের সাথে পার্থক্যটি তুলে ধরে: 'যদি কোনও ক্লায়েন্ট যুক্তিসঙ্গতভাবে একটি ব্যতিক্রম থেকে পুনরুদ্ধারের আশা করতে পারে, তবে এটি একটি পরীক্ষা করা ব্যতিক্রম করুন। যদি কোন ক্লায়েন্ট ব্যতিক্রম থেকে পুনরুদ্ধারের জন্য কিছু করতে না পারে, তাহলে এটি একটি অনির্বাচিত ব্যতিক্রম করুন। '

কিন্তু এই নির্দেশিকা পুরনো হতে পারে। একদিকে, চেক করা ব্যতিক্রমগুলি আরও শক্তিশালী কোডের ফলাফল দেয়। অন্যদিকে, অন্য কোন ভাষা জাভা হিসাবে একই পদ্ধতিতে ব্যতিক্রমগুলি যাচাই করে নি, যা দুটি জিনিস দেখায়: এক, বৈশিষ্ট্যটি অন্যান্য ভাষার জন্য এটি চুরি করার জন্য যথেষ্ট উপযোগী নয়, এবং দুই, আপনি সেগুলি ছাড়া একেবারে বেঁচে থাকতে পারেন। এছাড়াও, চেক করা ব্যতিক্রমগুলি জাভা 8 এ চালু ল্যাম্বডা এক্সপ্রেশনগুলির সাথে সুন্দরভাবে খেলবে না।

জাভা ব্যতিক্রম ব্যবহারের জন্য নির্দেশিকা

ব্যতিক্রমগুলি দরকারী কিন্তু সহজেই অপব্যবহার এবং অপব্যবহার করা হয়। এখানে কিছু টিপস এবং সর্বোত্তম অনুশীলনগুলি আপনাকে তাদের একটি গোলমাল এড়াতে সাহায্য করার জন্য।

  • সাধারণ ব্যতিক্রমগুলির মধ্যে নির্দিষ্ট ব্যতিক্রমগুলি পছন্দ করুন। ব্যবহার করুন | _+_ | ওভার | _+_ | যখন সম্ভব, অন্যথায় ব্যবহার করুন | _+_ | ওভার | _+_ | কখন সম্ভব.
  • কখনও ধরা না | _+_ | ! | _+_ | ক্লাস আসলে প্রসারিত | _+_ | , এবং ক্যাচ ব্লক আসলে | _+_ | দিয়ে কাজ করে বা যে কোনো শ্রেণী যা নিক্ষেপযোগ্য। যাইহোক, | _+_ | ক্লাসও প্রসারিত হয় | _+_ | , এবং আপনি কখনই | _+_ | ধরতে চান না কারণ | _+_ | s গুরুতর অপ্রাপ্তির সমস্যা নির্দেশ করে।
  • কখনও ধরা না | _+_ | ! | _+_ | প্রসারিত | _+_ | , তাই যে কোন ব্লক ধরা পড়ে | _+_ | এছাড়াও ধরা পড়বে | _+_ | , এবং এটি একটি খুব গুরুত্বপূর্ণ ব্যতিক্রম যা আপনি (বিশেষ করে মাল্টি-থ্রেডেড অ্যাপ্লিকেশনগুলিতে) জগাখিচুড়ি করতে চান না যতক্ষণ না আপনি জানেন যে আপনি কী করছেন। যদি আপনি না জানেন যে কোন ব্যতিক্রমটি ধরতে হবে, তাহলে কিছু না ধরা বিবেচনা করুন।
  • ডিবাগিং সহজ করার জন্য বর্ণনামূলক বার্তা ব্যবহার করুন। যখন আপনি একটি ব্যতিক্রম নিক্ষেপ করেন, আপনি একটি | _+_ | প্রদান করতে পারেন একটি যুক্তি হিসাবে বার্তা। এই বার্তাটি '_+_ |' ব্যবহার করে ক্যাচ ব্লকে প্রবেশ করা যায় পদ্ধতি, কিন্তু যদি ব্যতিক্রমটি ধরা না পড়ে, তবে বার্তাটি স্ট্যাক ট্রেস অংশ হিসাবে উপস্থিত হবে।
  • ব্যতিক্রমগুলি ধরতে এবং উপেক্ষা না করার চেষ্টা করুন। চেক করা ব্যতিক্রমগুলির অসুবিধাগুলি পেতে, অনেক নবাগত এবং অলস প্রোগ্রামাররা একটি ক্যাচ ব্লক স্থাপন করবে কিন্তু এটি খালি রেখে দেবে। খারাপ! সর্বদা এটি সুন্দরভাবে পরিচালনা করুন, কিন্তু যদি আপনি না পারেন, খুব কমপক্ষে একটি স্ট্যাক ট্রেস প্রিন্ট করুন যাতে আপনি জানেন যে ব্যতিক্রমটি নিক্ষেপ করা হয়েছিল। আপনি | _+_ | ব্যবহার করে এটি করতে পারেন পদ্ধতি
  • অতিরিক্ত ব্যবহারের ব্যতিক্রম থেকে সাবধান। যখন আপনার হাতে হাতুড়ি থাকে তখন সবকিছুই পেরেকের মতো লাগে। যখন আপনি প্রথমবার ব্যতিক্রম সম্পর্কে জানতে পারেন, তখন আপনি সবকিছুকে ব্যতিক্রম করতে বাধ্য হতে পারেন ... সেই বিন্দুতে যেখানে আপনার অ্যাপ্লিকেশনের নিয়ন্ত্রণ প্রবাহটি ব্যতিক্রম হ্যান্ডলিংয়ে নেমে আসে। মনে রাখবেন, ব্যতিক্রমগুলি 'ব্যতিক্রমী' ঘটনার জন্য বোঝানো হয়েছে!

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

কোন প্রশ্ন আছে? অন্য কোন ব্যতিক্রম-সম্পর্কিত টিপস যা আমি মিস করেছি তা জানেন? নীচের মন্তব্য ভাগ!

শেয়ার করুন শেয়ার করুন টুইট ইমেইল যে কোনও প্রকল্পের ডেটা ভিজ্যুয়ালাইজ করার জন্য কীভাবে একটি ডেটা-ফ্লো ডায়াগ্রাম তৈরি করবেন

যে কোনো প্রক্রিয়ার ডেটা-ফ্লো ডায়াগ্রাম (ডিএফডি) আপনাকে বুঝতে সাহায্য করে কিভাবে তথ্য উৎস থেকে গন্তব্যে প্রবাহিত হয়। এটি কীভাবে তৈরি করবেন তা এখানে!

পরবর্তী পড়ুন
সম্পর্কিত বিষয়
  • প্রোগ্রামিং
  • জাভা
লেখক সম্পর্কে জোয়েল লি(1524 নিবন্ধ প্রকাশিত)

জোয়েল লি 2018 সাল থেকে MakeUseOf এর প্রধান সম্পাদক। তার একটি বি.এস. কম্পিউটার বিজ্ঞানে এবং নয় বছরেরও বেশি পেশাদারী লেখালেখি এবং সম্পাদনার অভিজ্ঞতা।

ম্যাকের জন্য সেরা মুভি নির্মাতা
জোয়েল লি থেকে আরো

আমাদের নিউজলেটার সদস্যতা

প্রযুক্তি টিপস, রিভিউ, ফ্রি ইবুক এবং এক্সক্লুসিভ ডিলের জন্য আমাদের নিউজলেটারে যোগ দিন!

সাবস্ক্রাইব করতে এখানে ক্লিক করুন