আপনি জাভাতে কোনও শ্রেণিকে স্থির হিসাবে ঘোষণা করতে পারছেন না কেন?


459

আপনি জাভাতে কোনও শ্রেণিকে স্থির হিসাবে ঘোষণা করতে পারছেন না কেন?


72
পাল্টা প্রশ্ন: আপনি যদি উচ্চ-স্তরের শ্রেণি হিসাবে ঘোষণা করেন তবে আপনি এর প্রভাবটি কী হবে বলে আশা করবেন static?
জোছিম সউর

3
না, আপনি স্থির অভ্যন্তর শ্রেণি বাদে পারবেন না। তবে, আপনি এটি দিয়ে কী অর্জন করতে চান?
মানোলোয়ার

60
@ জোয়াচিম সাউর: ঠিক আছে, সি # staticক্লাসকে ব্যাখ্যা করে abstract final, যেমন তাদের তাত্ক্ষণিকভাবে স্থাপন করা যায় না এবং বাড়ানোও যায় না। এর অর্থ তারা কেবল স্থিতিশীল সদস্য থাকতে পারে যা ক্লাসগুলির জন্য দরকারী যেখানে কেবল সহায়ক পদ্ধতি রয়েছে।
বিসিএটি

30
@ বিসিএটি এটি সি # এর ক্ষেত্রে সত্য, তবে জাভা শ্রেণিটি বিমূর্ত বা চূড়ান্ত হতে পারে, উভয়ই নয়। কোনও শ্রেণিকে তাত্ক্ষণিক প্রতিরোধের জন্য, কেউ একটি বেসরকারী নির্মাতা ঘোষণা করতে পারে।
লরেঞ্জো পালিডোরি

7
@ জোয়াচিমসৌয়ার সিম্পল, আমি ক্লাসের সমস্ত সদস্যকে স্থির থাকতে বাধ্য করতে চাই (সম্ভবত প্রতিটি পদ্ধতি বা সম্পত্তিও ঘোষণা করতে হবে)।
hmartinezd

উত্তর:


475

কেবল নেস্টেড ক্লাসগুলি অচল থাকতে পারে। এটি করে আপনি বাহ্যিক শ্রেণীর উদাহরণ না রেখে নেস্টেড ক্লাসটি ব্যবহার করতে পারেন।

class OuterClass{
    public static class StaticNestedClass{
    }

    public class InnerClass{
    }

    public InnerClass getAnInnerClass(){
        return new InnerClass();
    }

    //This method doesn't work
    public static InnerClass getAnInnerClassStatically(){
        return new InnerClass();
    }
}

class OtherClass{
    //Use of a static nested class:
    private OuterClass.StaticNestedClass staticNestedClass = new OuterClass.StaticNestedClass();

    //Doesn't work
    private OuterClass.InnerClass innerClass = new OuterClass.InnerClass();

    //Use of an inner class:
    private OuterClass outerclass= new OuterClass();
    private OuterClass.InnerClass innerClass2 = outerclass.getAnInnerClass();
    private OuterClass.InnerClass innerClass3 = outerclass.new InnerClass();
}

সূত্র:

একই বিষয়ে:


3
প্রথম বাক্যটি সঠিক না হওয়া সত্ত্বেও +1। টিউটোরিয়ালে যেমন লেখা আছে "অ স্থিত নেস্টেড ক্লাসগুলিকে ইনার ক্লাস বলা হয়।" (জেএলএস: "একটি অভ্যন্তর শ্রেণি হল একটি নেস্টেড শ্রেণি যা স্পষ্টভাবে বা স্পষ্টভাবে স্ট্যাটিক হিসাবে ঘোষিত হয় না") "
ব্যবহারকারী 85421

74
আপনি অবশ্যই সঠিক; তবে আমি দেখতে পাচ্ছি না কীভাবে এটি প্রশ্নের উত্তর দেয়
জোয়েরি হেন্ড্রিকেক্স

2
@ কার্লোস হুবার্গার, আপনি ঠিক বলেছেন, আমি পোস্টটি আপডেট করেছি। @ জোয়েরি হেন্ড্রিক্স, প্রশ্ন ছিল, "কেন কোনও শ্রেণি স্থির হিসাবে ঘোষণা করা যায় না ..?", তারা করতে পারে এবং [আমার পোস্টটি এখানে পড়তে] পারে। এটি স্ট্যাটিক ক্লাসগুলির ব্যবহার এবং কেন তাদের নেস্টেড-ক্লাস করতে হবে সে সম্পর্কে একটি ব্যাখ্যা।
কলিন হেবার্ট

1
এখানে প্রদত্ত সমাধানটি ঠিক আছে ... তবে আমি এখনও আশ্চর্য হয়েছি যে y ppl যৌক্তিকভাবে ব্যাখ্যা করতে পারেনি যে স্থির শ্রেণি জাভাতে সম্ভব নয়..যেও ওওপিএস ধারণার ব্যাখ্যাটি সঠিক উত্তর হবে। আমি এটির জন্য অপেক্ষা করছি
পুণিথ রাজ

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

39

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


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

35

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

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


1
হ্যাঁ. এটিকে অন্য উপায়ে বলতে গেলে শীর্ষ স্তরের ক্লাসগুলি ডিফল্টরূপে স্থির থাকে, তাই কীওয়ার্ডটির প্রয়োজন নেই।
ওয়ারেন ডিউ

1
ভাল, আমি ওয়ারেন ডিউ যা বলেছিলাম তাতে যুক্ত করব - "স্থির সদস্যদের অ্যাক্সেস করার সময় শীর্ষ স্তরের শ্রেণিগুলি ডিফল্টরূপে স্থির থাকে"।
ডেক্সটার

1
আন্ডাররেটেড উত্তর। একটি ক্লাসের প্রতিটি পদ্ধতিকে স্থিতিশীল হতে বাধ্য এবং কনস্ট্রাক্টর প্রাইভেটের জন্য দুর্দান্ত একটি নতুন কীওয়ার্ডটি দুর্দান্ত would আমি স্থির নাম রাখব না কারণ এটি কেবল বিভ্রান্তিকর।
G_V

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

29

প্রাইভেট কনস্ট্রাক্টর সহ ক্লাস স্থির।

আপনার ক্লাসটি এভাবে ঘোষণা করুন:

public class eOAuth {

    private eOAuth(){}

    public final static int    ECodeOauthInvalidGrant = 0x1;
    public final static int    ECodeOauthUnknown       = 0x10;
    public static GetSomeStuff(){}

}

এবং আপনি আরম্ভ ছাড়াই ব্যবহার করতে পারেন:

if (value == eOAuth.ECodeOauthInvalidGrant)
    eOAuth.GetSomeStuff();
...

3
এটি অচল নয়, তবে এতে স্থির বৈশিষ্ট্য রয়েছে। আপনি যদি সর্বজনীন ফাইনাল লিখেন ECodeOauthUnعلوم = 0x10; এটা আর স্থির নয়।
ব্যবহারকারী 1883212

9
এখানে যে কী ঘটছে তা যদি কেউ ভাবতে থাকে তবে এটি একটি "স্ট্যাটিক ক্লাস" - এর সি # সংজ্ঞার সাথে মিলে যায় - এমএসডিএন.ইমক্রোসফটকম /en-us/library/79b3xss3%28v=vs.90%29.aspx । "স্ট্যাটিক ক্লাস" এর জাভা সংজ্ঞা দেওয়া, সমস্ত অভ্যন্তরীণ শ্রেণি স্থির (ভাইবোন উত্তর দেখুন)।
Calum

1
@ ব্যবহারকারী 1883212 বাদে, আমি এমনকি এও বলতে পারি যে এই উত্তরটি পাঠককে বিভ্রান্ত করে যে এখানে প্রাইভেট কনস্ট্রাক্টর একরকম গুরুত্বপূর্ণ, যদিও এটি মোটেও গুরুত্বপূর্ণ নয়।
tlWitec

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

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

13

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

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


প্রথম বাক্যটি সঠিক না হওয়া সত্ত্বেও +1। জেএলএস যেমন বলেছে: "একটি অভ্যন্তর শ্রেণি হল একটি নেস্টেড বর্গ যা স্পষ্টভাবে বা স্পষ্টভাবে স্থির হিসাবে ঘোষণা করা হয় না।" (কেবলমাত্র পরিভাষা, আমি জানি ...)
ব্যবহারকারী 85421

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

12

আপনি কোনও ইউটিলিটি ক্লাস তৈরি করতে পারেন (যা উদাহরণ তৈরি করতে পারে না) কোনও এনামের কোনও প্রকারের উদাহরণ না দিয়ে ঘোষণা করে। যেমন আপনি সুনির্দিষ্টভাবে ঘোষণা করছেন যে কোনও দৃষ্টান্ত নেই।

public enum MyUtilities {;
   public static void myMethod();
}

25
প্রকার হিসাবে একটি গণনা একটি নির্দিষ্ট প্রত্যাশা: এটি আইটেমগুলির একটি গণিতের সেট। এটি "ইউটিলিটি ক্লাস" এর জন্য ব্যবহার করা, যখন আপনি অন্যথায় কেবল প্রাইভেট কনস্ট্রাক্টরের সাথে ক্লাস করতে পারতেন, শব্দার্থগতভাবে বিভ্রান্তিকর।
ভিশনারি সফ্টওয়্যার সলিউশন

5
@ ভিশনারিসফটওয়্যার সলিউশন আমার কাছে এই বৈশিষ্ট্যটি বলে যে এই শ্রেণীর কোনও উদাহরণ নেই, বরং পরোক্ষভাবে কোনও শ্রেণীর উদাহরণ তৈরি করা অসম্ভব করে তোলে।
পিটার লরে

8
public class Outer {
   public static class Inner {}
}

... এটি স্থির হিসাবে ঘোষণা করা যেতে পারে - যতক্ষণ না এটি সদস্য শ্রেণি হয়।

জেএলএস থেকে:

সদস্য শ্রেণিগুলি স্থির হতে পারে, এক্ষেত্রে পার্শ্ববর্তী শ্রেণীর উদাহরণ ভেরিয়েবলগুলিতে তাদের অ্যাক্সেস নেই; অথবা সেগুলি অভ্যন্তর শ্রেণি হতে পারে (§8.1.3)।

এবং এখানে:

স্ট্যাটিক কীওয়ার্ডটি অন-অভ্যন্তর শ্রেণীর টি-র মূলের মধ্যে সদস্য প্রকার সি ঘোষণাকে সংশোধন করতে পারে Its এর প্রভাবটি ঘোষণা করে যে সি কোনও অভ্যন্তর শ্রেণি নয়। ঠিক যেমন টি এর স্থির পদ্ধতিতে তার শরীরে টি এর বর্তমান কোনও উদাহরণ নেই, তেমনি সি এরও টি এর বর্তমান কোন উদাহরণ নেই, আবার এর কোনও লেক্সিকালি বদ্ধ দৃষ্টান্তও নেই have

একটি স্থিতিশীল কীওয়ার্ড শীর্ষ স্তরের শ্রেণীর জন্য কোনও অর্থবোধ করে না, কারণ শীর্ষ স্তরের শ্রেণিতে কোনও সংযুক্তকরণের ধরণ নেই।


যদি এটি অভ্যন্তরীণ না হয় তবে কেন এটি কল Inner? Nestedএকটি কম বিভ্রান্তিকর পছন্দ হত।
লার্নের মারকুইস

5

উপরে বর্ণিত হিসাবে, অন্য শ্রেণীর সদস্য না থাকলে কোনও শ্রেণি স্থির হতে পারে না।

আপনি যদি এমন কোনও ক্লাস ডিজাইন করতে খুঁজছেন যেখানে "একাধিক উদাহরণ থাকতে পারে না", আপনি "সিঙ্গলটন" ডিজাইন প্যাটার্নটি সন্ধান করতে পারেন।

শিক্ষানবিস একক এখানে তথ্য ।

সতর্কীকরণ:

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


4

জাভা স্থির অভ্যন্তর শ্রেণিগুলি কীভাবে সংজ্ঞায়িত করে তা ছাড়াও সি # ওয়ার্ল্ড [1] অনুসারে স্থির শ্রেণির আরও একটি সংজ্ঞা রয়েছে । স্ট্যাটিক ক্লাস এমন একটি যা কেবল স্থিতিশীল পদ্ধতি (ফাংশন) থাকে এবং এটি প্রক্রিয়াজাত প্রোগ্রামিং সমর্থন করার জন্য বোঝানো হয়। এই ধরণের ক্লাসগুলি সত্যই ক্লাস নয় যে শ্রেণীর ব্যবহারকারী কেবল সহায়ক সহায়কগুলিতে আগ্রহী এবং শ্রেণীর উদাহরণ তৈরিতে নয়। স্ট্যাটিক ক্লাসগুলি সি # তে সমর্থিত থাকলেও জাভাতে এ জাতীয় সরাসরি সমর্থন নেই। তবে আপনি জাভাতে সি # স্ট্যাটিক ক্লাসের নকল করতে এনাম ব্যবহার করতে পারেন যাতে কোনও ব্যবহারকারী কোনও প্রদত্ত শ্রেণীর উদাহরণ তৈরি করতে না পারে (এমনকি প্রতিচ্ছবি ব্যবহার করে) [২] :

public enum StaticClass2 {
    // Empty enum trick to avoid instance creation
    ; // this semi-colon is important

    public static boolean isEmpty(final String s) {
        return s == null || s.isEmpty();
    }
}

3

জাভাতে আমরা কোড করি সমস্ত কিছু একটি শ্রেণিতে চলে যায়। যখনই আমরা একটি ক্লাস JVM চালাই কোনও বস্তুকে তাত্ক্ষণিক করে তোলে। জেভিএম সংখ্যার অবজেক্ট তৈরি করতে পারে, সংজ্ঞা অনুসারে স্ট্যাটিক মানে আপনার কাছে সমস্ত অবজেক্টে অনুলিপি একই সেট থাকে।

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

আপনি যদি প্রতিবার এটি চালানোর জন্য কেবলমাত্র প্রতিস্থাপন করছেন তবে এটি তৈরির মূল বিষয় কী?

সুতরাং যে কারণেই জাভা শীর্ষ-স্তরের শ্রেণির স্থিতিশীলতা থেকে মুক্তি পেয়েছে।

আরও দৃ concrete় কারণ থাকতে পারে তবে এটি আমার কাছে অনেক যুক্তিযুক্ত বোধ তৈরি করেছে।


3
অভ্যন্তরীণ ক্লাসগুলি বাইরের ক্লাসগুলির সাথে সম্পর্কিত এবং এ কারণেই এগুলি স্থির থাকতে পারে, কারণ আপনার উপর নির্ভর করার জন্য কোনও আলাদা অবজেক্ট রয়েছে।
ব্যবহারকারী2626445

1
আপনার অর্থ 'এ কারণেই তারা স্থির থাকতে পারে না '।
লার্নের মারকুইস

2

স্থির হতে পারে এমন একমাত্র ক্লাসগুলি হ'ল অভ্যন্তরীণ ক্লাস। নিম্নলিখিত কোডটি ঠিক কাজ করে:

public class whatever {
    static class innerclass {
    }
}

স্থিতিশীল অভ্যন্তর শ্রেণীর বিন্দুটি হ'ল তাদের বাইরের শ্রেণীর অবজেক্টের কোনও উল্লেখ নেই।


1
'স্ট্যাটিক ইনার' শর্তে একটি বৈপরীত্য। 'স্থির' এবং 'অভ্যন্তরীণ' পারস্পরিক একচেটিয়া। আপনি যে শব্দটির সন্ধান করছেন তা 'অভ্যন্তরীণ' নয়, 'অভ্যন্তরীণ'।
লার্নের মারকুইস

1

আমি মনে করি এটি এক গ্লাস কফি পান করা যত সহজ! এই একবার দেখুন। ক্লাস সংজ্ঞা দেওয়ার সময় আমরা স্ট্যাটিক কীওয়ার্ডটি স্পষ্টভাবে ব্যবহার করি না।

public class StaticClass {

    static private int me = 3;
    public static void printHelloWorld() {
       System.out.println("Hello World");
    }



    public static void main(String[] args) {
        StaticClass.printHelloWorld();
        System.out.println(StaticClass.me);
    }
}

এটি কি স্থির শ্রেণির সংজ্ঞা নয়? আমরা কেবলমাত্র একটি শ্রেণিতে আবদ্ধ একটি ফাংশন ব্যবহার করি। সাবধান হন যে এই ক্ষেত্রে আমরা সেই নেস্টেডে আরও একটি ক্লাস ব্যবহার করতে পারি। এটা দেখ:

class StaticClass1 {

    public static int yum = 4;

    static void  printHowAreYou() {
        System.out.println("How are you?");
    }
}

public class StaticClass {

    static int me = 3; 
    public static void printHelloWorld() {
       System.out.println("Hello World");
       StaticClass1.printHowAreYou();
       System.out.println(StaticClass1.yum);
    }



    public static void main(String[] args) {
        StaticClass.printHelloWorld();
        System.out.println(StaticClass.me);
    }
}

আমি মনে করি আমরা স্থির শ্রেণীর সংজ্ঞা হিসাবে এই জাতীয় ক্লাসগুলি স্থিত শ্রেণীর সংজ্ঞা হিসাবে বিবেচনা করতে পারি কেবল যোগ্যতা হিসাবে স্ট্যাটিক কীওয়ার্ড ব্যবহার করে নয়।
এরফঙ্কাম

একটি প্রাইভেট কনস্ট্রাক্টর তৈরির বিষয়ে নিশ্চিত হন, অন্যথায় আপনি বলতে সক্ষম হবেন new StaticClass()এবং এটি সত্যিকার অর্থে খুব বেশি বোঝা যায় না। একটি প্রাইভেট কনস্ট্রাক্টরের সাথে এটি এর দৃষ্টান্তগুলিকে অনুমতি দেয় না।
গ্রিঞ্চ

1

PlatformUIস্থির পদ্ধতি এবং ব্যক্তিগতভাবে নিজেরাই চূড়ান্ত হওয়ার সাথে সাথে প্রাইভেট কনস্ট্রাক্টর ক্লাসের জন্য এক্লিপসে দেখতে পারেন ।

public final class <class name>
{
   //static constants
   //static memebers
}

0

স্ট্যাটিক-ক্লাস ব্যবহারের সুবিধা যদি কোনও বস্তুর তাত্ক্ষণিক ব্যবহার না করে এবং কোনও পদ্ধতি ব্যবহার না করে তবে ক্লাসটিকে সর্বজনীন এবং এই পদ্ধতিটিকে স্থির হিসাবে ঘোষণা করুন।

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