try
nie ma prawie żadnych kosztów. Zamiast wykonywać konfigurację try
w czasie wykonywania, metadane kodu są ustrukturyzowane w czasie kompilacji, tak że kiedy zgłoszony jest wyjątek, wykonuje on stosunkowo kosztowną operację wchodzenia na stos i sprawdzania, czy try
istnieją jakieś bloki, które mogłyby to wychwycić wyjątek. Z punktu widzenia laika try
równie dobrze może być bezpłatny. W rzeczywistości rzuca wyjątek, który cię kosztuje - ale dopóki nie wprowadzisz setek lub tysięcy wyjątków, nadal nie zauważysz kosztu.
try
wiąże się z tym niewielkie koszty. Java nie może dokonać optymalizacji kodu w try
bloku, który w przeciwnym razie by zrobił. Na przykład Java często zmienia kolejność instrukcji w metodzie, aby przyspieszyć jej działanie - ale Java musi także zagwarantować, że jeśli zostanie zgłoszony wyjątek, wykonanie metody jest obserwowane tak, jakby jej instrukcje zapisane w kodzie źródłowym były wykonywane w kolejności do jakiejś linii.
Ponieważ w try
bloku może zostać zgłoszony wyjątek (w dowolnej linii w bloku try! Niektóre wyjątki są zgłaszane asynchronicznie, na przykład przez wywołanie stop
wątku (który jest przestarzały), a nawet poza tym OutOfMemoryError może się zdarzyć prawie wszędzie), a jednak to może zostać przechwycony, a kod będzie kontynuowany po tej samej metodzie, trudniej jest uzasadnić optymalizacje, które można wprowadzić, więc jest mniej prawdopodobne, że tak się stanie. (Ktoś musiałby zaprogramować kompilator, aby to robił, uzasadniał i gwarantował poprawność, itp. Byłoby to wielkim problemem dla czegoś, co ma być „wyjątkowe”). Ale w praktyce nie zauważysz takich rzeczy.