'স্ট্যাটিক' কীওয়ার্ড একটি ক্লাসে কী করে?


444

নির্দিষ্ট হতে, আমি এই কোডটি চেষ্টা করছিলাম:

package hello;

public class Hello {

    Clock clock = new Clock();

    public static void main(String args[]) {
        clock.sayTime();
    }
}

কিন্তু এটি ত্রুটি দিয়েছে

স্থির পদ্ধতি প্রধানতে অ স্থিতিশীল ক্ষেত্রে অ্যাক্সেস করতে পারে না

সুতরাং আমি এই ঘোষণাটি পরিবর্তন করেছি clock:

static Clock clock = new Clock();

এবং এটা কাজ করে. ঘোষণার আগে কীওয়ার্ডটি রাখার অর্থ কী? এটি ঠিক কী করবে এবং / বা সেই অবজেক্টটির সাথে কী করা যায় সে সম্পর্কে সীমাবদ্ধ রাখবে?


আবার মনে রাখবেন যে ক্লাশ প্রতি শ্রেণি প্রতি স্ট্যাটিকের একটি উদাহরণ রয়েছে।
জাভমান

উত্তর:


633

static সদস্যগণ নির্দিষ্ট উদাহরণের পরিবর্তে শ্রেণীর অন্তর্ভুক্ত।

এর অর্থ হ'ল ক্ষেত্রের কেবলমাত্র একটি উদাহরণ staticউপস্থিত রয়েছে [1] এমনকি আপনি শ্রেণীর লক্ষ লক্ষ ঘটনা তৈরি করেন বা আপনি কোনও তৈরি না করেও। এটি সমস্ত দৃষ্টান্ত দ্বারা ভাগ করা হবে।

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

পার্শ্ব নোট: অবশ্যই staticসদস্যরা কোনও অবজেক্ট রেফারেন্সের মাধ্যমে দৃষ্টান্তের সদস্যদের অ্যাক্সেস করতে পারে

উদাহরণ:

public class Example {
    private static boolean staticField;
    private boolean instanceField;
    public static void main(String[] args) {
        // a static method can access static fields
        staticField = true;

        // a static method can access instance fields through an object reference
        Example instance = new Example();
        instance.instanceField = true;
    }

[1]: রানটাইম বৈশিষ্ট্যগুলির উপর নির্ভর করে, এটি ক্লাসলোডার বা অ্যাপডোমাইন বা থ্রেডের জন্য এক হতে পারে, তবে এটি বিন্দুটির পাশে।


5
.NET- এ, আপনি [থ্রেডস্ট্যাটিক] বৈশিষ্ট্য ব্যবহার করে এই আচরণটিও সংশোধন করতে পারেন - যা স্থিরভাবে নির্দিষ্ট থ্রেডে স্থানীয় করে তোলে।
TheSoftwareJedi

4
আমি জানি এটি পুরানো পোস্ট তবে আমার মতো নতুনদের জন্য এটি সহায়ক হতে পারে। stackoverflow.com/questions/7026507/...
user3526905

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

যদি কোনও শ্রেণীর স্থির সদস্যকে 2 টি বিভিন্ন থ্রেড দ্বারা রেফারেন্স করা হয় তবে স্থির সদস্যটির কতটি উদাহরণ রয়েছে? আমি এটি 2 এর মতো অনুভব করছি তবে আপনি যদি থ্রেড জুড়ে একই উদাহরণ চান তবে অস্থির কীওয়ার্ডটি ব্যবহার করতে হবে। এটা কি ঠিক?
ড্যান

.. এবং যদি ক্লাসের কোনও উদাহরণ বাকী থাকে না তবে মানটি সংরক্ষণ করা হয়?
mckenzm

130

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

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

যদি না আপনার মূলের বাইরে কোথাও "ঘড়ি" প্রয়োজন হয় তবে এটি ঠিক একইভাবে কাজ করবে:

package hello;
public class Hello
{
    public static void main(String args[])
    {
      Clock clock=new Clock();
      clock.sayTime();    
    }
}

এটি এটি করার আরও সাধারণ উপায়। main()রুটিন স্বয়ংসম্পূর্ণ হওয়া উচিত।
জেসন এস

1
দ্বিতীয় দৃষ্টিতে এটি প্রতিটি সময়কে প্রধান পদ্ধতিটি ডাকা হয়, ঘড়ির একটি নতুন উদাহরণ তৈরি করবে?
ক্লিক করুন

2
দ্বিতীয় দৃষ্টিতে ক্লক স্ট্যাটিক এটি কেবল একবার তৈরি করবে। আমার উদাহরণে, যেখানে ঘড়িটি মূলের মধ্যে থাকে, তবে হ্যাঁ, এটি প্রতিবার প্রধান বলা হলেও এটি নতুন তৈরি করে। তবে সাধারণত প্রোগ্রামটি শুরু হওয়ার পরে সাধারণত প্রধান বলা হয় এবং যখন এটি প্রস্থান করে, তখন সমস্ত কিছু ফ্রি-এড হয়।
পল টমবলিন

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

@ user5621266 আমি কেবল mainপদ্ধতিটি ব্যবহার করেছি কারণ ওপি করেছে। পরিবর্তে যদি এটি এমন একটি সর্বজনীন পদ্ধতি ছিল যা অন্য কোথাও থেকে ডেকে আনা হয় এবং হ্যালো শ্রেণিটি একাধিকবার ইনস্ট্যান্ট করা হয় তবে clockস্থির না হলে এটি প্রতিটি হ্যালো উদাহরণের জন্য একটি ক্লক উদাহরণ তৈরি করতে পারে ।
পল টমলিন

97

staticশব্দ মানে যে কিছু (ক ক্ষেত্র, পদ্ধতি বা নেস্টেড বর্গ) সঙ্গে সম্পর্কযুক্ত টাইপ বদলে কোন বিশেষ উদাহরণস্বরূপ ধরনের। সুতরাং উদাহরণস্বরূপ, ক্লাসের Math.sin(...)কোনও উদাহরণ ছাড়াই একটি কল করে Mathএবং আপনি অবশ্যই শ্রেণীর কোনও উদাহরণ তৈরি করতে পারবেন নাMath

আরও তথ্যের জন্য, ওরাকলের জাভা টিউটোরিয়ালটির প্রাসঙ্গিক বিটটি দেখুন ।


সাইড নোট

জাভা দুর্ভাগ্যক্রমে আপনি স্থির সদস্যদের অ্যাক্সেসের অনুমতি দেয় যেমন তারা উদাহরণস্বরূপ সদস্য, যেমন

// Bad code!
Thread.currentThread().sleep(5000);
someOtherThread.sleep(5000);

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

// Clearer
Thread.sleep(5000);

1
আরেকটি উদাহরণ: System.out.println () দেখতে কোনও শ্রেণিবদ্ধের মতো লাগে তবে এটি আসলে একটি উদাহরণ পদ্ধতি instance যেহেতু সিস্টেম ক্লাসে একটি মুদ্রণযন্ত্র উদাহরণ রয়েছে।
জিয়াহুই ঝাং

@ লেসলি শেইং: না, এটি আমার কাছে কোনও শ্রেণিবদ্ধের মতো System.outলাগে না , যেমনটি আমার কাছে কোনও টাইপের নাম পছন্দ করে না।
জন স্কিটি

42

staticজাভা শব্দ এর মানে হল যে পরিবর্তনশীল বা ফাংশন যা বর্গ সমস্ত উদাহরণ মধ্যে ভাগ করা আছে যেমন জন্যে টাইপ , প্রকৃত বস্তু নিজেদের।

সুতরাং আপনার যদি ভেরিয়েবল থাকে: private static int i = 0;এবং আপনি যদি এটির বৃদ্ধি করেন (তবে i++) এক নজরে , পরিবর্তনটি সমস্ত ক্ষেত্রে প্রতিফলিত হবে। iএখন সব ক্ষেত্রে 1 হবে।

স্থিতিশীল পদ্ধতি কোনও বস্তুর তাত্ক্ষণিক ব্যবহার না করে ব্যবহার করা যেতে পারে।


4
"ভাগ সমস্ত উদাহরণ মধ্যে" ভুল ছাপ দেয়, আইএমও - এটা প্রস্তাব করে যে আপনি না বস্তুর একটি দৃষ্টান্ত থাকতে হবে।
জন স্কিটি

1
(যদিও সত্যিকারের কোনও দৃষ্টান্ত হওয়ার দরকার নেই , কারণ স্থির ক্ষেত্র ইত্যাদি to টাইপের অন্তর্গত ))
জন স্কিটি

@ জোন স্কিটি স্ট্যাটিক টাইপের সাথে সম্পর্কিত, আপত্তি নয়? আপনি আরও বিস্তারিত বলতে পারেন? ডেটাটাইপের মতো টাইপ করুন: ইনট, ডাবল, ...?
truongnm

@ ট্রুঙ্গনম: ক্লাসে টাইপ করুন যা পরিবর্তনশীল / পদ্ধতিটি ঘোষণা করে।
জন স্কিটি

26

স্থির সদস্যদের বুনিয়াদি ব্যবহার ...

public class Hello
{
    // value / method
    public static String staticValue;
    public String nonStaticValue;
}

class A
{
    Hello hello = new Hello();
    hello.staticValue = "abc";
    hello.nonStaticValue = "xyz";
}

class B
{
    Hello hello2 = new Hello(); // here staticValue = "abc"
    hello2.staticValue; // will have value of "abc"
    hello2.nonStaticValue; // will have value of null
}

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

Hello hello = new Hello();
hello.staticValue = "abc";

আপনি কেবল শ্রেণীর নাম দ্বারা স্থিত মান বা পদ্ধতিগুলি কল করতে পারেন:

Hello.staticValue = "abc";

22

স্ট্যাটিক মানে ক্লাসের সাথে সম্পর্কিত পদ্ধতি বা ভেরিয়েবলগুলি ব্যবহার করার জন্য আপনাকে ক্লাসের কোনও উদাহরণ তৈরি করতে হবে না। আপনার উদাহরণে, আপনি কল করতে পারেন:

Hello.main(new String[]()) //main(...) is declared as a static function in the Hello class

সরাসরি, পরিবর্তে:

Hello h = new Hello();
h.main(new String[]()); //main(...) is a non-static function linked with the "h" variable

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


স্ট্যাটিক প্রসঙ্গের জন্য দুর্দান্ত ব্যাখ্যা :)
আবদেল-রাউফ

20

জাভা স্থির:

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

স্ট্যাটিক কীওয়ার্ড এর সাথে ব্যবহার করা যেতে পারে:

পদ্ধতি

পরিবর্তনশীল

ক্লাস অন্য ক্লাসের মধ্যে বাসা বাঁধে

সূচনা ব্লক

এর সাথে ব্যবহার করা যাবে না:

ক্লাস (নেস্টেড নয়)

নির্মাতা

ইন্টারফেস

পদ্ধতি স্থানীয় অভ্যন্তর শ্রেণি (পার্থক্য তারপর নেস্টেড বর্গ)

ইনার ক্লাস পদ্ধতি

উদাহরণস্বরূপ ভেরিয়েবল

স্থানীয় চলক

উদাহরণ:

নিম্নলিখিত উদাহরণটি কল্পনা করুন যার একটি পরিবর্তনশীল নাম গণনা রয়েছে যা কনস্ট্রাক্টরে বৃদ্ধি পেয়েছে:

package pkg;

class StaticExample {
    int count = 0;// will get memory when instance is created

    StaticExample() {
        count++;
        System.out.println(count);
    }

    public static void main(String args[]) {

        StaticExample c1 = new StaticExample();
        StaticExample c2 = new StaticExample();
        StaticExample c3 = new StaticExample();

    }
}

আউটপুট:

1 1 1

যেহেতু অবজেক্ট ভেরিয়েবলটি অবজেক্ট তৈরির সময় স্মৃতি পেয়ে যায়, তাই প্রতিটি বস্তুর ইনস্ট্যান্স ভেরিয়েবলের অনুলিপি থাকবে, যদি এটি বৃদ্ধি করা হয়, তবে এটি অন্য বস্তুর প্রতিফলন করে না।

এখন যদি আমরা উদাহরণের পরিবর্তনশীল গণনাটিকে একটি স্থিতিশীল রূপে পরিবর্তন করি তবে প্রোগ্রামটি বিভিন্ন আউটপুট তৈরি করবে:

package pkg;

class StaticExample {
    static int count = 0;// will get memory when instance is created

    StaticExample() {
        count++;
        System.out.println(count);
    }

    public static void main(String args[]) {

        StaticExample c1 = new StaticExample();
        StaticExample c2 = new StaticExample();
        StaticExample c3 = new StaticExample();

    }
}

আউটপুট:

1 2 3

এক্ষেত্রে স্ট্যাটিক ভেরিয়েবল কেবল একবারেই মেমরিটি পাবে, যদি কোনও বস্তু স্থিতিশীল ভেরিয়েবলের মান পরিবর্তন করে তবে এটি তার মান ধরে রাখতে পারে।

ফাইনাল সহ স্থির:

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

এখানে চিত্র বর্ণনা লিখুন

চিত্র সংস্থান: চূড়ান্ত স্ট্যাটিক


15

বিদ্যমান উত্তরগুলি যুক্ত করতে, আমাকে একটি ছবি দিয়ে চেষ্টা করতে দিন:

সমস্ত সঞ্চয়ী অ্যাকাউন্টগুলিতে 2% এর সুদের হার প্রয়োগ করা হয়। সুতরাং এটি অচল

ভারসাম্য পৃথক হওয়া উচিত , সুতরাং এটি স্থির নয়

এখানে চিত্র বর্ণনা লিখুন


13

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


1
মেরহাদাদের উত্তরের মন্তব্যে অ্যাপোক্যালিস্প এটি উল্লেখ করেছিলেন।
জাচ ল্যাংলি

1
ভাল যুক্তি. অনেক লোক এটি জানেন না, তবে আপনি একবার ক্লাসলোডারদের সাথে ঝামেলা শুরু করলে এটি খুব গুরুত্বপূর্ণ হয়ে ওঠে।
sleske

2
এটি সব সত্য তবে এটি প্রশ্নের উত্তর দেয় না। এটি একটি মন্তব্য হিসাবে পোস্ট করা উচিত ছিল।
লার্ন

7

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


6

কীওয়ার্ডটি staticক্ষেত্র বা কোনও পদ্ধতিটিকে শ্রেণীর সাথে সম্পর্কিত হিসাবে বোঝানো হয় এবং উদাহরণটি নয়। আপনার কোড ব্যবহার করে, যদি বস্তুটি Clockস্থিতিশীল হয় তবে Helloশ্রেণীর সমস্ত দৃষ্টান্ত Clockসাধারণভাবে এই ডেটা সদস্য (ক্ষেত্র) ভাগ করে নেবে । আপনি যদি এটি অ-স্থিতিশীল করেন তবে প্রতিটি স্বতন্ত্র উদাহরণের Helloএকটি অনন্য Clockক্ষেত্র থাকতে পারে।

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

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

আপনার জন্য, এর অর্থ আপনার কোডে নিম্নলিখিত পরিবর্তন:

package hello;

public class Hello {

    private Clock clock = new Clock();

    public Clock getClock() {
        return clock;
    }

    public static void main(String args[]) {
        Hello hello = new Hello();
        hello.getClock().sayTime();
    }
}

6

জাভাতে, মূল staticশব্দটিকে নিম্নলিখিত হিসাবে চিহ্নিত করা যায়:

"কোনও নির্দিষ্ট উদাহরণের সাথে বিবেচনা বা সম্পর্ক ছাড়াই"

আপনি যদি staticএইভাবে চিন্তা করেন, তবে এটির সাথে সম্পর্কিত বিভিন্ন প্রসঙ্গে এটির ব্যবহারটি বোঝা সহজ হয়:

  • একটি staticক্ষেত্র এমন ক্ষেত্র যা কোনও নির্দিষ্ট উদাহরণের চেয়ে শ্রেণির অন্তর্গত

  • একটি staticপদ্ধতি এমন একটি পদ্ধতি যা সম্পর্কে কোনও ধারণা নেই this; এটি শ্রেণিতে সংজ্ঞায়িত করা হয় এবং শ্রেণীর কোনও নির্দিষ্ট উদাহরণ সম্পর্কে জানে না যতক্ষণ না এটিতে কোনও রেফারেন্স দেওয়া হয়

  • একজন staticসদস্য বর্গ কোনো ধারণা বা তার এনক্লোজিং ক্লাসের একটা নিদর্শন জ্ঞান ছাড়া একটি নেস্টেড ক্লাস হয় (যদি না একটি অন্তর্নিহিত বর্গ উদাহরণস্বরূপ একটি রেফারেন্স এটি পাস করা হয়েছে)


5

স্ট্যাটিক ক্লক সদস্যকে উদাহরণের সদস্যের পরিবর্তে শ্রেণির সদস্য করে তোলে। স্ট্যাটিক কীওয়ার্ড ব্যতীত আপনার হ্যালো ক্লাসের একটি দৃষ্টান্ত তৈরি করতে হবে (যার একটি ক্লক সদস্যের পরিবর্তনশীল রয়েছে) - যেমন

Hello hello = new Hello();
hello.clock.sayTime();

5

স্থিতিশীল পদ্ধতিতে যে শ্রেণীর সংজ্ঞা দেওয়া হয় সেগুলির কোনও উদাহরণের ভেরিয়েবল ব্যবহার করবেন না the পার্থক্যের একটি খুব ভাল ব্যাখ্যা এই পৃষ্ঠায় পাওয়া যাবে difference


5

আমি "সহায়ক" শ্রেণিতে স্থিতিশীল পদ্ধতিগুলির (শুধুমাত্র যদি সম্ভব হয়) পছন্দ করতে পছন্দ করেছি।

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

সম্ভবত অন্যান্য সুবিধা রয়েছে।


4
//Here is an example 

public class StaticClass 
{
    static int version;
    public void printVersion() {
         System.out.println(version);
    }
}

public class MainClass 
{
    public static void main(String args[]) {  
        StaticClass staticVar1 = new StaticClass();
        staticVar1.version = 10;
        staticVar1.printVersion() // Output 10

        StaticClass staticVar2 = new StaticClass();
        staticVar2.printVersion() // Output 10
        staticVar2.version = 20;
        staticVar2.printVersion() // Output 20
        staticVar1.printVersion() // Output 20
    }
}

3

স্থির সদস্যদের "এই" পয়েন্টার না থাকার বিষয়েও ভাবতে পারেন। এগুলি সকল দৃষ্টান্তের মধ্যে ভাগ করে নেওয়া হয়।


3

স্থির ধারণা বুঝতে

public class StaticPractise1 {
    public static void main(String[] args) {
        StaticPractise2 staticPractise2 = new StaticPractise2();
        staticPractise2.printUddhav(); //true
        StaticPractise2.printUddhav(); /* false, because printUddhav() is although inside StaticPractise2, but it is where exactly depends on PC program counter on runtime. */

        StaticPractise2.printUddhavsStatic1(); //true
        staticPractise2.printUddhavsStatic1(); /*false, because, when staticPractise2 is blueprinted, it tracks everything other than static  things and it organizes in its own heap. So, class static methods, object can't reference */

    }
}

দ্বিতীয় শ্রেণী

public class StaticPractise2 {
    public static void printUddhavsStatic1() {
        System.out.println("Uddhav");
    }

    public void printUddhav() {
        System.out.println("Uddhav");
    }
}

2

main() একটি স্থিতিশীল পদ্ধতি যা দুটি মৌলিক বিধিনিষেধ আছে:

  1. স্থিতিশীল পদ্ধতিটি কোনও অ-স্থিতিশীল ডেটা সদস্য ব্যবহার করতে পারে না বা সরাসরি অ-স্থিতিক পদ্ধতিতে কল করতে পারে না।
  2. this()এবং super()স্থির প্রসঙ্গে ব্যবহার করা যাবে না।

    class A {  
        int a = 40; //non static
        public static void main(String args[]) {  
            System.out.println(a);  
        }  
    }

আউটপুট: সংকলন সময় ত্রুটি


1

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

স্ট্যাটিক পদ্ধতিগুলি একটি শ্রেণীর স্তর যা আমরা শ্রেণীর নাম ব্যবহার করে অ্যাক্সেস করতে পারি

স্ট্যাটিক ভেরিয়েবল গেটারস এবং সিটারগুলির জন্য নিম্নলিখিতটি উদাহরণস্বরূপ:

public class Static 
{

    private static String owner;
    private static int rent;
    private String car;
    public String getCar() {
        return car;
    }
    public void setCar(String car) {
        this.car = car;
    }
    public static int getRent() {
        return rent;
    }
    public static void setRent(int rent) {
        Static.rent = rent;
    }
    public static String getOwner() {
        return owner;
    }

    public static void setOwner(String owner) {
        Static.owner = owner;
    }

}

1

এই ধারণার জন্য 'স্ট্যাটিক' শব্দের পছন্দ সম্পর্কে এখানে একটি প্রশ্ন জিজ্ঞাসা করা হয়েছিল । এটি এই প্রশ্নের দ্বিধাবিভক্ত ছিল, তবে আমি মনে করি না যে ব্যুৎপত্তিটি স্পষ্টভাবে মোকাবেলা করা হয়েছে। তাই ...


এটি মূলশব্দ পুনরায় ব্যবহারের কারণে, সি দিয়ে শুরু হবে to

সিতে ডেটা ঘোষণাগুলি বিবেচনা করুন (একটি ফাংশন বডির ভিতরে):

    void f() {
        int foo = 1;
        static int bar = 2;
         :
    }

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

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

    class C {
        int foo = 1;
        static int bar = 2;
         :
    }

সবশেষে, আমরা পদ্ধতিতে আসি।

    class C {
        int foo() { ... }
        static int bar() { ... }
         :
    }

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

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