Пример на Java: предположим нужно создать экземпляр класса Example через функцию. В этом классе прописываешь функцию static Example createObject() {}, которую в коде вызываешь как-то так:
Example e = Example.createObject();
Теперь зачем такое делать? Один из вариантов: потому что конструкторы не умеют бросать исключения, а в случае проблемы тебе нужно кинуть исключение.