Ett föreläsningsutdrag med en mentor som en del av Codegym University-kursen. Anmäl dig till hela kursen.


"Hälsningar, Amigo! Jag hör att du redan har bra koll på metoder?"

"Hej, Rishi. Ja, jag har redan klippt mig igenom det där lärarens trick. Jag skulle säga att det inte var så illa, men du kommer att säga till mig," Nej, nej! Du har inte kommit på någonting. '"

"Du har helt klart spenderat för mycket tid på att chatta med vissa lärare, förmodligen med Diego. Hur som helst... Jag hoppas fortfarande att du förstår metoder tillräckligt bra. Trots allt, idag ska jag lära dig några magiska ord som hjälper dig att avgränsa metoder "inflytandesfärer."

"Låter spännande."

"I själva verket är allt enkelt. Före varje metod kan programmerare specificera så kallade åtkomstmodifierare. Dessa inkluderar följande nyckelord: public, protected, private.

"Dessa åtkomstmodifierare låter dig begränsa andra klassers åtkomst till en metod.

"Om du till exempel skriver privatenyckelordet före en metoddeklaration, så kan metoden bara anropas från samma klass som den deklareras i. Nyckelordet publictillåter åtkomst till den markerade metoden från vilken metod som helst av vilken klass som helst.

Det finns totalt 3 sådana modifierare, men det finns 4 typer av åtkomst till en metod. Detta beror på att frånvaron av en åtkomstmodifierare också betyder något. Här är en komplett tabell:

Tillgång från...
Modifierare Vilken klass som helst Barnklass Dess paket Dess klass
public Ja Ja Ja Ja
protected Nej Ja Ja Ja
ingen modifierare Nej Nej Ja Ja
private Nej Nej Nej Ja

"Och här är en komplett förklaring av åtkomstmodifierarna:

1. publicmodifierare

En metod (eller variabel eller klass) markerad med modifieraren publickan nås från var som helst i programmet . Detta är den högsta graden av öppenhet – det finns inga begränsningar.

2. privatemodifierare

En metod (eller variabel eller klass) märkt med modifieraren privatekan endast nås från samma klass där den deklareras . För alla andra klasser är den markerade metoden (eller variabeln) osynlig. Det är som om det inte finns. Detta är den högsta begränsningsnivån - bara sin egen klass.

3. Ingen modifierare (standardmodifierare)

Om en metod (eller variabel) inte är markerad med någon modifierare, anses den ha "standardmodifieraren". Variabler eller metoder med den modifieraren (dvs med ingen alls) är synliga för alla klasser i paketet där de är deklarerade . Och bara till dem. Denna modifierare kallas också ibland package-private, vilket antyder att åtkomst till variabler och metoder är öppen för hela paketet där deras klass finns.

4. protectedmodifierare

Om en metod är markerad med protectedmodifieraren kan den nås från samma klass, samma paket och avkomlingar (klasser som ärver klassen där metoden deklareras). Vi kommer att analysera detta ämne mer i detalj i Java Core-uppdraget."

"Intressant, men jag är inte säker på om jag omedelbart kan placera dessa modifierare på alla rätt ställen.

"Du kommer dit gradvis. Du behöver inte oroa dig i förväg. Tills du når slutet av Java Syntax-uppdraget kan du använda modifieraren publicpå alla dina metoder (liksom klasser och instansvariabler). Du behöver andra modifierare när vi aktivt börjar lära oss OOP."

"Kan du förklara mer i detalj varför åtkomstmodifierare behövs?"

"De blir nödvändiga för stora projekt skrivna av tiotals och hundratals programmerare samtidigt.

"Ibland finns det situationer när en programmerare vill dela upp en alltför stor metod i delar och flytta en del av koden till hjälpmetoder. Men samtidigt vill han eller hon inte att andra programmerare ska kalla dessa hjälpmetoder, eftersom motsvarande kod kanske inte fungerar korrekt."

"Så de kom på dessa åtkomstmodifierare. Om du markerar en hjälpmetod med ordet privat kan ingen annan kod än din klass se din hjälpmetod."

"Jag tror jag förstår."

staticnyckelord

"Det finns ett annat intressant nyckelord. Det är static. Föga överraskande gör det metoder statiska."

"Vad betyder det?"

"Jag ska berätta mer om det senare. Oroa dig inte. För nu, försök bara komma ihåg ett par fakta om statiska metoder.

Fakta 1. En statisk metod är inte kopplad till något objekt, utan tillhör istället den klass som den deklareras i. För att anropa en statisk metod måste du skriva:

ClassName.MethodName()

Exempel på statiska metoder:

Klassnamn Statisk metodnamn
Thread.sleep() Thread sleep()
Math.abs() Math abs()
Arrays.sort() Arrays sort()

Klassnamnet före namnet på en statisk metod kan utelämnas om du anropar den statiska metoden från dess klass . Det är därför du inte behöver skriva före namnen på var och en av de statiska metoder som anropas.Solution

Fakta 2. En statisk metod kan inte komma åt de icke-statiska metoderna i sin egen klass. En statisk metod kan bara komma åt statiska metoder. Som ett resultat deklarerar vi alla metoder som vi vill anropa från metoden mainstatiska."

"Varför är det så?"

"Du kommer själv svara på den här frågan när du börjar lära dig OOP och förstår hur statiska metoder fungerar. Tills dess, lita bara på mig.

throwsnyckelord

"Det finns ett annat nyckelord som du förmodligen har sett i en metoddeklaration — nyckelordet. throwsTill skillnad från åtkomstmodifierare och staticnyckelordet placeras detta nyckelord efter metodparametrarna:

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

"Och vad betyder det?"

"Än en gång måste jag berätta för dig att du kommer att lära dig dess sanna syfte senare, när vi studerar undantag (i nivå 15).

Men för att beröra det ytligt kan vi säga att en metod markerad med nyckelordet throwskan ge fel (undantag), vilket betyder instanser av Exceptionklassen (och klasser som ärver den). Om flera olika typer av fel kan uppstå i en klass, måste du lista var och en av dem separerade med kommatecken."

"Låter mystiskt och obegripligt! Jag får vänta på nivå 14."

huvudmetod

"Låt oss nu titta närmare på huvudmetoden. Du förstår redan att raden där en metod deklareras, som innehåller alla modifierare, kommer att påverka hur denna metod anropas från andra klasser och metoder. Dessutom påverkar det typen av resultatet kommer metoden att returnera och indikerar vilka fel som är möjliga när den körs.

"En sådan rad kallas en metoddeklaration och har följande allmänna format:

access modifier static Type name(parameters) throws exceptions
Allmänt format för en metoddeklaration

Var access modifiersersätts av public, protected, private, eller ingenting alls;

om metoden är statisk staticvisas nyckelordet (det saknas för icke-statiska metoder)

Typeär typen av returvärde ( voidom det inte finns något resultat)

"Nu har du en mycket bättre förståelse för vad alla dessa ord betyder i deklarationen av metoden main:

public static void main(String[] args) throws Exception
Deklarerar mainmetoden

"Tja, nu inser jag att åtkomst till main()metoden är möjlig från vilken klass som helst, vilket indikeras av publicnyckelordet. Metoden är statisk, så den kan uttryckligen kallas som Solution.main()."

"Vilket resultat ger main()metoden tillbaka?"

"Ingen alls! Resultattypen är void. Det är ungefär som en tom typ, en platshållare."

"Vad main()står det inom parentes?"

"Hmm... Det visar sig att mainmetoden tar argument (!). De skickas in som en rad strängar."

"Det stämmer. Och parameternamnet argsantyder 'argument' för våra sinnen. När programmet startar kan du skicka det argument — en array av strängar. De kommer att finnas i arrayen argsi main()metoden."

"Wow! Jag undrade över det här när jag såg det första gången, men sedan vände jag mig vid det och började skriva parameterlistan utan att tänka."

"Vi har alla varit där. Äntligen kan obehandlade fel som Exception(eller dess ättlingar) uppstå i main()metoden. Vi vet detta tack vare den throws Exceptiondel av deklarationen."

"Tack, Rishi. Jag förstod inte allt, men det här var intressant."

"Du är välkommen. Så småningom kommer du att förstå alla dessa subtila punkter, det är jag säker på."