Jeśli wystąpi wyjątek w bloku try
, w jaki sposób wykonywane jest przeniesienie do bloku catch
? To nie jest pytanie C#/Java/C++, po prostu zastanawiam się, jak to działa wewnętrznie.W jaki sposób są implementowane bloki try/catch?
Odpowiedz
to nie jest pytanie C#/java/C++. Jak to działa wewnętrznie, jak linia wie, aby przejść oświadczenie catch.
Jak to działa wewnętrznie sprawia, że jest to prawie C#/java/C++ pytanie (ponieważ zostanie ono zaimplementowane inaczej).
W języku Java blok try instaluje się w specjalnej tabeli (w pliku klasy). Kiedy JVM zgłasza wyjątek, sprawdza tę tabelę, aby zobaczyć, gdzie znajduje się następny haczyk lub w końcu blok, do którego należy przejść.
W przypadku wystąpienia wyjątku wykonywana jest specjalna instrukcja (zwykle nazywana przerwaniem). Prowadzi to do wykonania ogólnej procedury obsługi błędów, która rozpoznaje, która jest najnowszą zainstalowaną odpowiednią obsługą wyjątku. Ten program obsługi jest następnie wykonywany.
powinien działać we wszystkich Langues trochę jak ten:
if (error_occured xy while doing things in try){
call_catch_part(error xy)
}
To jest w zasadzie analizowania podstaw języka. Możesz uzyskać wszystkie informacje na Here
Istnieje różnica w tym, w jaki sposób obsługiwane są wyjątki między natywnie kompilowanymi językami, takimi jak C++, a językami, w których kod bajtowy jest wykonywany na maszynie wirtualnej, takiej jak Java lub C#.
Kompilatory C++ zwykle generują kod, który protokołuje informacje potrzebne do obsługi wyjątków w czasie wykonywania. Dedykowana struktura danych służy do zapamiętywania wejścia/wyjścia bloków try i związanej z nimi obsługi wyjątków. Gdy wystąpi wyjątek, generowane jest przerwanie, a kontrola jest przekazywana do systemu operacyjnego, który z kolei sprawdza stos wywołań i określa, który wywoływacz wyjątków ma zostać wywołany.
Dalsze szczegóły są dość dobrze wyjaśnione w poniższym artykule przez Vishal Kochhar:
W Javie lub .NET nie ma potrzeby obciążania utrzymywanie wyjątek przetwarzania informacji ponieważ środowisko wykonawcze będzie mogło analizować kod bajtowy, aby znaleźć odpowiednią procedurę obsługi wyjątku. W związku z tym tylko wyjątki, które są faktycznie rzucane powodują obciążenie.
- 1. W jaki sposób są implementowane lokalne zmienne leniwy Scala?
- 2. W jaki sposób interfejsy Java są implementowane wewnętrznie? (vtables?)
- 3. W jaki sposób implementowane są Głowy Czatu na Facebooku?
- 4. W jaki sposób implementowane są wskaźniki percpu w jądrze systemu Linux?
- 5. W jaki sposób jeden odzyskuje wyzerowane bloki z pliku rzadkiego?
- 6. W jaki sposób stosowane są wyrażenia regularne w .NET?
- 7. Statyczne bloki - kiedy są wykonywane
- 8. W jaki sposób tworzone są literały łańcuchowe?
- 9. W jaki sposób przetwarzane są `: ~ @` i `:! @`?
- 10. W jaki sposób reprezentowane są jednostki miary?
- 11. W jaki sposób używane są słabe tablice?
- 12. W jaki sposób pliki .apk są podpisywane?
- 13. W jaki sposób są rozwiązywane symbole zewnętrzne?
- 14. W jaki sposób są zapisywane wiadomości logcat
- 15. W jaki sposób są analizowane szablony Django?
- 16. W jaki sposób wybierane są rozmiary buforów?
- 17. Dlaczego mapy C++ nie są implementowane jako próby?
- 18. Czy margines i dopełnienie są implementowane przez ContentControl?
- 19. Które funkcje Scala są wewnętrznie implementowane za pomocą odbicia?
- 20. Gdzie są przechowywane statyczne bloki CMS Magento?
- 21. W jaki sposób zmienne są przechowywane w pamięci w rekursji?
- 22. W jaki sposób zdarzenia są przypisane w .NET
- 23. W jaki sposób realizowane są generatory i coroutines w CPython?
- 24. W jaki sposób są stosowane motywy w Adobe AEM?
- 25. W jaki sposób powiązane są zmienne globalne w bibliotekach wspólnych?
- 26. W Angular2, w jaki sposób zwracane są wartości usługi?
- 27. W jaki sposób tworzone są pliki .java w katalogu android_stubs_current_intermediates?
- 28. W jaki sposób funkcje łańcuchowe są wykonywane w JQuery?
- 29. W jaki sposób CSS i DOM są zaimplementowane w przeglądarce?
- 30. W jaki sposób stosowane są odwołania w JVM Oracle?
to wszystko jest znane ... program obsługi dziecka wykonuje się najpierw .. oczekuję odpowiedzi od oprogramowania systemowego/zestawu /.net framework – selvaraj
czy możesz wyjaśnić specjalne instrukcje, że cokolwiek byś pomyślał: – selvaraj
@saj: W natywnych programach C++ używana jest specjalna instrukcja procesora 'int', która jest wykonywana i zatrzymuje program, a następnie sterowanie jest automatycznie przenoszone do obsługi przerwań systemu operacyjnego, który z kolei widzi, że jest to wyjątek C++ i przenosi kontrolę do obsługi wyjątków C++. – sharptooth