JavaRush /Java блогу /Random-KY /акыркы Java ыкмалары жана класстары
articles
Деңгээл

акыркы Java ыкмалары жана класстары

Группада жарыяланган
Класс ыкмасын модификатор менен белгилөө менен final, биз эч бир туунду класс анын ички ишке ашырылышын өзгөртүү менен бул ыкманы жокко чыгара алbyte дегенди билдиребиз. Башкача айтканда, биз ыкманын акыркы versionсы жөнүндө сөз болуп жатат. Бүтүндөй класс катары да белгилесе болот final. акыркы Java ыкмалары жана класстары - 1
final class NoExtending {
// …
}
деп белгиленген класс finalмураска алынbyte жана анын бардык ыкмалары кыйыр түрдө менчикке ээ болот final. Класстардын жана методдордун декларацияларында функцияны колдонуу finalcodeдун коопсуздугунун деңгээлин жогорулата алат. Эгерде класс модификатор менен жабдылган болсо final, анда эч ким классты узарта алbyte жана процесстин жүрүшүндө анын келишимин бузушу мүмкүн. Эгерде белги finalбир ыкманы билдирсе, анда "жасалмачылыктан" коркпостон, бардык жагдайларда анын ички ишке ашырылышына толук ишене аласыз. finalМисалы, колдонуучу киргизген сырсөздү текшерүүнү талап кылган ыкманы жарыялоодо колдонуу ылайыктуу , бул ыкма башында эмнени кааласа, ошонун так аткарылышын камсыз кылат. Мүмкүн болгон чабуулчу мындай ыкманын баштапкы ишке ашырылышын программага анын жокко чыгарылган versionсын "кирип" өзгөртө алbyte, ал, айталы, ар дайым чыныгы маанисин кайтарып берет, кандай сырсөзгө карабастан, колдонуучунун ийгorктүү катталганын көрсөтүп турат. ал чындап кирди. finalЭгер конкреттүү кырдаал мүмкүнчүлүк берсе, андан ары барууга жана бүт классты класс деп жарыялоого укугуңуз бар ; ыкма ValidatePasswordкыйыр түрдө ошол эле мүлккө ээ болот. Усулда же класс декларациясында модификаторду колдонуу finalcodeду андан ары колдонуу жана өнүктүрүү мүмкүнчүлүгүнө олуттуу чектөөлөрдү киргизет. finalДекларацияда методду колдонуу методду ишке ашыруу өзүн-өзү камтыган жана толугу менен толук экендигинин ишенимдүү көрсөткүчү болуп саналат. Классыңызды колдонууну каалаган башка программисттер, анын функцияларын өз муктаждыктарына ылайык кеңейтип, өз максаттарына жетүү үчүн каражаттарды тандоодо чектелген же алардан толугу менен ажыратылат. Классты бүтүндөй белгилөө менен final, анын тукум куучулук жөндөмдүүлүгүн өчүрөсүз жана анын башкаларга пайдалуулугун бир топ азайтасыз. Модификаторду колдонгону жатканыңызда final, СИЗ мындай курмандыктарга даяр экениңизди жана аларды жасоого татыктуубу же жокпу, текшериңиз. Көпчүлүк учурларда codeдун коопсуздугунун жетиштүү деңгээлине жетүү үчүн бүт классты мындай деп белгилөөнүн кажети жок final- класстын кеңейүү мүмкүнчүлүгүн finalмодификатор менен анын "критикалык" структуралык элементтерин гана белгилөө менен сактап калуу толук мүмкүн. Бул учурда, сиз класстын негизги функцияларын сактап каласыз жана ошол эле учурда жаңы мүчөлөрдү кошуу менен анын мурастоосуна уруксат бересиз, бирок "эски" мүчөлөрүн кайра аныктабастан. Албетте, методдордун codeу менен кирүүчү талаалар өз кезегинде же finalдеп белгилениши керек , анткени антпесе ар кандай туунду класс тиешелүү методдордун жүрүм-турумуна таасирин тийгизип, мазмунун өзгөртө алат. Модификаторду колдонуунун дагы бир эффектиси компилятор тарабынан чечилген codeду оптималдаштыруу маселесин жөнөкөйлөтүү менен байланышкан. Бул деп белгиленбеген ыкма чакырылганда эмне болотfinalprivatefinalfinal, иштөө убактысы системасы an objectтин чыныгы классын аныктайт, чалууну ашыкча жүктөлгөн ыкмалар тобунан эң ылайыктуу code менен байланыштырат жана башкарууну ошол codeго өткөрүп берет. Бирок, мисалы, мурда талкууланган getNameкласс үлгүсүндөгү ыкма Attrкатары белгиленген болсо final, аны чакыруу операциясы байкаларлык жөнөкөйлөштүрүлгөн болушу мүмкүн. Эң майда-чүйдөсүнө чейин, мисалы -га тиешелүү болгон учурда getName, компилятор жөн гана методду чакырууну өзүнүн негизги codeу менен алмаштыра алат. Бул механизм codeду киргизүү деп аталат. Методдун саптык versionсын колдонууда, getNameтөмөнкү эки туюнтма так бирдей аткарылат:
system.out.println("id = " + rose.name);
system.out.println("id = " + rose.getName());
Жогорудагы туюнтмалар эквиваленттүү болгону менен, экинчиси дагы эле артыкчылыкка ээ, анткени ыкма getNameаталыш талаасына окуу үчүн гана касиет берүүгө, ал эми класстын codeу абстракциянын белгилүү бир даражасына ээ болууга мүмкүндүк берет, бул сизге эркин өзгөртүүгө мүмкүндүк берет. классты ишке ашыруу. Ошол эле оптималдаштыруу схемасын компилятор privateжана методдоруна колдонсо болот statiс, анткени алар да жокко чыгарууга жол бербейт. Класс декларацияларында модификаторду колдонуу finalкээ бир типти текшерүү операцияларын натыйжалуураак кылат. Бул учурда, мындай операциялардын көбү компиляция стадиясында аткарылышы мүмкүн, ошондуктан мүмкүн болуучу каталар алда канча эрте аныкталат. Эгерде компилятор баштапкы текстте класска шилтемеге туш болсо final, ал тиешелүү an object көрсөтүлгөн типте экенине "ишенбеши мүмкүн". Компилятор класстын жалпы иерархиясында ээлеген ордун дароо аныктап, анын туура колдонулганын же колдонулбагандыгын текшере алат. Модификатор finalколдонулбаса, тиешелүү текшерүүлөр программаны аткаруу стадиясында гана жүргүзүлөт. Exercise 3.4. Автоунаа жана жүргүнчүлөрдү ташуучу унаа класстарынын метод декларацияларына акыркы модификаторду кошуу максатка ылайыктуубу (жана ошондой болсо, кайсынысы ? Түпнуска булакка шилтеме: http://src-code.net/metody-i-klassy-final-java
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION