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 private
nyckelordet före en metoddeklaration, så kan metoden bara anropas från samma klass som den deklareras i. Nyckelordet public
tillå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. public
modifierare
En metod (eller variabel eller klass) markerad med modifieraren public
kan nås från var som helst i programmet . Detta är den högsta graden av öppenhet – det finns inga begränsningar.
2. private
modifierare
En metod (eller variabel eller klass) märkt med modifieraren private
kan 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. protected
modifierare
Om en metod är markerad med protected
modifieraren 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 public
på 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."
static
nyckelord
"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 main
statiska."
"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.
throws
nyckelord
"Det finns ett annat nyckelord som du förmodligen har sett i en metoddeklaration — nyckelordet. throws
Till skillnad från åtkomstmodifierare och static
nyckelordet 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 throws
kan ge fel (undantag), vilket betyder instanser av Exception
klassen (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
Var access modifiers
ersätts av public
, protected
, private
, eller ingenting alls;
om metoden är statisk static
visas nyckelordet (det saknas för icke-statiska metoder)
Type
är typen av returvärde ( void
om 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
"Tja, nu inser jag att åtkomst till main()
metoden är möjlig från vilken klass som helst, vilket indikeras av public
nyckelordet. 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 main
metoden tar argument (!). De skickas in som en rad strängar."
"Det stämmer. Och parameternamnet args
antyder '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 args
i 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 Exception
del 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å."
GO TO FULL VERSION