Un fragment de prelegere cu un mentor ca parte a cursului Universității Codegym. Înscrie-te la cursul complet.


"Salut, Amigo! Am auzit ca deja intelegi bine metodele?"

„Bună, Rishi. Da, deja mi-am făcut drum prin trucul acelui profesor. Aș spune că nu a fost așa de rău, dar îmi vei spune: „Nu, nu! Nu ai înțeles nimic. '"

"Clar că ai petrecut prea mult timp discutând cu anumiți profesori, probabil cu Diego. Oricum... încă sper că înțelegi destul de bine metodele. Până la urmă, astăzi am să te învăț câteva cuvinte magice care ajută la delimitarea metodelor. „sfere de influență”.

— Sună intrigant.

„De fapt, totul este simplu. Înainte de fiecare metodă, programatorii pot specifica așa-numiții modificatori de acces. Acestea includ următoarele cuvinte cheie: public, protected, private.

„Acești modificatori de acces vă permit să restricționați accesul altor clase la o metodă.

„De exemplu, dacă scrieți privatecuvântul cheie înainte de declararea unei metode, atunci metoda poate fi apelată doar din aceeași clasă în care este declarată. Cuvântul publiccheie permite accesul la metoda marcată din orice metodă din orice clasă.

Există un total de 3 astfel de modificatori, dar există 4 tipuri de acces la o metodă. Acest lucru se datorează faptului că absența unui modificator de acces înseamnă și ceva. Iată un tabel complet:

Acces din...
Modificatori Orice clasa Clasa de copii Pachetul său Clasa sa
public da da da da
protected Nu da da da
nici un modificator Nu Nu da da
private Nu Nu Nu da

„Și aici este o explicație completă a modificatorilor de acces:

1. publicmodificator

O metodă (sau variabilă sau clasă) marcată cu publicmodificatorul poate fi accesată de oriunde în program . Acesta este cel mai înalt grad de deschidere - nu există restricții.

2. privatemodificator

O metodă (sau variabilă, sau clasă) marcată cu privatemodificatorul poate fi accesată numai din aceeași clasă în care este declarată . Pentru toate celelalte clase, metoda marcată (sau variabila) este invizibilă. Parcă nu există. Acesta este cel mai înalt nivel de restricție - doar propria sa clasă.

3. Fără modificator (modificator implicit)

Dacă o metodă (sau variabilă) nu este marcată cu niciun modificator, atunci se consideră că are „modificatorul implicit”. Variabilele sau metodele cu acel modificator (adică fără niciunul) sunt vizibile pentru toate clasele din pachetul în care sunt declarate . Și numai pentru ei. Acest modificator este uneori numit și package-private, sugerând că accesul la variabile și metode este deschis întregului pachet în care se află clasa lor.

4. protectedmodificator

Dacă o metodă este marcată cu protectedmodificatorul, atunci poate fi accesată din aceeași clasă, același pachet și descendenți (clase care moștenesc clasa în care este declarată metoda). Vom analiza acest subiect mai detaliat în căutarea Java Core.”

„Interesant, dar nu sunt sigur dacă pot pune imediat acești modificatori în locurile potrivite.

„Veți ajunge acolo treptat. Nu trebuie să vă faceți griji din timp. Până când ajungeți la sfârșitul misiunii de sintaxă Java, puteți utiliza modificatorul publicpentru toate metodele dvs. (precum și pentru clase și variabile de instanță). Veți avea nevoie de alți modificatori atunci când începem să învățăm activ OOP."

„Poți explica mai detaliat de ce sunt necesari modificatorii de acces?”

„Devin necesare pentru proiecte mari scrise de zeci și sute de programatori în același timp.

„Uneori există situații în care un programator dorește să împartă o metodă excesiv de mare în părți și să mute o parte din cod în metode helper. Dar, în același timp, el sau ea nu dorește ca alți programatori să numească aceste metode helper, deoarece codul corespunzător poate să nu funcționeze corect."

„Deci au venit cu acești modificatori de acces. Dacă marcați o metodă de ajutor cu cuvântul privat , atunci niciun alt cod în afară de clasa dvs. nu poate vedea metoda dvs. de ajutor.”

"Cred ca inteleg."

staticcuvânt cheie

"Există un alt cuvânt cheie interesant. Este static. Deloc surprinzător, face metodele statice."

"Ce înseamnă asta?"

„Îți voi spune mai multe despre asta mai târziu. Nu-ți face griji. Deocamdată, încearcă doar să-ți amintești câteva fapte despre metodele statice.

Fapt 1. O metodă statică nu este atașată niciunui obiect, ci aparține în schimb clasei în care este declarată. Pentru a apela o metodă statică, trebuie să scrieți:

ClassName.MethodName()

Exemple de metode statice:

Numele clasei Numele metodei statice
Thread.sleep() Thread sleep()
Math.abs() Math abs()
Arrays.sort() Arrays sort()

Numele clasei înaintea numelui unei metode statice poate fi omis dacă apelați metoda statică din clasa sa. Acesta este motivul pentru care nu trebuie să scrieți Solutionînainte numele fiecăreia dintre metodele statice care sunt apelate.

Faptul 2. O metodă statică nu poate accesa metodele non-statice ale propriei sale clase. O metodă statică poate accesa numai metode statice. Ca urmare, declarăm toate metodele pe care dorim să le apelăm din mainmetoda static."

"De ce este asta?"

„Îți vei răspunde singur la această întrebare când vei începe să înveți OOP și vei înțelege cum funcționează metodele statice. Până atunci, ai încredere în mine.

throwscuvânt cheie

„Există un alt cuvânt cheie pe care probabil l-ați văzut într-o declarație de metodă — cuvântul throwscheie. Spre deosebire de modificatorii de acces și cuvântul staticcheie, acest cuvânt cheie este plasat după parametrii metodei:

public static Type name(parameters) throws Exception
{
  method body
}

"Si ce inseamna asta?"

„Încă o dată trebuie să vă spun că veți afla adevăratul său scop mai târziu, când vom studia excepțiile (la Nivelul 15).

Dar pentru a o atinge superficial, putem spune că o metodă marcată cu throwscuvântul cheie poate arunca erori (excepții), adică instanțe ale clasei Exception(și claselor care o moștenesc). Dacă într-o clasă pot apărea mai multe tipuri diferite de erori, atunci trebuie să enumerați fiecare dintre ele separate prin virgule."

"Sună misterios și de neînțeles! Va trebui să aștept nivelul 14."

metoda principala

„Să aruncăm o privire mai atentă la metoda principală. Înțelegeți deja că linia în care este declarată o metodă, care conține toți modificatorii, va afecta modul în care această metodă este numită din alte clase și metode. În plus, afectează tipul de rezultat, metoda va reveni și indică ce erori sunt posibile pe măsură ce rulează.

„O astfel de linie se numește declarație de metodă și are următorul format general:

access modifier static Type name(parameters) throws exceptions
Formatul general al unei declarații de metodă

Unde access modifierseste înlocuit cu public, protected, private, sau nimic;

dacă metoda este statică, atunci staticapare cuvântul cheie (este absent pentru metodele non-statice)

Typeeste tipul valorii returnate ( voiddacă nu există niciun rezultat)

„Acum înțelegeți mult mai bine ce înseamnă toate aceste cuvinte în declarația metodei main:

public static void main(String[] args) throws Exception
Declararea mainmetodei

"Ei bine, acum îmi dau seama că accesul la main()metodă este posibil din orice clasă, așa cum este indicat de publiccuvântul cheie. Metoda este statică, deci poate fi numită explicit ca Solution.main()."

„Ce rezultat main()returnează metoda?”

"Nici unul! Tipul rezultat este void. Este un fel ca un tip gol, un substituent."

„Ce main()are în paranteze?”

"Hmm... Se dovedește că mainmetoda preia argumente (!). Acestea sunt transmise ca o matrice de șiruri."

"Așa este. Și numele parametrului argssugerează „argumente” minții noastre. Când programul pornește, îi puteți transmite argumente — o matrice de șiruri de caractere. Acestea vor fi conținute în tabloul argsdin main()metodă."

"Uau! M-am întrebat despre asta când l-am văzut prima dată, dar apoi m-am obișnuit și am început să scriu lista de parametri fără să mă gândesc."

"Am fost cu toții acolo. În cele din urmă, erori nerezolvate precum Exception(sau descendenții săi) pot apărea în main()metodă. Știm acest lucru datorită părții throws Exceptiondin declarație."

"Mulțumesc, Rishi. Nu am înțeles totul, dar asta a fost interesant."

"Ești binevenit. Treptat vei ajunge să înțelegi toate aceste puncte subtile, sunt sigur."