Существуют некоторые тонкие различия:
- Контекст
- Контекст вызова связан с вызывающим
- , например, параметры, которые вы используете для вызова методаявляются фактическими параметрами
- Контекст выполнения связан с вызываемым объектом
- например, параметры, которые вы используете при выполнении метода, являются формальными параметрами
- Динамическая отправка
- Вызов метода может привести к выполнению любого из многих методов
- Метод выполнения - это точно один метод выполнения
- Порядок: вызов предшествует выполнению
- Вызов метода не сразу запускает его выполнение
- Представьте, если метод удален
- Ошибка вызова может быть вызвана разрывом соединения, ошибкой обработки аргументов по проводам и т. Д.
- Метод запускается только после успешного вызова
См. Также: Обзор удаленного вызова метода .Когда вы считаете метод удаленным, разница между вызовом (запросом на начало выполнения чего-либо) и выполнением (то, что происходит где-то, если запрос успешен) становится более очевидной.
Рассмотрим такжеслучай с отражением.Это метод java.lang.reflect.Method
:
public Object invoke(Object obj, Object... args) throws
IllegalAccessException, // failure during invocation
IllegalArgumentException, // failure during invocation
InvocationTargetException // invocation was successful,
// but exception was thrown during execution
Здесь также очевидно, что вызов и выполнение - это две разные вещи.Если вам нужно больше убедительности, рассмотрите случай вызова против выполнения NullPointerException
в этом контексте отражения:
- Он может быть сгенерирован во время вызова, когда
obj == null
, когда метод является методом экземпляра - Это может быть брошено во время выполнения, в этом случае это будет обернуто как причина из
InvocationTargetException