স্ট্যাটিক পদ্ধতি এবং ইনস্ট্যান্স পদ্ধতির মধ্যে পার্থক্য


89

আমি কেবল আমার পাঠ্যপুস্তকে আমাকে দেওয়া পাঠ্যটি পড়ছিলাম এবং আমি সত্যিই নিশ্চিত নই যে এটি কী বলছে understand এটি মূলত আমাকে বলছে যে স্থির পদ্ধতি বা শ্রেণি পদ্ধতিতে "সংশোধক" কীওয়ার্ড স্ট্যাটিক অন্তর্ভুক্ত থাকে। তবে আমি আসলে জানি না এর অর্থ কী?

কেউ দয়া করে আমাকে স্ট্যাটিক বা ক্লাস পদ্ধতিগুলি কি খুব সহজ শর্তে ব্যাখ্যা করতে পারেন?

এছাড়াও, আমি কি ইনস্ট্যান্স পদ্ধতিগুলি সম্পর্কে একটি সহজ ব্যাখ্যা পেতে পারি?

পাঠ্যপুস্তকে তারা আমাকে এটাই দেয়:

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

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

উত্তর:


166

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

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

আপনি একটি স্ট্যাটিক পদ্ধতি কার্যকর করতে এটি করতে পারেন:

MyClass.staticMethod();  // Simply refers to the class's static code

তবে একটি স্থিতিশীল পদ্ধতি সম্পাদন করতে আপনাকে অবশ্যই এটি করতে হবে:

MyClass obj = new MyClass();//Create an instance
obj.nonstaticMethod();  // Refer to the instance's class's code

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


4
কোড উদাহরণগুলির জন্য তাদেরকে ধন্যবাদ জানাচ্ছি যাতে তারা পরিচিত তাই এখনই বুঝতে পারি
প্যানথি

4
@ রোহান এটি দেখার আরও একটি ভাল উপায় হ'ল যে কোনও কিছু static(একটি শ্রেণি, পদ্ধতি বা ক্ষেত্র) আসলেই কোনও কিছুর অন্তর্ভুক্ত নয়, এটি কেবল সাংগঠনিক উদ্দেশ্যে ক্লাসে ঝুলছে।
গোবারনাদর

4
এছাড়াও স্ট্যাটিক ক্ষেত্রগুলি ডেটা অবজেক্ট হিসাবে ব্যবহৃত হয় (এটি একটি যা ডেটা ধারণ করে এবং তাই পরিবর্তন করতে পারে না তবে আপনি এটির অভ্যন্তরে ডেটা ম্যানিপুলেট করতে পারেন)) স্ট্যাটিক পদ্ধতিগুলি কেবল স্থির ক্ষেত্রগুলিতে বলা যেতে পারে এবং এরপরে স্থির থাকা বা পরিবর্তন না করার একই ধারণা বহন করে না তাত্ক্ষণিকভাবে না !!
ব্যবহারকারী 2416728

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

4
অ্যাই, "পরিবর্তন হবে না" >> মানে ইন্সট্যান্ট করা যাবে না !!
ব্যবহারকারী 2416728

19

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

উদাহরণ স্বরূপ:

Person.staticMethod();           //accessing static method.

অ স্থির পদ্ধতির জন্য আপনাকে অবশ্যই ক্লাসটি ইনস্ট্যান্ট করতে হবে।

Person person1 = new Person();   //instantiating
person1.nonStaticMethod();       //accessing non-static method.

8

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


8

স্ট্যাটিক পদ্ধতি এবং ইনস্ট্যান্স পদ্ধতির মধ্যে পার্থক্য

  1. ইনস্ট্যান্স পদ্ধতিটি এমন একটি পদ্ধতি যা কল করার আগে তার শ্রেণীর একটি অবজেক্ট তৈরি করা দরকার। স্ট্যাটিক পদ্ধতি হ'ল জাভাতে এমন পদ্ধতি যা শ্রেণীর কোনও বস্তু তৈরি না করে কল করা যায়।

  2. স্ট্যাটিক পদ্ধতিটি স্থির কীওয়ার্ড সহ ঘোষিত হয়। দৃষ্টান্ত পদ্ধতিটি স্থির কীওয়ার্ড সহ নয়।

  3. স্থির পদ্ধতি মানে যা শ্রেণীর জন্য একক অনুলিপি হিসাবে উপস্থিত থাকবে। তবে উদাহরণ পদ্ধতিগুলি সেই শ্রেণীর জন্য তৈরি করা উদাহরণগুলির উপর নির্ভর করে একাধিক অনুলিপি হিসাবে উপস্থিত রয়েছে।

  4. স্থির পদ্ধতিগুলি শ্রেণি রেফারেন্স ব্যবহার করে আহ্বান করা যেতে পারে। উদাহরণ বা অ স্থির পদ্ধতি অবজেক্ট রেফারেন্স ব্যবহার করে আহ্বান জানানো হয়।

  5. স্ট্যাটিক পদ্ধতিগুলি উদাহরণ পদ্ধতিগুলি এবং উদাহরণের ভেরিয়েবলগুলি সরাসরি অ্যাক্সেস করতে পারে না। ইনস্ট্যান্স পদ্ধতিটি স্ট্যাটিক ভেরিয়েবল এবং স্থির পদ্ধতিগুলি সরাসরি অ্যাক্সেস করতে পারে।

তথ্যসূত্র: geeksforgeeks


4

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

ইন স্ট্যাটিক পদ্ধতি => সেখানে হিসাবে 'এই' এমন কোন জিনিস। প্রাক্তন: একই মেরামতকারী (স্থির পদ্ধতি)। আপনি যখন তাকে কল করবেন তখন আপনাকে ঠিক করতে হবে কোন মেরামতকারীকে কল করতে হবে (যেমন বৈদ্যুতিন)। এবং তিনি এসে কেবল আপনার টিভি ঠিক করবেন। তবে, অন্যান্য জিনিস ঠিক করার জন্য তার কাছে সরঞ্জাম নেই (কোনও 'এই' প্যারামিটার নেই)।

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


2

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

Myclass.get();

উদাহরণস্বরূপ পদ্ধতিতে প্রতিটি বস্তুর আলাদা আচরণ থাকবে তাই তাদেরকে বস্তুর উদাহরণ ব্যবহার করে পদ্ধতিটি কল করতে হবে। যেমন:

Myclass x = new Myclass();
x.get();

1

যদি কোনও পদ্ধতির স্থিতি পরিবর্তন করার কথা না হয় বা এটি কোনও উদাহরণ ভেরিয়েবল ব্যবহার করে না।

আপনি উদাহরণ ছাড়াই কল করতে চান পদ্ধতি।

যদি এটি কেবল এটি সরবরাহ করা যুক্তিতে কাজ করে।

ইউটিলিটি ফাংশন স্থির পদ্ধতির ভাল উদাহরণ। অর্থ্যাৎ গণিত.প্যাও (), এই ফাংশনটি বিভিন্ন মানের জন্য রাষ্ট্র পরিবর্তন করে না। সুতরাং এটি অচল।


1

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

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

class A {
    int a;
    int b;

    public void setParameters(int a, int b){
        this.a = a;
        this.b = b;
    }
    public int add(){
        return this.a + this.b;
   }

    public static returnSum(int s1, int s2){
        return (s1 + s2);
    }
}

উপরের উদাহরণে, আপনি যখন এড () যুক্ত হিসাবে কল করবেন:

A objA = new A();
objA.setParameters(1,2); //since it is instance method, call it using object
objA.add(); // returns 3 

B objB = new B();
objB.setParameters(3,2);
objB.add(); // returns 5

//calling static method
// since it is a class level method, you can call it using class itself
A.returnSum(4,6); //returns 10

class B{
    int s=8;
    int t = 8;
    public addition(int s,int t){
       A.returnSum(s,t);//returns 16
    }
}

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


0

ইনস্ট্যান্স পদ্ধতি বনাম স্ট্যাটিক পদ্ধতি

  1. ইনস্ট্যান্স পদ্ধতিটি ইনস্ট্যান্স পদ্ধতিগুলি এবং উদাহরণের ভেরিয়েবলগুলি সরাসরি অ্যাক্সেস করতে পারে।

  2. ইনস্ট্যান্স পদ্ধতিটি স্ট্যাটিক ভেরিয়েবল এবং স্থির পদ্ধতিগুলি সরাসরি অ্যাক্সেস করতে পারে।

  3. স্ট্যাটিক পদ্ধতিগুলি স্ট্যাটিক ভেরিয়েবল এবং স্থির পদ্ধতিগুলি সরাসরি অ্যাক্সেস করতে পারে।

  4. স্ট্যাটিক পদ্ধতিগুলি উদাহরণ পদ্ধতিগুলি এবং উদাহরণের ভেরিয়েবলগুলি সরাসরি অ্যাক্সেস করতে পারে না। তাদের অবশ্যই অবজেক্টের রেফারেন্স ব্যবহার করতে হবে। এবং স্থিতিশীল পদ্ধতি এই কীওয়ার্ডটি ব্যবহার করতে পারে না কারণ 'এটি' উল্লেখ করার কোনও উদাহরণ নেই।


-2

কোনও ফাংশনের সামনে রাখলে স্থির পরিবর্তনকারী বোঝায় যে imp ফাংশনের কেবল একটি অনুলিপিই বিদ্যমান। যদি স্থির পরিবর্তনকারীটিকে ফাংশনের সামনে না রাখা হয় তবে সেই শ্রেণীর প্রতিটি বস্তু বা উদাহরণ সহ সেই ফাংশনের একটি নতুন অনুলিপি তৈরি করা হয়। :) একই পরিবর্তনশীল ক্ষেত্রে।

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