Stabelspor

Java-syntaks
Nivå , Lekse
Tilgjengelig
Stabelspor - 1

"Hei! I dag skal jeg fortelle deg hva en stabelsporing er. Men først må jeg fortelle deg hva en stabel er."

"Se for deg en bunke med papirer – instruksjoner for en bestemt ansatt. Du kan legge en ny oppgave på toppen av bunken, eller du kan ta en oppgave fra toppen. Dette betyr at oppgavene ikke vil bli utført i den rekkefølgen de ble mottatt . Oppgaven som sist ble plassert på haugen vil være den første som blir utført. Å strukturere elementene i en samling på denne måten danner en stabel .

" Java har en spesiell samling for det – Stack . Det er en samling som har metoder for å 'legge til et element' og 'ta (få) et element'. Som du kanskje har gjettet, vil elementet som ble lagt til sist være det første som Å være tatt."

"Høres ganske enkelt ut."

"Flott. Nå skal jeg forklare hva en stabelsporing er."

"Se for deg at i et Java-program kalles metode A metode B , som kalte metode C , som igjen kalte metode D . For å avslutte metode B , må vi først avslutte metode C , og for å gjøre det - må vi først avslutte metode D . Dette oppførsel ligner en stabel."

"Hvorfor sier du at den ligner den?"

"For å komme til en oppgave midt i papirbunken vår, for eksempel, må du først utføre alle oppgavene som ligger på toppen av den."

"Det er en viss likhet, men jeg er ikke sikker på at jeg forstår alt riktig."

"Se. En stabel er et sett med elementer. Som papirstykker i en haug. For å ta det tredje stykket papir fra toppen, må du først ta det andre, og for det må du ta det første. Du kan alltid legge og ta papirbiter, men du må alltid ta det øverste papiret først."

"Det samme gjelder funksjonskall. Metode A kaller metode B , som kaller metode C . For å avslutte A må du først avslutte B , og for å gjøre det må du avslutte C ."

"Vent. Hvis jeg forstår hva du sier, koker hele konseptet med en stabel ned til "ta papiret som ble lagt til sist" og "du kan bare gå ut av metoden du sist skrev inn". Er det nøyaktig? "

"Ja. Sekvensen av funksjonskall er kjent som 'anropsstakken' eller ganske enkelt 'stabelen'. Den siste funksjonen som kalles er den første funksjonen som avsluttes. La oss se nærmere på et eksempel."

Hent og vis gjeldende anropsstabel:
public class ExceptionExample
{
  public static void main(String[] args)
  {
    method1();
  }

  public static void method1()
  {
    method2();
  }

  public static void method2()
  {
    method3();
  }

  public static void method3()
  {
     StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
    for (StackTraceElement element : stackTraceElements)
    {
       System.out.println(element.getMethodName());
    }
  }
}
Resultat:
getStackTrace
method3
method2
method1
main

"OK. Jeg får alt om funksjonskall. Men hva er dette StackTraceElement?"

"Java-maskinen holder styr på alle funksjonskall. For det har den en spesiell samling – stabelen. Når en funksjon kaller en annen, legger Java-maskinen et nytt StackTraceElement- objekt på stabelen. Når en funksjon er ferdig, fjernes det elementet fra stabelen. Dette betyr at stabelen alltid lagrer oppdatert informasjon om gjeldende status for 'stabelen med funksjonskall'.

"Hvert StackTraceElement- objekt inneholder informasjon om den kalte metoden. Spesielt kan du få metodenavnet ved å bruke getMethodName- metoden."

"Du kan se hvordan dette fungerer i eksemplet ovenfor:

1) Vi får anropsstabelen.

2) Vi bruker en for-hver- løkke for å gå gjennom den. Jeg håper du ikke har glemt hva det er.

3) Vi sender ut metodenavnene til System.out ."

"Fascinerende! Og ikke for komplisert heller. Takk, Rishi!"

Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION