জাভাতে প্রাইভেট স্ট্যাটিক ভেরিয়েবলের ব্যবহার কী?


156

যদি কোনও ভেরিয়েবল হিসাবে ঘোষণা করা হয় public static varName;, তবে আমি এটিকে যে কোনও জায়গা থেকে অ্যাক্সেস করতে পারি ClassName.varName। আমি আরও সচেতন যে স্থির সদস্যরা একটি শ্রেণীর সমস্ত দৃষ্টান্ত দ্বারা ভাগ করা হয় এবং প্রতিটি ক্ষেত্রে পুনরায় স্থানান্তরিত হয় না।

কোনও ভেরিয়েবলকে ঘোষিত ঘোষণার চেয়ে private static varName;আলাদা বলে ঘোষণা করা private varName;কি?

উভয় ক্ষেত্রেই এটি অন্য শ্রেণীর মতো ClassName.varNameবা অ্যাক্সেস করা যায় না ClassInstance.varName

পরিবর্তনশীলকে স্থির হিসাবে ঘোষণা করা কি অন্যান্য বিশেষ বৈশিষ্ট্য দেয়?


5
জাভা ভেরিয়েবলের নামগুলিতে ড্যাশ (-) থাকতে পারে না।
মার্টিজন কোর্টেকস

উত্তর:


127

অবশ্যই এটি হিসাবে অ্যাক্সেস করা যেতে পারে ClassName.var_name, তবে কেবলমাত্র শ্রেণীর ভিতরে এটির সংজ্ঞা দেওয়া হয়েছে - কারণ এটি সংজ্ঞায়িত হয়েছে private

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

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

public class Example {
    private final static String JDBC_URL = "jdbc:mysql://localhost/shopdb";
    private final static String JDBC_USERNAME = "username";
    private final static String JDBC_PASSWORD = "password";

    public static void main(String[] args) {
        Connection conn = DriverManager.getConnection(JDBC_URL,
                                         JDBC_USERNAME, JDBC_PASSWORD);

        // ...
    }
}

আপনি এটি তৈরি করেন কিনা publicবা privateআপনি ভেরিয়েবলগুলি শ্রেণীর বাইরে দৃশ্যমান হোক বা না চান তার উপর নির্ভর করে।


6
অ্যাক্সেস হিসাবে প্রয়োজনীয় কি ClassName.var_nam? আমি যেখানে এটি সরাসরি অ্যাক্সেস করতে পারি: var_namশ্রেণীর মধ্যে
বৈভব জনি

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

5
স্ট্যাটিক ভেরিয়েবলটি ব্যবহার করে এটি অ্যাক্সেস করার জন্য কী প্রয়োজন, আমরা "ব্যক্তিগত চূড়ান্ত স্ট্রিং JDBC_PASSWORD =" পাসওয়ার্ড "লিখতে পারি;" এই পাসওয়ার্ড স্ট্রিংয়ের জন্য স্ট্যাটিক ভেরিয়েবল ব্যবহার না করে।
চৈতন্য

48
@ শৈতন্য এটি একটি ধ্রুবক। আপনি কেন ক্লাসের প্রতিটি উদাহরণের জন্য অস্থির করে ভেরিয়েবলের একটি অনুলিপি পেতে চান?
জেস্পার

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

94

স্ট্যাটিক ভেরিয়েবলগুলির একটি শ্রেণীর সমস্ত দৃষ্টান্তের জন্য একক মান থাকে।

আপনি যদি এমন কিছু তৈরি করেন:

public class Person
{
    private static int numberOfEyes;
    private String name;
}

এবং তারপরে আপনি নিজের নামটি পরিবর্তন করতে চেয়েছিলেন, এটি ঠিক আছে, আমার নামটি একই থাকে। তবে, আপনি যদি এটি পরিবর্তন করতে চান যাতে আপনার 17 টি চোখ থাকে তবে বিশ্বের প্রত্যেকেরও 17 টি চোখ থাকে।


3
এটি প্রাইভেট স্ট্যাটিক ভেরিয়েবলগুলির ক্ষেত্রে প্রযোজ্য না যদি না আপনি প্রাইভেট ভেরিয়েবলের জন্য অ্যাকসেসর পদ্ধতিগুলিও লেখেন কারণ তাদের শ্রেণীর বাইরে থেকে অ্যাক্সেস করা যায় না।
গণেশ কৃষ্ণন

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

46

প্রাইভেট স্ট্যাটিক ভেরিয়েবলগুলি যেভাবে প্রাইভেট ইনস্ট্যান্স ভেরিয়েবলগুলি কার্যকর সেভাবে কার্যকর: তারা স্টেট স্টোর করে যা কেবল একই শ্রেণীর মধ্যে কোড দ্বারা অ্যাক্সেস করা হয়। অ্যাক্সেসযোগ্যতা (প্রাইভেট / পাবলিক / ইত্যাদি) এবং উদাহরণ / স্থির প্রকৃতির ভেরিয়েবল সম্পূর্ণ orthogonal ধারণাগুলি।

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

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

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


আপনি এক শ্রেণিতে ব্যক্তিগত স্ট্যাটিক এবং প্রাইভেট নয় স্ট্যাটিক ভেরিয়েবল অ্যাক্সেসের পার্থক্য সম্পর্কে আরও কিছুটা ব্যাখ্যা করতে পারেন?
ধর্মেন্দ্র

1
@ ধর্মেন্দ্র: আপনার অর্থ কী তা আমার কাছে পরিষ্কার নয় to ব্যক্তিগত অংশটি অপ্রাসঙ্গিক - স্ট্যাটিক ভেরিয়েবল এবং উদাহরণ ভেরিয়েবলের মধ্যে পার্থক্য সম্পর্কে আপনাকে ঠিক কী বিভ্রান্ত করছে?
জন স্কিটি

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

2
@ যোগগুরু: আমি প্রশ্নের প্রাসঙ্গিকতা দেখছি না। আপনি এটি বেসরকারী হতে চাইলে এটি ব্যক্তিগত করুন এবং আপনি যদি এটি স্থির রাখতে চান তবে স্থিতিশীল করুন। তারা অরথোগোনাল।
জন স্কিটি

1
@ রিওয়ান্টেজ: না, একদম নয়। একটি স্থিতিশীল পদ্ধতি কোনও সমস্যা ছাড়াই এটি অ্যাক্সেস করতে পারে।
জন স্কিটি

11

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

এখানে একটি উদাহরণ:

Class test {
   public static String name = "AA";
   private static String age;

   public static void setAge(String yourAge) {
       //here if the age variable is not static you will get an error that you cannot access non static variables from static procedures so you have to make it static and private to not be accessed from other classes
       age = yourAge;
   }
}

3
আমি মনে করি আমি এই উত্তরটি সবচেয়ে পছন্দ করি। +1 টি। স্থিতিশীল পদ্ধতিতে যদি এটি অ্যাক্সেস করা হত তবে কেবলমাত্র ব্যক্তিগত ভেরিয়েবলে স্থিতিশীল ব্যবহার করা বোধগম্য।
মুকুস

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

আমি @ মুকুসকে রাজি করি। এই প্রশ্নের একমাত্র আসল উত্তর হতে পারে। আমি মনে করি ওপি স্থির ইতিমধ্যে বোঝে তবে লোকেরা আবার এটি ব্যাখ্যা করতে চায়। তিনি একটি নির্দিষ্ট দৃশ্য সম্পর্কে জিজ্ঞাসা করছেন। স্ট্যাটিক পদ্ধতিতে ভেরিয়েবল অ্যাক্সেস করার ক্ষমতা হ'ল 'ব্যক্তিগত স্ট্যাটিক' যুক্ত করা কার্যকারিতা। আমি কেবল এটি যুক্ত করতে চাই যে এটি ভেরিয়েবলগুলিতে নেস্টেড স্ট্যাটিক ক্লাসেস অ্যাক্সেসের অনুমতি দেয়।
পিঙ্কারটন

1
স্মৃতি কি? স্ট্যাটিক সহ, আপনি কেবলমাত্র ক্লাসের জন্য প্রতিটি দৃষ্টান্তের জন্য অনুলিপিের পরিবর্তে একটি অনুলিপি তৈরি করছিলেন। এবং অবশ্যই একটি ধ্রুবক সহ, আপনার ক্লাসের জন্য কেবল একটি অনুলিপি প্রয়োজন। এটি কি স্মৃতি বাঁচায়?
পিঙ্কার্টন

1
আমি এটি তাকান। আমার আগের প্রশ্নের উত্তর: হ্যাঁ, এটি স্মৃতি সংরক্ষণ করে
পিঙ্কার্টন

8

ভাল, private staticভেরিয়েবলগুলি class শ্রেণীর উদাহরণগুলির মধ্যে ডেটা ভাগ করতে ব্যবহার করা যেতে পারে। আপনি যদি সঠিক হন তবে আমরা private staticকনস্ট্রাক্টের মতো ClassName.memberবা ব্যবহার করে ভেরিয়েবলগুলি অ্যাক্সেস করতে পারি না ClassInstance.memberতবে সদস্যটি সেই শ্রেণীর পদ্ধতিগুলি বা শ্রেণীর উদাহরণগুলি থেকে সর্বদা দৃশ্যমান থাকবে। সুতরাং কার্যকরভাবে যে শ্রেণীর উদাহরণগুলি সর্বদা সদস্যকে উল্লেখ করতে সক্ষম হবে।


6

একটি প্রাইভেট স্ট্যাটিক ক্লাস ভেরিয়েবলের ব্যবহার কী?

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

public class Book {
    private static int numBooks = 0;
    private int id;
    public String name;

    Book(String name) {
        id = numBooks++;
        this.name = name;
    }
}

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

খুব গোপনে!


6

কোনও ভেরিয়েবলকে ঘোষিত ঘোষণার চেয়ে private static varName;আলাদা বলে ঘোষণা করা private varName;কি?

হ্যাঁ, উভয়ই আলাদা। এবং প্রথমটিকে বলা হয় class variableকারণ এটির জন্য এটি একক মান রাখে classঅন্যদিকে বলা হয় instance variableকারণ এটি আলাদা আলাদা মান রাখতে পারে instances(Objects)। প্রথমটি শুধুমাত্র একবার jvm এ তৈরি করা হয় এবং অন্যটি একবারে একবারে তৈরি করা হয় অর্থাত্ আপনার যদি 10 টি উদাহরণ থাকে তবে আপনার private varName;jvm তে 10 টি আলাদা থাকবে ।

ভেরিয়েবল হিসাবে ঘোষণা করা কি staticএটিকে অন্যান্য বিশেষ বৈশিষ্ট্য দেয়?

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

private static variableজাভাতে কোনটির ব্যবহার কী ?

যৌক্তিকভাবে, প্রথমটি আপনাকে আরও নিয়ন্ত্রণ দেয় তার চেয়ে private static variableআলাদা public static variableনয়। আইএমও, আপনি আক্ষরিক প্রতিস্থাপন করতে পারেন public static variableদ্বারা private static variableসাহায্যে public staticগেটার এবং সেটার পদ্ধতি।

এর একটি বহুল ব্যবহৃত ক্ষেত্র private static variableহ'ল সাধারণ Singletonপ্যাটার্ন প্রয়োগ করা যেখানে আপনার কাছে পুরো বিশ্বে এই শ্রেণীর একমাত্র উদাহরণ থাকবে। এখানে staticএকক দৃষ্টিকোণ বাইরের বিশ্বের দ্বারা অ্যাক্সেসযোগ্য হয়ে উঠতে এখানে সনাক্তকারী গুরুত্বপূর্ণ ভূমিকা পালন করে (অবশ্যই পাবলিক স্ট্যাটিক গেটর পদ্ধতিটিও মুখ্য ভূমিকা পালন করে)।

public class Singleton {
    private static Singleton singletonInstance = new Singleton();

    private Singleton(){}

    public static Singleton getInstance(){
        return Singleton.singletonInstance;
    }
}

4

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


3

অন্য দৃষ্টিভঙ্গি:

  1. একটি ক্লাস এবং তার উদাহরণ রানটাইমের সময় দুটি আলাদা জিনিস। একটি শ্রেণীর তথ্য সেই শ্রেণীর সমস্ত দৃষ্টান্ত দ্বারা "ভাগ করা" হয়।
  2. অ-স্থিতিশীল শ্রেণীর ভেরিয়েবলগুলি উদাহরণগুলির সাথে সম্পর্কিত এবং স্ট্যাটিক ভেরিয়েবল শ্রেণীর অন্তর্গত।
  3. যেমন একটি উদাহরণ ভেরিয়েবলগুলি ব্যক্তিগত বা সর্বজনীন হতে পারে তেমনি স্থির ভেরিয়েবলগুলিও ব্যক্তিগত বা সর্বজনীন হতে পারে।

1

একটি স্থিতিশীল পদ্ধতিতে আপনি যখন কোনও ভেরিয়েবল ব্যবহার করেন, ভেরিয়েবলটি উদাহরণ হিসাবে খুব স্থির থাকতে হবে:

private static int a=0;  
public static void testMethod() {  
        a=1;  
}

3
ভাল, যদি না আপনার পদ্ধতিটি অবশ্যই ক্লাসের শ্রেণীর কোনও উদাহরণের জন্য একটি রেফারেন্স দেওয়া হয়।
জন স্কিটি

1

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


1

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

আমার উদাহরণগুলি দেখুন যদি এটি নীচে বোঝায় না। Http://www.siteconsortium.com/h/D0000D.php এখানে যান

নীচের লাইনটি এটি হ'ল এটি যা বলছে তা হুবহু। এটি একটি স্থির সদস্যের পরিবর্তনশীল যা ব্যক্তিগত that উদাহরণস্বরূপ আপনি যদি একটি সিঙ্গলটন অবজেক্ট তৈরি করতে চান তবে আপনি কেন সিঙ্গলটনএক্সেমেল.ইন.সেসকে পরিবর্তনশীল পাবলিক করতে চান। আপনি যদি এমন কোনও ব্যক্তি করেন যা ক্লাসটি ব্যবহার করছিল সহজেই মানটিকে ওভাররাইট করতে পারে।

এতটুকুই।

    পাবলিক ক্লাস সিঙ্গলটন উদাহরণ {
      প্রাইভেট স্ট্যাটিক সিঙ্গলটন উদাহরণ উদাহরণ = নাল;
      প্রাইভেট স্ট্যাটিক ইনট মান = 0;
      ব্যক্তিগত একক উদাহরণ () x
        ++, this.value;
      }
      পাবলিক স্ট্যাটিক সিঙ্গলটন উদাহরণ getInstance () {
        যদি (উদাহরণস্বরূপ! = নাল)
        প্রত্যাবর্তন উদাহরণ;
        সিঙ্ক্রোনাইজড (সিঙ্গলটন এক্সাম্পল.ক্লাস) {
        উদাহরণস্বরূপ = নতুন সিঙ্গেলটোন উদাহরণ ();
        প্রত্যাবর্তন উদাহরণ;
        }
      }
      সর্বজনীন শূন্য প্রিন্টভ্যালু () {
        System.out.print (this.value);
      }

      পাবলিক স্ট্যাটিক অকার্যকর প্রধান (স্ট্রিং [] আরগস) {
        SingletonExample উদাহরণ = getInstance ();
        instance.printValue ();
        উদাহরণ = getInstance ();
        instance.printValue ();
         }
    }


1

আপনি যদি নিজের ক্লাসে প্রাইভেট স্ট্যাটিক ভেরিয়েবল ব্যবহার করেন তবে আপনার ক্লাসে স্ট্যাটিক ইনার ক্লাসগুলি আপনার ভেরিয়েবলগুলিতে পৌঁছতে পারে। প্রসঙ্গ সুরক্ষার জন্য এটি পুরোপুরি ভাল।


0

যদি কোনও ভেরিয়েবলটিকে পাবলিক স্ট্যাটিক হিসাবে সংজ্ঞায়িত করা হয় তবে এটি কোনও শ্রেণি থেকে তার শ্রেণীর নামের মাধ্যমে অ্যাক্সেস করা যায়।

সাধারণত ফাংশনগুলি পাবলিক স্ট্যাটিক হিসাবে সংজ্ঞায়িত করা হয় যা কেবল প্রয়োগকারী শ্রেণীর নাম কল করে অ্যাক্সেস করা যায়।

sleep()থ্রেড ক্লাসের পদ্ধতিটি এর খুব ভাল উদাহরণ

Thread.sleep(2500);

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

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

আর একটি সাধারণ উদাহরণ

private static int numberOfCars=10;

public static int returnNumber(){

return numberOfCars;

}

0

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

public Class Company {
    private static int numCompanies;

    public static int getNumCompanies(){
        return numCompanies;
    }
}

তারপরে আপনি সিসাউট করতে পারেন:

Company.getNumCompanies();

আপনি ক্লাসের প্রতিটি উদাহরণ থেকে নামকম্প্যানে অ্যাক্সেস পেতে পারেন (যা আমি পুরোপুরি বুঝতে পারি না) তবে এটি "স্থিতিশীল ভাবে" হবে না। এটি সেরা অনুশীলন কিনা তা আমার কোনও ধারণা নেই তবে এটি আমার কাছে বোধগম্য।


0

*) যদি কোনও ভেরিয়েবলটিকে ব্যক্তিগত হিসাবে ঘোষণা করা হয় তবে শ্রেণীর বাইরে এটি দৃশ্যমান হয় না is এটিকে ডেটাহাইডিং বলে।

*) যদি কোনও ভেরিয়েবল স্থিতিশীল হিসাবে ঘোষিত হয় তবে ভেরিয়েবলের মান সমস্ত দৃষ্টান্তের জন্য একই এবং সেই ভেরিয়েবলটি কল করার জন্য আমাদের কোনও অবজেক্ট তৈরি করার দরকার নেই। আমরা সেই পরিবর্তনশীলটিকে কেবল কল করতে পারি

classname.variablename;


0

ব্যক্তিগত স্ট্যাটিক ভেরিয়েবলটি সাবক্লাসেও ভাগ করা হবে be আপনি যদি একটি সাবক্লাসে পরিবর্তিত হয়ে থাকেন এবং অন্য সাবক্লাস পরিবর্তিত মান পাবেন, এক্ষেত্রে, আপনি যা প্রত্যাশা করেছিলেন তা তা নাও পারে।

public class PrivateStatic {

private static int var = 10;
public void setVar(int newVal) {
    var = newVal;
}

public int getVar() {
    return var;
}

public static void main(String... args) {
    PrivateStatic p1 = new Sub1();
    System.out.println(PrivateStatic.var);
    p1.setVar(200);

    PrivateStatic p2 = new Sub2();
    System.out.println(p2.getVar());
}
}


class Sub1 extends PrivateStatic {

}

class Sub2 extends PrivateStatic {
}

0

ThreadLocalভেরিয়েবল সাধারণত হিসাবে প্রয়োগ করা হয় private static। এইভাবে, তারা শ্রেণীর সাথে আবদ্ধ নয় এবং প্রতিটি থ্রেডের নিজস্ব "থ্রেডলোকাল" অবজেক্টের নিজস্ব রেফারেন্স রয়েছে।


3
আমি এই উত্তর বুঝতে পারি না। আপনি কি বোঝাতে চেয়েছেন?
এইচ.রাবি

-1

নিম্নলিখিত উদাহরণে, eyeপার্সনবি দ্বারা পরিবর্তন করা হয়েছে, যখন legএকই থাকে। এটি কারণ একটি ব্যক্তিগত ভেরিয়েবল পদ্ধতিতে নিজের একটি অনুলিপি তৈরি করে , যাতে এর মূল মানটি একই থাকে; ব্যক্তিগত স্ট্যাটিক মানটি ভাগ করার জন্য সমস্ত পদ্ধতির জন্য কেবল একটি অনুলিপি থাকে , সুতরাং এর মানটি সম্পাদনা করলে এর মূল মানটি পরিবর্তিত হবে।

public class test {
private static int eye=2;
private int leg=3;

public test (int eyes, int legs){
    eye = eyes;
    leg=leg;
}

public test (){
}

public void print(){
    System.out.println(eye);
    System.out.println(leg);
}

public static void main(String[] args){
    test PersonA = new test();      
    test PersonB = new test(14,8);
    PersonA.print();    
}

}

> 14 3

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