ජාවා: ස්ථිතික ක්‍රම භාවිතා කළ යුත්තේ කවදාද?


932

ස්ථිතික ක්‍රම භාවිතා කරන්නේ කවදාදැයි මම කල්පනා කරමි. මට පංතියක් ඇත්නම්, ලබා ගන්නන් සහ කට්ටල කිහිපයක්, ක්‍රමයක් හෝ දෙකක් තිබේ නම්, මට අවශ්‍ය වන්නේ එම ක්‍රම පංතියේ නිදර්ශන වස්තුවක් මත පමණක් ක්‍රියාත්මක කළ නොහැකි වීමයි. මෙයින් අදහස් කරන්නේ මා ස්ථිතික ක්‍රමයක් භාවිතා කළ යුතුද?

උදා

Obj x = new Obj();
x.someMethod

හෝ

Obj.someMethod

(මෙය ස්ථිතික ක්‍රමයද?)

මම තරමක් ව්‍යාකූලයි!

Answers:


1480

එක් රීතියක්: ඔබෙන්ම මෙසේ අසන්න "තවමත් කිසිදු වස්තුවක් ඉදිකර නොමැති වුවද මෙම ක්‍රමය හැඳින්වීම තේරුමක් තිබේද?" එසේ නම් එය අනිවාර්යයෙන්ම ස්ථිතික විය යුතුය.

එබැවින් පන්තියකදී Carඔබට ක්‍රමයක් තිබිය හැකිය:

double convertMpgToKpl(double mpg)

... එය ස්ථිතික වනු ඇත, මන්ද කිසිවෙකු මෙතෙක් ඉදිකර නොමැති වුවද 35mpg පරිවර්තනය කරන්නේ කුමක් දැයි දැන ගැනීමට කෙනෙකුට අවශ්‍ය විය හැකිය Car. නමුත් මෙම ක්‍රමය (එක් විශේෂයක කාර්යක්ෂමතාව සකසන Car):

void setMileage(double mpg)

... ස්ථිතික විය නොහැක, මන්ද එය Carතැනීමට පෙර මෙම ක්‍රමය ඇමතීම සිතාගත නොහැකි බැවිනි .

(මාර්ගය වන විට, සංවාදය සැමවිටම සත්‍ය නොවේ: ඔබට සමහර විට Carවස්තූන් දෙකක් සම්බන්ධ වන ක්‍රමවේදයක් තිබිය හැකි අතර එය ස්ථිතික වීමට තවමත් අවශ්‍ය වේ. උදා:

Car theMoreEfficientOf( Car c1, Car c2 )

මෙය ස්ථිතික නොවන අනුවාදයක් බවට පරිවර්තනය කළ හැකි වුවද, සමහරු තර්ක කරන්නේ Carවඩා වැදගත් “වරප්‍රසාදිත” තේරීමක් නොමැති Carබැවින්, ඔබ ඉල්ලා සිටින වස්තුව ලෙස එකක් තෝරා ගැනීමට ඔබ අමතන්නෙකුට බල නොකළ යුතු බවයි . ක්‍රමය ක්‍රියාත්මකයි. මෙම තත්වය සියලු ස්ථිතික ක්‍රමවලින් තරමක් කුඩා කොටසකට හේතු වේ.)


331
මෙහි හොඳ උදාහරණ කිහිපයක්. කෙසේ වෙතත්, අවස්ථා කිහිපයකදී යමක් වෙනස් නොවන බව ඔබ දන්නා විට "ස්ථිතික" බොහෝ විට වටිනා බව මම එකතු කරමි. තත්වය මෙය නම්, මම සැබවින්ම සලකා බලන්නේ "තනි වගකීම් මූලධර්මය", එයින් ගම්‍ය වන්නේ පන්තියකට එක් වගකීමක් තිබිය යුතු අතර වෙනස් වීමට එක් හේතුවක් පමණි. "ConvertMpgToKpl (double mpg)" ශ්‍රිතය සහ ඒ හා සමාන ක්‍රම ඔවුන්ගේ පන්තියට ගෙනයාම පිළිබඳව සලකා බැලිය යුතු යැයි මට හැඟේ. කාර් වස්තුවක පරමාර්ථය වන්නේ මෝටර් රථ ක්ෂණිකව ස්ථාපනය කිරීමට ඉඩ දීම මිස ඒවා අතර සංසන්දනයක් ලබා දීම නොවේ. ඒවා පන්තියට බාහිර විය යුතුය.
සැක් ජැන්සන්

34
මම හිතන්නේ මම ඒ ක්‍රමයට කැමතියි Car#isMoreEfficientThan(Car). ටයි පටියෙන් ඔබ ආපසු එන මෝටර් රථය අත්තනෝමතික නොවන බවට එහි වාසිය ඇත. ටයි පටියකින් ආපසු ලබා දෙන ක්‍රමයේ මාතෘකාවෙන් එය පැහැදිලිය.
ක්‍රන්චර්

5
යම් බාහිර සම්පතක් (ගොනු පද්ධතිය, දත්ත සමුදාය යනාදිය) භාවිතා කරන ස්ථිතික ක්‍රමයක් නිර්මාණය කිරීම ගැන ද මම සැලකිලිමත් වෙමි. මෙම වර්ගයේ ස්ථිතික මඟින් පරිභෝජන ක්‍රම පරීක්ෂා කිරීම භයානක විය හැකිය. මම පෞද්ගලිකව උත්සාහ කරන්නේ සංඛ්‍යාලේඛන “උපයෝගීතාව” තුළ තබා ගැනීමටයි.
සෙත් එම්.

7
ඇත්ත වශයෙන්ම, එය ලෙස ක්රියාත්මක කළ යුතු Comparator .
ඩොග්වෙදර්

3
@ B1KMusic ඇත්ත වශයෙන්ම. මා අදහස් කරන්නේ "කුමන මෝටර් රථය ටයි පටියකින් ආපසු ලබා දෙන්නේද" යන්නයි. "කැඳවූ මෝටර් රථයට සත්‍ය සිතියම් සහ සම්මත මෝටර් රථයට ව්‍යාජ සිතියම්". එය අවිනිශ්චිතතාවයකින් තොරව ය.
ක්‍රන්චර්

546

පහත දැක්වෙන අවස්ථා වලදී පමණක් ස්ථිතික ක්‍රම නිර්වචනය කරන්න:

  1. ඔබ උපයෝගිතා පන්ති ලියන්නේ නම් ඒවා වෙනස් කළ යුතු නොවේ.
  2. ක්රමය කිසිදු නිදර්ශන විචල්යයක් භාවිතා නොකරන්නේ නම්.
  3. කිසියම් මෙහෙයුමක් නිදර්ශන නිර්මාණය මත රඳා නොපවතී නම්.
  4. සියලු නිදර්ශන ක්‍රම මගින් පහසුවෙන් බෙදාගත හැකි කේතයක් තිබේ නම්, එම කේතය ස්ථිතික ක්‍රමයකට උපුටා ගන්න.
  5. ක්‍රමයේ අර්ථ දැක්වීම කිසි විටෙකත් වෙනස් නොවන හෝ අභිබවා යන බව ඔබට විශ්වාස නම්. ස්ථිතික ක්‍රම ඉක්මවා යා නොහැකි බැවින්.

47
හොඳ ලකුණු, නමුත් ඔබට නම් ඔවුන් අවශ්යතා වන්නේ අවශ්ය ක්රමයක් ස්ථිතික කිරීමට, එක කිරීමට හේතු.
tetsuo

4
Requirement අවශ්‍යතාවය ගැන 5: ක්‍රමයක් කිසි විටෙකත් වෙනස් නොවන බව හෝ අභිබවා යන බව ඔබට 100% විශ්වාස කළ හැක්කේ කවදාද? ඔබේ ස්ථිතික ක්‍රමය ලියන මොහොතේදී ඔබට සැලකිල්ලට ගත නොහැකි සෑම විටම නොදන්නා සාධක තිබේද?
පික්සෙල්ප්ලෙක්ස්

8
"උපයෝගිතා පංති" ගැන තර්ක කිරීම ඉතා අපහසුය, නරක දෙය නම් ඉක්මනින් හෝ පසුව සෑම දෙයක්ම උපයෝගීතාවයක් ලෙස පෙනෙන්නට පටන් ගැනීමයි (ඔව්, මම සඳහන් කරන්නේ එම "උපයෝගීතා" පැකේජය පුපුරා ගිය, නොපැහැදිලි සහ දුර්වල ලෙස පරීක්ෂා කර ඇති), ඔබේ පරීක්ෂණ අවස්ථාවන්ට වැඩි වැඩක් අවශ්‍ය වනු ඇත (ස්ථිතික උපයෝගීතා සමච්චලයට ලක් කිරීම හාඩ් වේ). පළමුව වස්තූන් කැමති කරන්න.
සර්ජියෝ

2
OMohd මෙම පිළිතුර හරියටම මා සොයන දෙයයි. බහුවිධ කියවීමේදී ස්ථිතික ක්‍රම භාවිතා කරමින් මම බොහෝ ගැටලුවලට මුහුණ දුන්නා. ඔබ අලංකාර ලකුණු 2, 3 කට (ඔබ සඳහා මනාපය උදාහරණයක් සමග 100) සතුටු කළ හැකි
ප්රකාශ් Pandey

ඔබ ස්ථිතික විචල්‍යයන් සහ ක්‍රම භාවිතා කිරීමට යන්නේ නම් "ස්ථිතික පන්තියක්" නිර්මාණය කළ යුතු යැයි මම සිතමි.
රොබට් රොචා

186

ස්ථිතික ක්‍රම භාවිතා කිරීමට වලංගු හේතු කිහිපයක් තිබේ:

  • කාර්ය සාධනය : ඔබට යම් කේතයක් ක්‍රියාත්මක කිරීමට අවශ්‍ය නම් සහ අමතර වස්තුවක් ක්ෂණිකව කිරීමට අවශ්‍ය නොවන්නේ නම්, එය ස්ථිතික ක්‍රමයකට යොමු කරන්න. ජේවීඑම් හට ස්ථිතික ක්‍රම විශාල වශයෙන් ප්‍රශස්තිකරණය කළ හැකිය (ජේවීඑම් හි ඔබට අභිරුචි උපදෙස් අවශ්‍ය නොවන බව ප්‍රකාශ කරමින් මම වරක් ජේම්ස් ගොස්ලිං කියවා ඇත්තෙමි, මන්ද ස්ථිතික ක්‍රම වේගවත් වන නමුත් ප්‍රභවය සොයාගත නොහැකි විය - මේ අනුව එය සම්පූර්ණයෙන්ම අසත්‍ය විය හැකිය). ඔව්, එය ක්ෂුද්‍ර ප්‍රශස්තිකරණය වන අතර බොහෝ විට අනවශ්‍යය. අපි ක්‍රමලේඛකයින් කිසි විටෙකත් අනවශ්‍ය දේවල් කරන්නේ ඒවා සිසිල් නිසා නොවේද?

  • ප්‍රායෝගිකත්වය : ඇමතුම් new Util().method(arg), ඇමතුම Util.method(arg)හෝ method(arg)ස්ථිතික ආනයන වෙනුවට. පහසු, කෙටි.

  • ක්‍රම එකතු කිරීම : ඔබට ඇත්ත වශයෙන්ම අවශ්‍ය වූයේ පන්තියේ removeSpecialChars()සංගීතයට නිදර්ශන ක්‍රමයක් තිබීමයි, නමුත් එය එහි නොමැත (ඔබේ ව්‍යාපෘතියේ විශේෂ අක්ෂර අනෙක් ව්‍යාපෘතියට වඩා වෙනස් විය හැකි බැවින් එය එසේ නොවිය යුතුය), ඔබට එය එකතු කළ නොහැක (ජාවා සිට තරමක් බුද්ධිමත්), එබැවින් ඔබ උපයෝගිතා පන්තියක් නිර්මාණය කර removeSpecialChars(s)ඒ වෙනුවට අමතන්න s.removeSpecialChars(). මිහිරි.

  • සංශුද්ධතාවය : යම් යම් පූර්වෝපායන් අනුගමනය කිරීමෙන් ඔබේ ස්ථිතික ක්‍රමය පිරිසිදු කාර්යයක් වනු ඇත , එනම් එය රඳා පවතින්නේ එහි පරාමිතීන් මත පමණි. දත්ත ඇතුලත්, දත්ත පිටතට. ඔබට කියවීමට සහ නිදොස්කරණය කිරීමට පහසුය, මන්ද ඔබට කරදර වීමට උරුම උරුමයන් නොමැත. ඔබට නිදර්ශන ක්‍රම සමඟද එය කළ හැකිය, නමුත් සම්පාදකයා ඔබට ස්ථිතික ක්‍රම සමඟ තව ටිකක් උපකාරී වනු ඇත (නිදර්ශන ගුණාංග, අභිබවා යන ක්‍රම ආදිය සඳහා යොමු වීමට ඉඩ නොදීමෙන්).

ඔබට සිංගල්ටන් එකක් සෑදීමට අවශ්‍ය නම් ස්ථිතික ක්‍රමයක් ද සෑදිය යුතුය, නමුත් ... එපා. මම කිව්වේ, දෙවරක් සිතන්න.

දැන්, වඩා වැදගත් දෙය නම්, ඔබට ස්ථිතික ක්‍රමයක් නිර්මාණය කිරීමට අවශ්‍ය නොවන්නේ ඇයි ? මූලික වශයෙන්, බහුමාපකය කවුළුවෙන් පිටතට යයි . ඔබට ක්‍රමවේදය අභිබවා යාමට හෝ අතුරු මුහුණතකින් ප්‍රකාශ කිරීමට නොහැකි වනු ඇත (පූර්ව ජාවා 8) . එය ඔබගේ සැලසුමෙන් විශාල නම්යතාවයක් ලබා ගනී. එසේම, ඔබට රාජ්යය අවශ්ය නම්, ඔබ ප්රවේශම් නොවන්නේ නම්, සමගාමී දෝෂ සහ / හෝ බාධක සමඟ ඔබ අවසන් වනු ඇත .


1
ස්ථිතික ප්‍රයෝජනවත් විය හැකි විට මෙහි ලැයිස්තුගත කර ඇති හොඳ හේතු රාශියක්. මට සිතිය හැකි තවත් දෙයක් නම්, එවැනි ක්‍රම සඳහා ඒකක පරීක්ෂණ ලිවීම සරල සරල බවයි
නිලේෂ්

ස්තූතියි! ඔබේ පැහැදිලි කිරීම ඉතා පැහැදිලිය. සපයන හේතු ඉතා තාර්කික වන අතර එය අර්ථවත් කරයි.
ඩෙනිස් එම්.

3
අපි ක්‍රමලේඛකයින් කිසි විටෙකත් අනවශ්‍ය දේවල් කරන්නේ ඒවා සිසිල් නිසා නොවේද? +1
Scaramouche

ස්ථිතික ක්‍රමයක් යනු නම් කරන ලද ශ්‍රිතයක් වන stackoverflow.com/questions/155609/…
ඉවාන්සින්හෝ

කාර්ය සාධනය සහ ප්‍රායෝගිකත්වය සමඟ මම එකඟ වෙමි, නමුත් පිරිසිදුකම නොවේ. ස්ථිතික ක්‍රමයට පන්තියේ ස්ථිතික සාමාජිකයින් වෙනස් කළ හැකිය (එය පුද්ගලික විය හැකිය). මෙය ප්‍රයෝජනවත් විය හැකිය. උදාහරණයක් ලෙස, ඔබට "ස්ථිතික සමමුහුර්ත int වෙන් කිරීම ID () {ආපසු idNext ++;}" වැනි ක්‍රමයක් තිබිය හැකිය. ඇත්ත වශයෙන්ම, ස්ථිතික ක්‍රමයක් අතුරු ආබාධ සම්බන්ධයෙන් ස්ථිතික නොවන ක්‍රමයක් තරම් පිරිසිදු හෝ අපිරිසිදු විය හැකිය.
ඇඩම් ගව්න්-කේන්

45

මිස්කෝගේ ලිපි කියවීමෙන් පසු පරීක්ෂණ දෘෂ්ටි කෝණයකින් ස්ථිතික ක්‍රම නරක යැයි මම විශ්වාස කරමි . ඔබට ඒ වෙනුවට කර්මාන්තශාලා තිබිය යුතුය (සමහර විට ගයිස් වැනි පරායත්ත එන්නත් කිරීමේ මෙවලමක් භාවිතා කළ හැකිය ).

මා සතුව ඇත්තේ යමක් පමණක් බව මම සහතික කරන්නේ කෙසේද?

යමක් පමණක් තිබිය යුතුය “මට යමක් පමණක් ඇති බව මා සහතික කරන්නේ කෙසේද” යන ගැටලුව මනාව පැත්තකට වී ඇත. ඔබ ප්‍රධාන වශයෙන් එක් යෙදුම් ෆැක්ටරියක් පමණක් ස්ථාපනය කරන අතර, එහි ප්‍රති as ලයක් වශයෙන්, ඔබ ක්ෂණිකව ස්ථාපනය කරන්නේ ඔබේ සියලු තනි බොත්තම් වල එක් අවස්ථාවක් පමණි.

ස්ථිතික ක්‍රම පිළිබඳ මූලික ගැටළුව වන්නේ ඒවා ක්‍රියා පටිපාටි කේතයයි

ස්ථිතික ක්‍රම පිළිබඳ මූලික ගැටළුව වන්නේ ඒවා ක්‍රියා පටිපාටි කේතයයි. කාර්ය පටිපාටික කේතය ඒකක පරීක්‍ෂා කරන්නේ කෙසේදැයි මට අදහසක් නැත. ඒකකය පරීක්ෂා කිරීම උපකල්පනය කරන්නේ මගේ අයදුම්පතේ කොටසක් හුදකලා කිරීමට මට හැකි බවයි. ක්ෂණිකකරණයේදී මම සැබෑ පරායත්තයන් ප්‍රතිස්ථාපනය කරන විහිළු / මිත්‍රයන් සමඟ පරායත්තතාවයන් කම්බි කරමි. කාර්ය පටිපාටික ක්‍රමලේඛනය සමඟ වස්තූන් නොමැති බැවින් "වයර්" කිරීමට කිසිවක් නැත, කේතය සහ දත්ත වෙනම වේ.


20
කාර්ය පටිපාටික කේතය ඒකක පරීක්‍ෂා කිරීමට නොහැකි වීම පිළිබඳ කොටස මට තේරෙන්නේ නැත. ස්ථිතික ක්‍රමය භාවිතයෙන් ප්‍රතිදානය නිවැරදි කිරීම සඳහා නිවැරදි ආදානය සිතියම් ගත කරන පරීක්ෂණ අවස්ථා ඔබේ "ඒකකය" ලෙස පන්තිය සමඟ සැකසෙන්නේ නැද්ද?
tjb

2
එම කාර්යයන් පරීක්ෂා කිරීම සඳහා ඔබට එය කළ හැකිය. නමුත් ඔබට පරීක්ෂා කිරීමට අවශ්‍ය වෙනත් පංතිවල මෙම ස්ථිතික ක්‍රම භාවිතා කරන විට, ඔබට පංතියක් ක්ෂණිකව කළ නොහැකි නිසා ඔබට ඒවා (විහිළු / මිත්‍රයන්) හෝ කිසිවක් ව්‍යාජ කළ නොහැකි යැයි මම විශ්වාස කරමි.
ඇල්ෆ්‍රඩ්

4
Ff ඇල්ෆ්‍රඩ්: කරුණාකර ස්ථිතික ක්‍රම සමච්චලයට ලක් කිරීමේ හැකියාව ඇති පවර්මොක් දෙස බලන්න . PowerMock භාවිතා කරමින් ඔබට සමච්චල් කළ නොහැකි ක්‍රම පරායත්තතා තිබේ නම් අවස්ථා කිහිපයක් තිබේ.
කාලෙස් සලා

7
ඔබට පවර්මොක් භාවිතයෙන් පරීක්ෂණ සංඛ්‍යාලේඛන ඒකක කළ හැකිය, කෙසේ වෙතත් ඔබට ඉක්මනින් පර්ම්ජන් අවකාශයෙන් ඉවතට යනු ඇත (එය සිදු කර, ටී-ෂර්ට් එක ලැබුණි) සහ එය තවමත් අප්රසන්න ය. ඔබ නොදන්නේ නම් (අවම වශයෙන් දශකයක් වත් සත්‍ය OO භාෂාවල අත්දැකීම් මත පදනම්ව, C වෙතින් සංක්‍රමණය නොවී) එසේ නොකරන්න. බරපතල ලෙස, මා මෙතෙක් දුටු නරකම කේතය කාවැද්දූ සංවර්ධකයෙකුගේ සංඛ්‍යාලේඛන භාවිතයෙන් වන අතර බොහෝ අවස්ථාවන්හිදී අපි එය සමඟ සදහටම රැඳී සිටිමු. තවත් කේත එකතු කිරීමෙන් නවීකරණය කළ නොහැකි මොනොලිත් තුළට අපව වඩාත් තදින් අගුලු දමා ඇත. ලිහිල් සම්බන්ධ කිරීම: නැත, පරීක්ෂා කළ හැකි: යන්තම්, වෙනස් කළ හැකි: කිසිදා. වළකින්න!
user1016765

14
ස්ථිතික තත්වය මත රඳා පවතින ස්ථිතික ක්‍රම පරීක්ෂා කිරීමේ දුෂ්කරතාවය මට තේරුම් ගත හැකිය. නමුත් ඔබ අස්ථායී ස්ථිතික ක්‍රම අත්හදා බලන විට Math.abs()හෝ Arrays.sort()ඔබට සියලු පරායත්තතාවයන් පසු කළ හැකි ක්‍රම පවා පරීක්‍ෂා කරන විට , එය කිසි විටෙකත් ඒකක පරීක්‍ෂණයට බාධාවක් වන්නේ කෙසේදැයි මම නොදනිමි. මම කියන්නේ සරල රීතියක් නම්: කාර්ය පටිපාටික තර්කනය සමච්චලයට ලක් කිරීමට ඔබට කිසියම් හේතුවක් තිබේ නම්, එය ස්ථිතික ක්‍රමයකට ඇතුළත් නොකරන්න. මම නිග්රහ කිරීමට හේතුවක් තිබුණේ නැහැ තියෙනවා Arrays.sort()හෝ Math.abs().
ඇන්ඩි

36

staticක්රමය එය යි කියනු සඳහා ආරම්භනය කිරීමට ඕනෑම වස්තුවක් අවශ්ය නොවන ක්රමය එක් වර්ගයකි. ජාවා staticහි mainශ්‍රිතයේ භාවිතා වන බව ඔබ දැක තිබේද ? වස්තුවක් නිර්මාණය නොකර වැඩසටහන් ක්‍රියාත්මක කිරීම එතැන් සිට ආරම්භ වේ.

පහත උදාහරණය සලකා බලන්න:

 class Languages 
 {
     public static void main(String[] args) 
     {
         display();
     }

     static void display() 
     {
         System.out.println("Java is my favorite programming language.");
     }
  }

හොඳම පිළිතුර ඇත්ත වශයෙන්ම
යාහියා

20

ජාවා හි ස්ථිතික ක්‍රම පංතියට අයත් වේ (එය උදාහරණයක් නොවේ). ඔවුන් නිදර්ශන විචල්‍යයන් භාවිතා නොකරන අතර සාමාන්‍යයෙන් පරාමිතීන්ගෙන් ආදානය ලබා ගනී, ඒ මත ක්‍රියා කරයි, පසුව යම් ප්‍රති .ලයක් ලබා දෙනු ඇත. නිදර්ශන ක්‍රම වස්තූන් සමඟ සම්බන්ධ වී ඇති අතර, නමට අනුව, උදාහරණ විචල්‍යයන් භාවිතා කළ හැකිය.


12

නැත, ස්ථිතික ක්‍රම උදාහරණයක් සමඟ සම්බන්ධ නොවේ; ඔවුන් පන්තියට අයත් ය. ස්ථිතික ක්‍රම ඔබේ දෙවන උදාහරණයයි; උදාහරණ ක්‍රම පළමුවැන්නයි.


1
වස්තුවේ රාජ්‍ය හැසිරවීම් අවශ්‍ය නොවේ නම් ඔබ ස්ථිතික ක්‍රම භාවිතා කළ යුතුය.
MastAvalons

11

ඔබ කිසියම් ක්‍රමයක් සමඟ ස්ථිතික මූල පදය යෙදුවහොත් එය ස්ථිතික ක්‍රමය ලෙස හැඳින්වේ.

  1. ස්ථිතික ක්‍රමයක් පන්තියේ වස්තුවකට වඩා පන්තියට අයත් වේ.
  2. පංතියක නිදසුනක් නිර්මාණය කිරීමේ අවශ්‍යතාවයකින් තොරව ස්ථිතික ක්‍රමයක් ක්‍රියාත්මක කරයි.
  3. ස්ථිතික ක්‍රමයට ස්ථිතික දත්ත සාමාජිකයාට ප්‍රවේශ විය හැකි අතර එහි වටිනාකම වෙනස් කළ හැකිය.
  4. පන්ති තිත ස්ථිතික නාමයක් භාවිතා කරමින් ස්ථිතික ක්‍රමයක් වෙත පිවිසිය හැකිය. . . උදාහරණය: Student9.change ();
  5. ඔබට පන්තියක ස්ථිතික නොවන ක්ෂේත්‍ර භාවිතා කිරීමට අවශ්‍ය නම්, ඔබ ස්ථිතික නොවන ක්‍රමයක් භාවිතා කළ යුතුය.

// සියලු වස්තූන්ගේ පොදු දේපල වෙනස් කිරීමේ වැඩසටහන (ස්ථිතික ක්ෂේත්‍රය).

class Student9{  
 int rollno;  
 String name;  
 static String college = "ITS";  

 static void change(){  
 college = "BBDIT";  
 }  

 Student9(int r, String n){  
 rollno = r;  
 name = n;  
 }  

 void display (){System.out.println(rollno+" "+name+" "+college);}  

public static void main(String args[]){  
Student9.change();  

Student9 s1 = new Student9 (111,"Indian");  
Student9 s2 = new Student9 (222,"American");  
Student9 s3 = new Student9 (333,"China");  

s1.display();  
s2.display();  
s3.display();  
}  }

O / P: 111 ඉන්දියානු BBDIT 222 ඇමරිකානු BBDIT 333 China BBDIT


10

ස්ථිතික ක්‍රම නිදසුනක් සමඟ සම්බන්ධ නොවේ, එබැවින් ඔවුන්ට පන්තියේ ස්ථිතික නොවන ක්ෂේත්‍ර වෙත ප්‍රවේශ විය නොහැක.

මෙම ක්‍රමය පන්තියේ කිසිදු ක්ෂේත්‍රයක් (හෝ ස්ථිතික ක්ෂේත්‍ර පමණක්) භාවිතා නොකරන්නේ නම් ඔබ ස්ථිතික ක්‍රමයක් භාවිතා කරනු ඇත.

පංතියක ස්ථිතික නොවන ක්ෂේත්‍ර භාවිතා කරන්නේ නම් ඔබ ස්ථිතික නොවන ක්‍රමයක් භාවිතා කළ යුතුය.


1
පැහැදිලි, කෙටි හා සරල පිළිතුරකි.
ජොසි

8

පංතියේ ස්ථිතික ක්‍රම කැඳවිය යුතු අතර, පන්තියේ අවස්ථා මත නිදසුන් ක්‍රම කැඳවිය යුතුය. නමුත් යථාර්ථයේ එයින් අදහස් කරන්නේ කුමක්ද? මෙන්න ප්‍රයෝජනවත් උදාහරණයක්:

කාර් පන්තියකට ඇක්සලරේට් () නමින් නිදර්ශන ක්‍රමයක් තිබිය හැකිය. ඔබට මෝටර් රථයක් වේගවත් කළ හැක්කේ, මෝටර් රථය ඇත්ත වශයෙන්ම පවතින්නේ නම් (ඉදිකර ඇත) එබැවින් මෙය උදාහරණ ක්‍රමයක් වනු ඇත.

කාර් පන්තියකට GetCarCount () නමින් ගණන් කිරීමේ ක්‍රමයක් ද තිබිය හැකිය. මෙමඟින් නිර්මාණය කරන ලද (හෝ ඉදිකරන ලද) මුළු මෝටර් රථ සංඛ්‍යාව නැවත ලැබෙනු ඇත. මෝටර් රථ කිසිවක් ඉදිකර නොමැති නම්, මෙම ක්‍රමය 0 නැවත ලබා දෙනු ඇත, නමුත් එය තවමත් ඇමතිය හැකි විය යුතුය, එබැවින් එය ස්ථිතික ක්‍රමයක් විය යුතුය.


6

පංතියේ නිදසුනක් නොමැතිව ක්‍රමයට ප්‍රවේශ වීමට ඔබට අවශ්‍ය විට ස්ථිතික ක්‍රමයක් භාවිතා කරන්න.


30
මෙය වැඩසටහනක් සැලසුම් කිරීම සඳහා කිසිදු තර්කයක් ලබා නොදේ.
adamjmarkham

6

ඇත්ත වශයෙන්ම, අපි පන්තියක ස්ථිතික ගුණාංග සහ ක්‍රම භාවිතා කරමු, අපගේ වැඩසටහන ක්‍රියාත්මක වන තෙක් අපගේ වැඩසටහනේ යම් කොටසක් භාවිතා කිරීමට අවශ්‍ය වූ විට එහි තිබිය යුතුය. ස්ථිතික ගුණාංග හැසිරවීමට අපට ස්ථිතික ක්‍රම අවශ්‍ය බව අපි දනිමු. ස්ථිතික ක්‍රම නොමැතිව ස්ථිතික ගුණාංග හැසිරවීමට කාලය ගතවේ.


ස්ථිතික විචල්‍යයන් තුළ තත්වය තබා ගැනීම බොහෝ හේතු නිසා කළ යුතු නරක දෙයකි - බහු-නූල් ආරක්ෂාව, නිදොස්කරණය, දත්ත-සංසරණය .. ආදිය. ස්ථිතික ක්‍රම පිරිසිදු කාර්යයන් නම් ඒවා හරි ය (පරාමිතීන් සමඟ පමණක් වැඩ කරන්න, ඒවා වෙනස් නොකර). ගණිතමය ගණනය කිරීම් සඳහා හොඳ උදාහරණයක් උපයෝගීතා පන්තියක් වනු ඇත.
ව්ලැඩිමීර් ඩෙමිරෙව්

4

ස්ථිතික: Obj.someMethod

staticඔබට ක්‍රමයකට පන්ති මට්ටමේ ප්‍රවේශය ලබා දීමට අවශ්‍ය විට භාවිතා කරන්න , එනම් පන්තියේ නිදසුනක් නොමැතිව ක්‍රමවේදය කැඳවිය යුතු තැන.


4

ස්ථිතික ක්‍රම වස්තුව මත ආයාචනා කිරීම අවශ්‍ය නොවන අතර ඔබ එය භාවිතා කරන විට එය සිදු වේ. උදාහරණය: ඔබේ ප්‍රධාන () ස්ථිතික වන අතර ඔබ එය ඇමතීමට වස්තුවක් නිර්මාණය නොකරයි.


1
Yay! ජාවා නොබී ප්‍රශ්න ඇසූ විට මා පැමිණියේ කොහේදැයි බලන්න! එය කුඩා ලෝකයකි :-)
දීපක්

1
Eep දීපක් කුඩා ලෝකය ඇත්තෙන්ම :)
වෛශක් සුරේෂ්

4

ස්ථිතික ක්‍රම සහ විචල්‍යයන් ජාවා හි 'ගෝලීය' ශ්‍රිතවල සහ විචල්‍යයන්ගේ පාලිත අනුවාදයකි. ක්‍රම වලට ප්‍රවේශ විය හැකි classname.methodName()හෝ classInstanceName.methodName(), එනම් ස්ථිතික ක්‍රම සහ විචල්‍යයන් පන්තියේ නම මෙන්ම පන්තියේ අවස්ථා භාවිතා කළ හැකිය.

පංතිය ස්ථිතික ලෙස ප්‍රකාශ කළ නොහැක (එයට තේරුමක් නැති නිසා. පංතියක් ප්‍රසිද්ධ යැයි ප්‍රකාශ කළහොත් එය ඕනෑම තැනකින් ප්‍රවේශ විය හැකිය), අභ්‍යන්තර පන්ති ස්ථිතික ලෙස ප්‍රකාශ කළ හැකිය.


4

නම් ස්ථිතික ක්‍රම භාවිතා කළ හැකිය

  • යමෙකුට නිදසුනක් මත ක්‍රියාවක් කිරීමට අවශ්‍ය නැත (උපයෝගිතා ක්‍රම)

    මෙම ලිපියේ ඉහත පිළිතුරු කිහිපයක සඳහන් කර ඇති පරිදි, සැතපුම් කිලෝමීටරයකට පරිවර්තනය කිරීම හෝ ෆැරන්හයිට් සිට සෙල්සියස් දක්වා උෂ්ණත්වය ගණනය කිරීම සහ අනෙක් අතට. ස්ථිතික ක්‍රමවේදය භාවිතා කරමින් මෙම උදාහරණ සමඟ, ගොඩවල් මතකයේ ඇති නව වස්තුව ක්ෂණිකව ස්ථාපනය කිරීම අවශ්‍ය නොවේ. පහත සලකා බලන්න

    1. new ABCClass(double farenheit).convertFarenheitToCelcium() 
    2. ABCClass.convertFarenheitToCelcium(double farenheit)

    කලින් සඳහන් කළ සෑම ක්‍රමයක් සඳහාම නව පන්තියේ අඩිපාරක් නිර්මාණය කරයි, කාර්ය සාධනය, ප්‍රායෝගික . උදාහරණ ලෙස ගණිතය සහ අපාචේ-කොමන්ස් පුස්තකාලය StringUtils පන්තිය පහත දැක්වේ:

    Math.random()
    Math.sqrt(double)
    Math.min(int, int)
    StringUtils.isEmpty(String)
    StringUtils.isBlank(String)
  • යමෙකුට සරල කාර්යයක් ලෙස භාවිතා කිරීමට අවශ්‍යය. යෙදවුම් පැහැදිලිව සම්මත කර ඇති අතර ප්‍රති result ල දත්ත ප්‍රතිලාභ අගයක් ලෙස ලබා ගනී. උරුමය, වස්තු ක්ෂණිකකරණය පින්තූරයට එන්නේ නැත. සංක්ෂිප්ත, කියවිය හැකි .

සටහන : ස්ථිතික ක්‍රම අත්හදා බැලීමේ හැකියාව පිළිබඳව ස්වල්ප දෙනෙක් තර්ක කරති, නමුත් ස්ථිතික ක්‍රම ද පරීක්ෂා කළ හැකිය! JMockit සමඟ කෙනෙකුට ස්ථිතික ක්‍රම සරදම් කළ හැකිය. පරීක්ෂණ හැකියාව . පහත උදාහරණය:

new MockUp<ClassName>() {
    @Mock
    public int doSomething(Input input1, Input input2){
        return returnValue;
    }
};

3

ස්ථිතික ක්‍රම යනු ජාවා හි පන්ති වස්තුවක් නිර්මාණය නොකර කැඳවිය හැකි ක්‍රම වේ. එය පන්තියට අයත් වේ.

නිදසුනක් ලෙස අප ආයාචනා කිරීමේ ක්‍රමයක් අවශ්‍ය නොවන විට අපි ස්ථිතික ක්‍රමය භාවිතා කරමු.


2

ස්ථිතික ක්‍රම භාවිතා කරන්නේ කවදාදැයි මම කල්පනා කරමි.

  1. staticක්‍රම සඳහා පොදු භාවිතයක් වන්නේ staticක්ෂේත්‍ර වෙත ප්‍රවේශ වීමයි.
  2. නමුත් විචල්යයන් staticසඳහන් නොකර ඔබට ක්රම තිබිය හැකිය static. staticවිචල්‍යය සඳහන් නොකර උපකාරක ක්‍රම java.lang.Math වැනි සමහර ජාවා පන්තිවල සොයාගත හැකිය

    public static int min(int a, int b) {
        return (a <= b) ? a : b;
    }
  3. අනෙක් භාවිත අවස්ථාව නම්, මෙම ක්‍රම ක්‍රමයට ඒකාබද්ධව synchronizedබහු නූල් පරිසරයක පන්ති මට්ටමේ අගුලු දැමීම ක්‍රියාත්මක කිරීම යැයි මට සිතිය හැකිය .

මට පංතියක් ඇත්නම්, ලබා ගන්නන් සහ කට්ටල කිහිපයක්, ක්‍රමයක් හෝ දෙකක් තිබේ නම්, මට අවශ්‍ය වන්නේ එම ක්‍රම පංතියේ නිදර්ශන වස්තුවක් මත පමණක් ක්‍රියාත්මක කළ නොහැකි වීමයි. මෙයින් අදහස් කරන්නේ මා ස්ථිතික ක්‍රමයක් භාවිතා කළ යුතුද?

පංතියේ නිදර්ශන වස්තුවක් මත ඔබට ක්‍රමයට ප්‍රවේශ වීමට අවශ්‍ය නම්, ඔබේ ක්‍රමය ස්ථිතික නොවිය යුතුය.

ඔරකල් ප්‍රලේඛන පිටුව වැඩි විස්තර සපයයි.

උදාහරණ සහ පන්ති විචල්‍යයන් සහ ක්‍රමවල සියලුම සංයෝජනයන් සඳහා අවසර නැත:

  1. නිදර්ශන ක්‍රම මඟින් නිදර්ශන විචල්‍යයන් සහ නිදර්ශන ක්‍රම වෙත කෙලින්ම පිවිසිය හැකිය.
  2. උදාහරණ ක්‍රම මඟින් පන්ති විචල්‍යයන් සහ පන්ති ක්‍රම වෙත කෙලින්ම ප්‍රවේශ විය හැකිය.
  3. පන්ති ක්‍රම මඟින් පන්ති විචල්‍යයන් සහ පන්ති ක්‍රම වෙත කෙලින්ම ප්‍රවේශ විය හැකිය.
  4. පන්ති ක්‍රමවලට නිදර්ශන විචල්‍යයන් හෝ නිදර්ශන ක්‍රම වෙත කෙලින්ම ප්‍රවේශ විය නොහැක - ඔවුන් වස්තු යොමු කිරීමක් භාවිතා කළ යුතුය. පංති ක්‍රමවලට මෙම මූල පදය භාවිතා කළ නොහැක.

නිත්‍ය ක්‍රම මගින් අපට ස්ථිතික ක්ෂේත්‍ර වෙත පිවිසිය නොහැකිද? එවිට මෙය A common use for static methods is to access static fields.තර්කයක් නොවේ.
parsecer

2

ස්ථිතික ක්‍රමයකට ප්‍රධාන අරමුණු දෙකක් ඇත:

  1. කිසිදු වස්තු තත්වයක් අවශ්‍ය නොවන උපයෝගීතා හෝ උපකාරක ක්‍රම සඳහා. නිදර්ශන විචල්‍යයන්ට ප්‍රවේශ වීමේ අවශ්‍යතාවයක් නොමැති බැවින්, ස්ථිතික ක්‍රම තිබීම මඟින් අමතන්නාට එම ක්‍රමය ඇමතීමට වස්තුව ක්ෂණිකව දැක්වීමේ අවශ්‍යතාවය ඉවත් කරයි.
  2. කවුන්ටරය වැනි පන්තියේ සියලු අවස්ථාවන් විසින් බෙදාගන්නා රාජ්‍යය සඳහා. සෑම අවස්ථාවක්ම එකම තත්වයක් බෙදා ගත යුතුය. හුදෙක් එම තත්වය භාවිතා කරන ක්‍රම ස්ථිතික විය යුතුය.

1

සූර්යග්‍රහණයේ දී ඔබට ස්ථිතික ක්‍රම හඳුනා ගැනීමට උපකාරී වන අනතුරු ඇඟවීමක් සක්‍රීය කළ හැකිය. (උද්දීපනය කළ රේඛාවට ඉහළින් මට ඉස්මතු කිරීමට අමතක වූ තවත් එකකි)

සූර්යග්‍රහණ සැකසුම


0

ඔබේ කේතයේ ක්‍රමයක් ඇමතීමට ඔබට වස්තුවක් නිර්මාණය කිරීමට අවශ්‍ය නොවන විට එම ක්‍රමය ස්ථිතික යැයි ප්‍රකාශ කරන්න. ස්ථිතික ක්‍රමයට කැඳවීමට නිදසුනක් අවශ්‍ය නොවන නමුත් මෙහි ඇල්ලීම සියලු ස්ථිතික ක්‍රම JVM විසින් ස්වයංක්‍රීයව කැඳවනු නොලැබේ. මෙම වරප්‍රසාදය භුක්ති විඳින්නේ ජාවා හි ප්‍රධාන () “පොදු ස්ථිතික අවලංගු ප්‍රධාන [ස්ට්‍රිං ... ආර්ග්ස්]” ක්‍රමය නිසා පමණි. කේතය ක්‍රියාත්මක කිරීම ආරම්භ කරන්න.

උදාහරණයක්:

public class Demo
{
   public static void main(String... args) 
   {
      Demo d = new Demo();

      System.out.println("This static method is executed by JVM");

     //Now to call the static method Displ() you can use the below methods:
           Displ(); //By method name itself    
      Demo.Displ(); //By using class name//Recommended
         d.Displ(); //By using instance //Not recommended
   }

   public static void Displ()
   {
      System.out.println("This static method needs to be called explicitly");
   }
} 

ප්‍රතිදානය: - මෙම ස්ථිතික ක්‍රමය ක්‍රියාත්මක කරනු ලබන්නේ ජේවීඑම් විසිනි. මෙම ස්ථිතික ක්‍රමය පැහැදිලිව හැඳින්විය යුතුය මෙම ස්ථිතික ක්‍රමය පැහැදිලිව හැඳින්විය යුතුය මෙම ස්ථිතික ක්‍රමය පැහැදිලිව හැඳින්විය යුතුය

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.