Термин «защитное программирование» означает написание кода таким образом, чтобы он мог восстанавливаться после возникновения ошибок или чтобы он вообще избегал ошибок. Например:
private String name;
public void setName(String name) {
}
Как вы обрабатываете имя == ноль? Вы бросаете исключение или принимаете его? Если не имеет смысла иметь объект без имени, вы должны выбросить исключение. А как насчет имени == ""?
Но ... позже вы напишите редактор. При настройке пользовательского интерфейса вы обнаружите, что существуют ситуации, когда пользователь может решить убрать имя или имя может стать пустым, пока пользователь его редактирует.
Другой пример:
public boolean isXXX (String s) {
}
Здесь защитная стратегия часто состоит в том, чтобы возвращать false, когда s == null (избегайте NPE, когда можете).
Или:
public String getName() {
}
Защитный программист может вернуть "", если name == null, чтобы избежать NPE в вызывающем коде.