what is static keyword java
Овај водич објашњава статичну кључну реч у Јави и њену употребу у променљивим, методама, блоковима и класама. Такође наводи разлику између статичних и нестатичних чланова:
Јава подржава разне врсте декларација да би указала на опсег и понашање својих променљивих, метода, класа итд. На пример, кључна реч финал, сеалед, статиц, итд. Све ове декларације имају неко специфично значење када се користе у програму Јава.
Истражићемо све ове кључне речи док настављамо са овим упутством. Овде ћемо разговарати о детаљима једне од најважнијих кључних речи у Јави, тј. „Статички“.
Шта ћете научити:
- Статична кључна реч у Јави
- Закључак
Статична кључна реч у Јави
Члан у Јава програму може се декларирати као статички користећи кључну ријеч „статиц“ која претходи његовој декларацији / дефиницији. Када је члан проглашен статичким, то у суштини значи да га члан деле све инстанце класе без прављења копија по инстанци.
Стога је статиц некласијски модификатор који се користи у Јави и може се применити на следеће чланове:
- Променљиве
- Методе
- Блокови
- Предавања (тачније угнежђене класе)
Када се члан прогласи статичним, може му се приступити без употребе објекта. То значи да је статични члан активан и доступан пре него што се инстанцира класа. За разлику од осталих нестатичних чланова класе који престају да постоје када објекат класе изађе из опсега, статични члан је и даље очигледно активан.
Статичка променљива у Јави
Променљива члана класе која је декларисана као статичка назива се статичка променљива. Такође се назива и „променљива класе“. Једном када је променљива декларисана као статичка, меморија се додељује само једном, а не сваки пут када се класа инстанцира. Стога статичној променљивој можете приступити без референце на објекат.
Следећи Јава програм приказује употребу статичких променљивих:
class Main { // static variables a and b static int a = 10; static int b; static void printStatic() { a = a /2; b = a; System.out.println('printStatic::Value of a : '+a + ' Value of b : '+b); } public static void main(String() args) { printStatic(); b = a*5; a++; System.out.println('main::Value of a : '+a + ' Value of b : '+b); } }
Излаз:
У горњем програму имамо две статичке променљиве тј. А и б. Ове променљиве модификујемо у функцији „принтСтатиц“ као и у „маин“. Имајте на уму да се вредности ових статичких променљивих чувају у функцијама чак и када се обим функције завршава. Излаз приказује вредности променљивих у две функције.
Зашто су нам потребне статичке променљиве и где су оне корисне?
Статичке променљиве су најкорисније у апликацијама којима су потребни бројачи. Као што знате, бројачи ће дати погрешне вредности ако су декларисани као нормалне променљиве.
На пример, ако имате нормалну променљиву постављену као бројач у апликацији која има класу рецимо аутомобил. Тада, кад год креирамо аутомобилски објект, нормална променљива бројача биће иницијализована са сваком инстанцом. Али ако имамо променљиву бројача као статичку или променљиву класе, она ће се иницијализовати само једном када се класа креира.
Касније, са сваком инстанцом класе, овај бројач ће се увећати за један. Ово је за разлику од нормалне променљиве у којој ће се са сваком инстанцијом бројач повећавати, али ће вредност бројача увек бити 1.
Дакле, чак и ако креирате стотину предмета класе аутомобила, тада ће бројач као нормална променљива увек имати вредност 1, док ће са статичком променљивом приказати тачан број 100.
Доље је дат још један пример статичких бројача у Јави:
class Counter { static int count=0;//will get memory only once and retain its value Counter() { count++;//incrementing the value of static variable System.out.println(count); } } class Main { public static void main(String args()) { System.out.println('Values of static counter:'); Counter c1=new Counter(); Counter c2=new Counter(); Counter c3=new Counter(); } }
Излаз:
Рад статичке променљиве видљив је у горњем програму. Прогласили смо статичку променљиву цоунт са почетном вредношћу = 0. Затим у конструктору класе повећавамо статичку променљиву.
У главној функцији креирамо три објекта бројача класа. Излаз приказује вредност статичке променљиве сваки пут када се креира објект бројача. Видимо да се са сваким креираним објектом постојећа вредност статичке променљиве увећава и не реиницијализује.
Јава статички метод
Метода у Јави је статична када јој претходи кључна реч „статиц“.
Неке тачке које требате запамтити о статичкој методи укључују:
Јава програмер интервју питања и одговори за свеже
- Статичка метода припада класи у односу на друге не-статичке методе које се позивају помоћу инстанце класе.
- Да бисте позвали статички метод, не треба вам објекат класе.
- Статички подаци класе су доступни статичкој методи. Статички метод може чак да промени вредности члана статичног податка.
- Статичка метода не може имати референцу на „овај“ или „супер“ члан. Чак и ако статички метод покуша да их упути, то ће бити грешка компајлера.
- Баш као и статички подаци, и статички метод може позвати друге статичке методе.
- Статичка метода се не може односити на нестатичне чланове података или променљиве, а такође не може позивати и не-статичке методе.
Следећи програм приказује примену статичке методе у Јави:
class Main { // static method static void static_method() { System.out.println('Static method in Java...called without any object'); } public static void main(String() args) { static_method(); } }
Излаз:
Ово је једноставна илустрација. Дефинишемо статички метод који једноставно исписује поруку. Тада се у главној функцији позива статичка метода без икаквог објекта или инстанце класе.
Још један пример примене статичке кључне речи у Јави.
class Main { // static variable static int count_static = 5; // instance variable int b = 10; // static method static void printStatic() { count_static = 20; System.out.println('static method printStatic'); // b = 20; // compilation error 'error: non-static variable b cannot be referenced from a static context' //inst_print(); // compilation error 'non-static method inst_print() cannot be referenced from a static //context' //System.out.println(super.count_static); // compiler error 'non-static variable super cannot be //referenced from a static context' } // instance method void inst_print() { System.out.println('instance method inst_print'); } public static void main(String() args) { printStatic(); } }
Као што видите, у горњем програму имамо две методе. Метода принтСтатиц је статичка метода, док је инст_принт инстанца. Такође имамо две променљиве, статиц_цоунт је статичка променљива и б је променљива инстанце.
У статичкој методи - принтСтатиц, прво приказујемо поруку, а затим покушавамо да променимо вредност променљиве инстанце б и такође позовемо не-статичку методу.
Даље, покушавамо да користимо кључну реч „супер“.
б = 20;
инст_принт ();
Систем.оут.принтлн (супер.цоунт_статиц);
Када извршимо програм са горњим редовима, добијамо грешке при компилацији за коришћење променљивих инстанце, позивање не-статичких метода и упућивање супер у статички контекст. То су ограничења статичке методе.
Када коментаришемо горња три реда, тек тада горњи програм ради у реду и даје следеће резултате.
Излаз:
Преоптерећење и замена статичке методе
Као што сви знате, и преоптерећење и замена су особине ООПС-а и помажу у полиморфизму. Преоптерећење се може класификовати као полиморфизам времена компајлирања при чему можете имати методе са истим именом, али са различитим листама параметара.
Замена је карактеристика полиморфизма времена извођења и у томе је метода основне класе замењена у изведеној класи тако да је потпис или прототип методе исти, али се дефиниција разликује.
Размотримо како Преоптерећење и Замена утичу на статичку класу у Јави.
Преоптерећење
Статични метод у Јави можете преоптеретити различитим листама параметара, али са истим именом.
Следећи програм приказује Преоптерећење:
public class Main { public static void static_method() { System.out.println('static_method called '); } public static void static_method(String msg) { System.out.println('static_method(string) called with ' + msg); } public static void main(String args()) { static_method(); static_method('Hello, World!!'); } }
Излаз:
Овај програм има две статичке методе са истим називом ‘статиц_метход’, али различиту листу аргумената. Прва метода не узима ниједан аргумент, а друга метода узима аргумент низа.
Треба напоменути да метод не можете преоптеретити само у зависности од кључне речи „статиц“. На пример, ако имате метод инстанце „сум“ и ако дефинишете другу методу „сум“ и прогласите је статичном, онда она неће функционисати. Овај покушај преоптерећења на основу „статичне“ кључне речи резултираће неуспехом компилације.
Превазилажење
Како се статичке методе позивају без иједног објекта класе, чак и ако имате статичку методу са истим потписом у изведеној класи, она неће бити надјачана. То је зато што нема полиморфизма током извођења без инстанце.
Стога не можете да замените статички метод. Али ако уопште постоји статичка метода са истим потписом у изведеној класи, онда метода за позивање не зависи од објеката у време извођења, већ зависи од компајлера.
Морате приметити да, иако статичке методе не могу бити замењене, Јава језик не даје никакве грешке компајлера када имате метод у изведеној класи са истим потписом као метод основне класе.
Следећа примена доказује ово.
најбоља места за бесплатно гледање анимеа
classBase_Class { // Static method in base class which will be hidden in substatic_displayclass public static void static_display() { System.out.println('Base_Class::static_display'); } } classDerived_Class extends Base_Class { public static void static_display() { System.out.println('Derived_Class::static_display'); } } public class Main { public static void main(String args( )) { Base_Class obj1 = new Base_Class(); Base_Class obj2 = new Derived_Class(); Derived_Class obj3 = new Derived_Class(); obj1.static_display(); obj2.static_display(); obj3.static_display(); } }
Излаз:
У горњем програму можете видети да позвана статичка метода не зависи од тога на који објект показује показивач. То је зато што се објекти уопште не користе са статичким методама.
Статични блок у Јави
Баш као што и на Јави имате функционалне блокове у програмским језицима као што су Ц ++, Ц # итд., Постоји и посебан блок који се назива „статички“ блок који обично укључује блок кода који се односи на статичке податке.
Овај статички блок се извршава у тренутку када се креира први објекат класе (тачно у време учитавања класе) или када се користи статички члан унутар блока.
Следећи програм приказује употребу статичког блока.
class Main { static int sum = 0; static int val1 = 5; static int val2; // static block static { sum = val1 + val2; System.out.println('In static block, val1: ' + val1 + ' val2: '+ val2 + ' sum:' + sum); val2 = val1 * 3; sum = val1 + val2; } public static void main(String() args) { System.out.println('In main function, val1: ' + val1 + ' val2: '+ val2 + ' sum:' + sum); } }
Излаз:
Обратите пажњу на редослед извршавања изјава у горњем програму. Прво се извршава садржај статичког блока, а затим главни програм. Статичке променљиве сум и вал1 имају почетне вредности док вал2 није иницијализован (подразумевано је 0). Тада у статичком блоку вал2 још увек није додељена вредност и стога је његова вредност приказана као 0.
Вредности променљиве вал2 додељује се вредност након штампања у статичком блоку и поновни израчун зброја. Због тога у главној функцији добијамо различите вредности збира и вал2.
Ако наведете конструктор, тада се садржај статичког блока извршава чак и пре конструктора. Статички блокови се углавном користе за иницијализацију статичких чланова класе и осталих иницијализација повезаних са статичким члановима.
Јава Статиц Цласс
У Јави имате статичке блокове, статичке методе, па чак и статичке променљиве. Отуда је очигледно да можете имати и статичне часове. У Јави је могуће имати класу унутар друге класе и то се назива угнежђена класа. Класа која затвара угнежђену класу назива се спољна класа.
У Јави, иако угнежђену класу можете прогласити статичном, спољну класу није могуће имати као статичку.
Истражимо сада статичне угнежђене класе у Јави.
Статична угнежђена класа у Јави
Као што је већ поменуто, угнежђену класу у Јави можете прогласити статичном. Статична угнежђена класа разликује се од нестетичке угнежђене класе (унутрашња класа) у одређеним аспектима како је наведено у наставку.
најбоља места за бесплатно гледање анимеа на мрежи
За разлику од нестетичке угнежђене класе, угнежђеној статичкој класи није потребна спољна референца класе.
Статична угнежђена класа може приступити само статичким члановима спољне класе насупрот не-статичким класама које могу приступити статичким, као и не-статичким члановима спољне класе.
Пример статичне угнежђене класе је дат у наставку.
class Main{ private static String str = 'SoftwareTestingHelp'; //Static nested class static class NestedClass{ //non-static method public void display() { System.out.println('Static string in OuterClass: ' + str); } } public static void main(String args()) { Main.NestedClassobj = new Main.NestedClass(); obj.display(); } }
Излаз:
У горњем програму видите да статична угнежђена класа може приступити статичкој променљивој (стрингу) из спољне класе.
Статички увоз у Јави
Као што знате, обично укључујемо разне пакете и унапред дефинисану функционалност у Јава програм користећи директиву „импорт“. Употреба речи статиц са директивом о увозу вам омогућава да користите функционалност класе без употребе назива класе.
Пример:
import static java.lang.System.*; class Main { public static void main(String() args) { //here we import System class using static, hence we can directly use functionality out.println('demonstrating static import'); } }
Излаз:
У овом програму користимо статички увоз за класу јава.ланг.Систем.
Белешка: У главној функцији смо управо користили оут.принтлн за приказ поруке.
Иако функција статичког увоза чини код сажетијим и читљивијим, понекад ствара двосмисленост, посебно када неки пакети имају исте функције. Стога статички увоз треба користити само када је крајње потребан.
Статички вс Нестатични
Хајде да разговарамо о главним разликама између статичних и нестатичних чланова Јаве.
У наставку су наведене разлике између Статичке и нестатичке променљиве .
Статичке променљиве | Нестатичке променљиве |
---|---|
Може му се приступити само помоћу назива класе. | Захтева објекте класе за приступ. |
Приступају како статичким, тако и не-статичким методама. | Приступају само нестетичким методама. |
Меморија за статичку променљиву додељује се само једном по класи. | Меморија за нестатичне променљиве додељује се по објекту. |
Дељено са свим објектима класе. | Направљена је копија променљиве по објекту. |
Има глобални опсег и доступан је свим методама и блоковима. | Има локални опсег и видљив је објектима класе. |
Следећа разлика је разлика између статичких и нестатичких метода .
Статичке методе | Нестатичке методе |
---|---|
Метода којој претходи статична кључна реч и доступна је на нивоу класе. | Метода којој не претходи статична кључна реч и доступна за сваку инстанцу класе. |
Подржава време компајлирања или рано везивање. | Подржава време извођења или динамичко везивање. |
Може приступити само статичким подацима чланова своје класе и било које друге класе. | Може приступити статичким, као и нестатичним члановима класе и другим класама. |
Статичке методе се не могу надјачати. | Може се поништити. |
Меморија се додељује само једном. Отуда се користи мање меморије. | Потрошња меморије је већа јер се меморија додељује сваки пут када се метода позове. |
Статичка вс финална
Статиц и Финал су две кључне речи у Јави које могу дати посебно значење ентитету са којим се користи. На пример, када је променљива декларисана као статична, она постаје променљива класе којој се може приступити без позивања на објекат.
Слично томе, када се променљива прогласи коначном, она постаје непроменљива, тј. Константа.
Лет'с табуларизе неке од главних разлика између Статиц и Финал кључне речи у Јави.
Статички | Коначни |
---|---|
Статички члан података (угнежђена класа, променљива или метода) је члан података коме претходи статична кључна реч и може му се приступити без објекта. | Завршна кључна реч може се применити на променљиву, метод, класу итд. и намеће ограничења ентитетима. |
Није обавезно иницијализовати статичку променљиву са вредношћу током декларације. | Потребно је да коначна променљива буде иницијализована у вредност у тренутку декларације |
Можете поново покренути статичке променљиве. | Није могуће поново покренути коначне променљиве. |
Статичке методе су оне које могу приступити само статичким члановима. | Коначне методе су методе које се не могу наследити / поништити. |
Статичке класе су класе чији се објекти не могу креирати. | Завршне класе су класе које се не могу наследити. |
Често постављана питања
П # 1) Може ли Јава класа бити статична?
Одговор: Да, класа у Јави може бити статична, под условом да није спољна класа. То значи да само угнежђене класе у Јави могу бити статичке.
П # 2) Када треба да користим Статиц у Јави?
Одговор: Кад год желите члана података у свом програму који треба да задржи своју вредност на објектима, тада бисте требали користити статички. На пример, бројач. Метода се може прогласити статичном када је не желите позивати помоћу објекта.
П # 3) Може ли статичка класа имати конструктор?
Одговор: Да, статичка класа може имати конструктор и њена сврха је само иницијализација статичких чланова података. Позваће се само први пут када се приступи члановима података. Неће се позивати за накнадни приступ.
П # 4) Каква је употреба Статиц Цонструцтор-а?
Одговор: Генерално, конструктор се користи за иницијализацију статичких чланова података. Такође се користи за извођење операција / радњи које треба извршити само једном.
П # 5) Да ли се статички методи наслеђују у Јави?
Одговор: Да, статичке методе у Јави су наслеђене, али нису замењене.
Закључак
У овом упутству детаљно смо разговарали о статичкој кључној речи Јава заједно са њеном употребом у члановима података, методама, блоковима и класама. Кључна реч статиц је кључна реч која се користи за означавање нивоа класе или глобалног опсега.
Не треба да приступате статичким члановима помоћу инстанци класе. Члановима статичких података можете директно приступити помоћу имена класе. Такође смо разговарали о главним разликама између статичних и нестатичних чланова као и о статичким и завршним кључним речима.
У наредним темама истражићемо више кључних речи и њихов значај у језику Јава.
Препоручено читање
- Статички у Ц ++
- Јава интерфејс и лекција са апстрактним часовима са примерима
- Примена Јава-а: Стварање и извршавање Јава ЈАР датотеке
- Јава виртуелна машина: како ЈВМ помаже у покретању Јава апликације
- Ц # концепти: конструктор, деструктор, статичка класа, структура и набрајање
- Приступити модификаторима у Јави - Водич са примерима
- Водич за Јава рефлексију са примерима
- Увод у програмски језик Јава - Видео водич