Defensive Programming in Java: Fundamentals