dered “uninitialized”. Trying to build an uninitialized message will throw a <code>RuntimeException</code>. Parsing an uninitialized message will throw an <code>IOException</code>. Other than this, a required field behaves exactly like an optional field.</li>
  <li><code>optional</code>: the field may or may not be set. If an optional field value isn’t set, a default value is used. For simple types, you can specify your own default value, as we’ve done for the phone number type in the example. Other