<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Google Java Style Guide</title>
<link rel="stylesheet" href="javaguide.css">
<script src="include/styleguide.js"></script>
<link rel="shortcut icon" href="/styleguide/favicon.ico">
<script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script>
</head>
<body onload="initStyleGuide();">
<div id="content">
<h1>Google Java Style Guide</h1>
<div id="tocDiv" class="vertical_toc"></div>

<div class="main_body">

<h2 id="s1-introduction">1 Introduction</h2>

<p>This document serves as the <strong>complete</strong> definition of Google's coding standards for
source code in the Java™ Programming Language. A Java source file is described as being <em>in
Google Style</em> if and only if it adheres to the rules herein.</p>



<p>Like other programming style guides, the issues covered span not only aesthetic issues of
formatting, but other types of conventions or coding standards as well. However, this document
focuses primarily on the <strong>hard-and-fast rules</strong> that we follow universally, and
avoids giving <em>advice</em> that isn't clearly enforceable (whether by human or tool).
</p>





<h3 id="s1.1-terminology">1.1 Terminology notes</h3>

<p>In this document, unless otherwise clarified:</p>

<ol>
  <li>The term <em>class</em> is used inclusively to mean an "ordinary" class, record class, enum
  class, interface or annotation type (<code class="prettyprint lang-java">@interface</code>).</li>

  <li>The term <em>member</em> (of a class) is used inclusively to mean a nested class, field,
  method, <em>or constructor</em>; that is, all top-level contents of a class except initializers
  and comments.

  </li><li>The term <em>comment</em> always refers to <em>implementation</em> comments. We do not
  use the phrase "documentation comments", and instead use the common term "Javadoc."</li>
</ol>

<p>Other "terminology notes" will appear occasionally throughout the document.</p>

<h3 id="s1.2-guide-notes">1.2 Guide notes</h3>

<p>Example code in this document is <strong>non-normative</strong>. That is, while the examples
are in Google Style, they may not illustrate the <em>only</em> stylish way to represent the
code. Optional formatting choices made in examples should not be enforced as rules.</p>


<h2 id="s2-source-file-basics">2 Source file basics</h2>

<h3 id="s2.1-file-name">2.1 File name</h3>

<p>For a source file containing classes, the file name consists of the case-sensitive name of the
top-level class (of which there is <a href="#s3.4.1-one-top-level-class">exactly one</a>), plus the
<code>.java</code> extension.</p>

<h3 id="s2.2-file-encoding">2.2 File encoding: UTF-8</h3>

<p>Source files are encoded in <strong>UTF-8</strong>.</p>

<h3 id="s2.3-special-characters">2.3 Special characters</h3>

<h4 id="s2.3.1-whitespace-characters">2.3.1 Whitespace characters</h4>

<p>Aside from the line terminator sequence, the <strong>ASCII horizontal space
character</strong> (<strong>0x20</strong>) is the only whitespace character that appears
anywhere in a source file. This implies that:</p>

<ol>
  <li>All other whitespace characters in string and character literals are escaped.</li>

  <li>Tab characters are <strong>not</strong> used for indentation.</li>
</ol>

<h4 id="s2.3.2-special-escape-sequences">2.3.2 Special escape sequences</h4>

<p>For any character that has a
<a href="http://docs.oracle.com/javase/tutorial/java/data/characters.html">
  special escape sequence</a>
(<code class="prettyprint lang-java">\b</code>,
<code class="prettyprint lang-java">\t</code>,
<code class="prettyprint lang-java">\n</code>,
<code class="prettyprint lang-java">\f</code>,
<code class="prettyprint lang-java">\r</code>,
<code class="prettyprint lang-java">\s</code>,
<code class="prettyprint lang-java">\"</code>,
<code class="prettyprint lang-java">\'</code> and
<code class="prettyprint lang-java">\\</code>), that sequence
is used rather than the corresponding octal
(e.g. <code class="badcode">\012</code>) or Unicode
(e.g. <code class="badcode">\u000a</code>) escape.</p>

<h4 id="s2.3.3-non-ascii-characters">2.3.3 Non-ASCII characters</h4>

<p>For the remaining non-ASCII characters, either the actual Unicode character
(e.g. <code class="prettyprint lang-java">∞</code>) or the equivalent Unicode escape
(e.g. <code class="prettyprint lang-java">\u221e</code>) is used. The choice depends only on
which makes the code <strong>easier to read and understand</strong>, although Unicode escapes
outside string literals and comments are strongly discouraged.</p>

<p class="tip"><strong>Tip:</strong> In the Unicode escape case, and occasionally even when actual
Unicode characters are used, an explanatory comment can be very helpful.</p>

<p>Examples:</p>

<table>
  <tbody><tr>
    <th>Example</th>
    <th>Discussion</th>
  </tr>

  <tr>
    <td><code class="prettyprint lang-java">String unitAbbrev = "μs";</code></td>
    <td>Best: perfectly clear even without a comment.</td>
  </tr>

  <tr>
    <td><code class="prettyprint lang-java">String unitAbbrev = "\u03bcs"; // "μs"</code></td>
    <td>Allowed, but there's no reason to do this.</td>
  </tr>

  <tr>
    <td><code class="prettyprint lang-java">String unitAbbrev = "\u03bcs";
      // Greek letter mu, "s"</code></td>
    <td>Allowed, but awkward and prone to mistakes.</td>
  </tr>

  <tr>
    <td><code class="badcode">String unitAbbrev = "\u03bcs";</code></td>
    <td>Poor: the reader has no idea what this is.</td>
  </tr>

  <tr>
     <td><code class="prettyprint lang-java">return '\ufeff' + content;
       // byte order mark</code></td>
     <td>Good: use escapes for non-printable characters, and comment if necessary.</td>
  </tr>
</tbody></table>

<p class="tip"><strong>Tip:</strong> Never make your code less readable simply out of fear that
some programs might not handle non-ASCII characters properly. If that should happen, those
programs are <strong>broken</strong> and they must be <strong>fixed</strong>.</p>


<a id="filestructure"></a>
<h2 id="s3-source-file-structure">3 Source file structure</h2>

<div>
<p>An ordinary source file consists of, <strong>in order</strong>:</p>

<ol>
  <li>License or copyright information, if present</li>
  <li>Package statement</li>
  <li>Import statements</li>
  <li>Exactly one top-level class</li>
</ol>
</div>

<p><strong>Exactly one blank line</strong> separates each section that is present.</p>

<p>A <code>package-info.java</code> file is the same, but without the top-level class.</p>

<p>A <code>module-info.java</code> file does not contain a package statement and replaces the
single top-level class with a module declaration, but otherwise follows the same structure.</p>

<h3 id="s3.1-copyright-statement">3.1 License or copyright information, if present</h3>

<p>If license or copyright information belongs in a file, it belongs here.</p>



<h3 id="s3.2-package-statement">3.2 Package statement</h3>

<p>The package statement is <strong>not line-wrapped</strong>. The column limit (Section 4.4,
<a href="#s4.4-column-limit">Column limit: 100</a>) does not apply to package statements.</p>

<a id="imports"></a>
<h3 id="s3.3-import-statements">3.3 Import statements</h3>

<h4 id="s3.3.1-wildcard-imports">3.3.1 No wildcard imports</h4>

<p><strong>Wildcard imports</strong>, static or otherwise, <strong>are not used</strong>.</p>

<h4 id="s3.3.2-import-line-wrapping">3.3.2 No line-wrapping</h4>

<p>Import statements are <strong>not line-wrapped</strong>. The column limit (Section 4.4,
<a href="#s4.4-column-limit">Column limit: 100</a>) does not apply to import
statements.</p>

<h4 id="s3.3.3-import-ordering-and-spacing">3.3.3 Ordering and spacing</h4>

<p>Imports are ordered as follows:</p>

<ol>
  <li>All static imports in a single block.</li>
  <li>All non-static imports in a single block.</li>
</ol>

<p>If there are both static and non-static imports, a single blank line separates the two
blocks. There are no other blank lines between import statements.</p>

<p>Within each block the imported names appear in ASCII sort order. (<strong>Note:</strong>
this is not the same as the import <em>statements</em> being in ASCII sort order, since '.'
sorts before ';'.)</p>



<h4 id="s3.3.4-import-class-not-static">3.3.4 No static import for classes</h4>

<p>Static import is not used for static nested classes. They are imported with
normal imports.</p>

<h3 id="s3.4-class-declaration">3.4 Class declaration</h3>

<a id="oneclassperfile"></a>
<h4 id="s3.4.1-one-top-level-class">3.4.1 Exactly one top-level class declaration</h4>

<p>Each top-level class resides in a source file of its own.</p>

<a id="s3.4.2-class-member-ordering"></a>
<h4 id="s3.4.2-ordering-class-contents">3.4.2 Ordering of class contents</h4>

<p>The order you choose for the members and initializers of your class can have a great effect on
learnability. However, there's no single correct recipe for how to do it; different classes may
order their contents in different ways.</p>

<p>What is important is that each class uses <strong><em>some</em> logical order</strong>, which its
maintainer could explain if asked. For example, new methods are not just habitually added to the end
of the class, as that would yield "chronological by date added" ordering, which is not a logical
ordering.</p>



<a id="overloads"></a>
<h5 id="s3.4.2.1-overloads-never-split">3.4.2.1 Overloads: never split</h5>

<p>Methods of a class that share the same name appear in a single contiguous group with no other
members in between. The same applies to multiple constructors (which always have the same name).
This rule applies even when modifiers such as <code class="prettyprint lang-java">static</code> or
<code class="prettyprint lang-java">private</code> differ between the methods.</p>

<h3 id="s3.5-module-declaration">3.5 Module declaration</h3>

<h4 id="s3.5.1-ordering-module-directives">3.5.1 Ordering and spacing of module directives</h4>

<p>Module directives are ordered as follows:</p>

<ol>
  <li>All <code>requires</code> directives in a single block.</li>
  <li>All <code>exports</code> directives in a single block.</li>
  <li>All <code>opens</code> directives in a single block.</li>
  <li>All <code>uses</code> directives in a single block.</li>
  <li>All <code>provides</code> directives in a single block.</li>
</ol>

<p>A single blank line separates each block that is present.</p>

<h2 id="s4-formatting">4 Formatting</h2>

<p class="terminology"><strong>Terminology Note:</strong> <em>block-like construct</em> refers to
the body of a class, method or constructor. Note that, by Section 4.8.3.1 on
<a href="#s4.8.3.1-array-initializers">array initializers</a>, any array initializer
<em>may</em> optionally be treated as if it were a block-like construct.</p>

<a id="braces"></a>
<h3 id="s4.1-braces">4.1 Braces</h3>

<h4 id="s4.1.1-braces-always-used">4.1.1 Use of optional braces</h4>

<p>Braces are used with
<code class="prettyprint lang-java">if</code>,
<code class="prettyprint lang-java">else</code>,
<code class="prettyprint lang-java">for</code>,
<code class="prettyprint lang-java">do</code> and
<code class="prettyprint lang-java">while</code> statements, even when the
body is empty or contains only a single statement.</p>

<p>Other optional braces, such as those in a lambda expression, remain optional.</p>

<h4 id="s4.1.2-blocks-k-r-style">4.1.2 Nonempty blocks: K &amp; R style</h4>

<p>Braces follow the Kernighan and Ritchie style
("<a href="https://blog.codinghorror.com/new-programming-jargon/#3">Egyptian brackets</a>")
for <em>nonempty</em> blocks and block-like constructs:</p>

<ul>
  <li>No line break before the opening brace, except as detailed below.</li>

  <li>Line break after the opening brace.</li>

  <li>Line break before the closing brace.</li>

  <li>Line break after the closing brace, <em>only if</em> that brace terminates a statement or
  terminates the body of a method, constructor, or <em>named</em> class.
  For example, there is <em>no</em> line break after the brace if it is followed by
  <code class="prettyprint lang-java">else</code> or a comma.</li>
</ul>

<p>Exception: In places where these rules allow a single statement ending with a semicolon
(<code class="prettyprint lang-java">;</code>), a block of statements can appear, and the opening
brace of this block is preceded by a line break. Blocks like these are typically introduced to
limit the scope of local variables.</p>

<p>Examples:</p>

<pre class="prettyprint lang-java">return () -&gt; {
  while (condition()) {
    method();
  }
};

return new MyClass() {
  @Override public void method() {
    if (condition()) {
      try {
        something();
      } catch (ProblemException e) {
        recover();
      }
    } else if (otherCondition()) {
      somethingElse();
    } else {
      lastThing();
    }
    {
      int x = foo();
      frob(x);
    }
  }
};
</pre>

<p>A few exceptions for enum classes are given in Section 4.8.1,
<a href="#s4.8.1-enum-classes">Enum classes</a>.</p>

<a id="emptyblocks"></a>
<h4 id="s4.1.3-braces-empty-blocks">4.1.3 Empty blocks: may be concise</h4>

<p>An empty block or block-like construct may be in K &amp; R style (as described in
<a href="#s4.1.2-blocks-k-r-style">Section 4.1.2</a>). Alternatively, it may be closed immediately
after it is opened, with no characters or line break in between
(<code class="prettyprint lang-java">{}</code>), <strong>unless</strong> it is part of a
<em>multi-block statement</em> (one that directly contains multiple blocks:
<code class="prettyprint lang-java">if/else</code> or
<code class="prettyprint lang-java">try/catch/finally</code>).</p>

<p>Examples:</p>

<pre class="prettyprint lang-java">  // This is acceptable
  void doNothing() {}

  // This is equally acceptable
  void doNothingElse() {
  }
</pre>
<pre class="prettyprint lang-java badcode">  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
</pre>

<h3 id="s4.2-block-indentation">4.2 Block indentation: +2 spaces</h3>

<p>Each time a new block or block-like construct is opened, the indent increases by two
spaces. When the block ends, the indent returns to the previous indent level. The indent level
applies to both code and comments throughout the block. (See the example in Section 4.1.2,
<a href="#s4.1.2-blocks-k-r-style">Nonempty blocks: K &amp; R Style</a>.)</p>

<h3 id="s4.3-one-statement-per-line">4.3 One statement per line</h3>

<p>Each statement is followed by a line break.</p>

<a id="columnlimit"></a>
<h3 id="s4.4-column-limit">4.4 Column limit: 100</h3>

<p>Java code has a column limit of 100 characters. A "character" means any Unicode code point.
Except as noted below, any line that would exceed this limit must be line-wrapped, as explained in
Section 4.5, <a href="#s4.5-line-wrapping">Line-wrapping</a>.
</p>

<p class="tip">Each Unicode code point counts as one character, even if its display width is
greater or less. For example, if using
<a href="https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms">fullwidth characters</a>,
you may choose to wrap the line earlier than where this rule strictly requires.</p>

<p><strong>Exceptions:</strong></p>

<ol>
  <li>Lines where obeying the column limit is not possible (for example, a long URL in Javadoc,
  or a long JSNI method reference).</li>

  <li><code class="prettyprint lang-java">package</code> and
  <code class="prettyprint lang-java">import</code> statements (see Sections
  3.2 <a href="#s3.2-package-statement">Package statement</a> and
  3.3 <a href="#s3.3-import-statements">Import statements</a>).</li>

  <li>Contents of <a href="s4.8.9-text-blocks">text blocks</a>.</li>

  <li>Command lines in a comment that may be copied-and-pasted into a shell.</li>

  <li>Very long identifiers, on the rare occasions they are called for, are allowed to exceed the
  column limit. In that case, the valid wrapping for the surrounding code is as produced by


    <a href="https://github.com/google/google-java-format">google-java-format</a>.
  </li>
</ol>

<h3 id="s4.5-line-wrapping">4.5 Line-wrapping</h3>

<p class="terminology"><strong>Terminology Note:</strong> When code that might otherwise legally
occupy a single line is divided into multiple lines, this activity is called
<em>line-wrapping</em>.</p>

<p>There is no comprehensive, deterministic formula showing <em>exactly</em> how to line-wrap in
every situation. Very often there are several valid ways to line-wrap the same piece of code.</p>

<p class="note"><strong>Note:</strong> While the typical reason for line-wrapping is to avoid
overflowing the column limit, even code that would in fact fit within the column limit <em>may</em>
be line-wrapped at the author's discretion.</p>

<p class="tip"><strong>Tip:</strong> Extracting a method or local variable may solve the problem
without the need to line-wrap.</p>

<h4 id="s4.5.1-line-wrapping-where-to-break">4.5.1 Where to break</h4>

<p>The prime directive of line-wrapping is: prefer to break at a
<strong>higher syntactic level</strong>. Also:</p>

<ol>
  <li>When a line is broken at a <em>non-assignment</em> operator the break comes <em>before</em>
  the symbol. (Note that this is not the same practice used in Google style for other languages,
  such as C++ and JavaScript.)
    <ul>
      <li>This also applies to the following "operator-like" symbols:
        <ul>
          <li>the dot separator (<code class="prettyprint lang-java">.</code>)</li>
          <li>the two colons of a method reference
          (<code class="prettyprint lang-java">::</code>)</li>
          <li>an ampersand in a type bound
          (<code class="prettyprint lang-java">&lt;T extends Foo &amp; Bar&gt;</code>)</li>
          <li>a pipe in a catch block
          (<code class="prettyprint lang-java">catch (FooException | BarException e)</code>).</li>
        </ul>
      </li>
    </ul>
  </li>

  <li>When a line is broken at an <em>assignment</em> operator the break typically comes
  <em>after</em> the symbol, but either way is acceptable.
    <ul>
      <li>This also applies to the "assignment-operator-like" colon in an enhanced
      <code class="prettyprint lang-java">for</code> ("foreach") statement.</li>
    </ul>
  </li>

  <li>A method, constructor, or record-class name stays attached to the open parenthesis
  (<code class="prettyprint lang-java">(</code>) that follows it.</li>

  <li>A comma (<code class="prettyprint lang-java">,</code>) stays attached to the token that
  precedes it.</li>

  <li>A line is never broken adjacent to the arrow in a lambda or a switch rule, except that a
  break may come immediately after the arrow if the text following it consists of a single unbraced
  expression. Examples:
<pre class="prettyprint lang-java">MyLambda&lt;String, Long, Object&gt; lambda =
    (String label, Long value, Object obj) -&gt; {
      ...
    };

Predicate&lt;String&gt; predicate = str -&gt;
    longExpressionInvolving(str);

switch (x) {
  case ColorPoint(Color color, Point(int x, int y)) -&gt;
      handleColorPoint(color, x, y);
  ...
}
</pre>
  </li>
</ol>

<p class="note"><strong>Note:</strong> The primary goal for line wrapping is to have clear
code, <em>not necessarily</em> code that fits in the smallest number of lines.</p>

<a id="indentation"></a>
<h4 id="s4.5.2-line-wrapping-indent">4.5.2 Indent continuation lines at least +4 spaces</h4>

<p>When line-wrapping, each line after the first (each <em>continuation line</em>) is indented
at least +4 from the original line.</p>

<p>When there are multiple continuation lines, indentation may be varied beyond +4 as
desired. In general, two continuation lines use the same indentation level if and only if they
begin with syntactically parallel elements.</p>

<p>Section 4.6.3 on <a href="#s4.6.3-horizontal-alignment">Horizontal alignment</a> addresses
the discouraged practice of using a variable number of spaces to align certain tokens with
previous lines.</p>

<h3 id="s4.6-whitespace">4.6 Whitespace</h3>

<h4 id="s4.6.1-vertical-whitespace">4.6.1 Vertical Whitespace</h4>

<p>A single blank line always appears:</p>

<ol>
  <li><em>Between</em> consecutive members or initializers of a class: fields, constructors,
  methods, nested classes, static initializers, and instance initializers.
  <ul>
    <li><span class="exception"><strong>Exception:</strong> A blank line between two consecutive
    fields (having no other code between them) is optional. Such blank lines are used as needed to
    create <em>logical groupings</em> of fields.</span></li>
    <li><span class="exception"><strong>Exception:</strong> Blank lines between enum constants are
    covered in <a href="#s4.8.1-enum-classes">Section 4.8.1</a>.</span></li>
  </ul>
  </li>

  <li>As required by other sections of this document (such as Section 3,
  <a href="#s3-source-file-structure">Source file structure</a>, and Section 3.3,
  <a href="#s3.3-import-statements">Import statements</a>).</li>
</ol>

<p>A single blank line may also appear anywhere it improves readability, for example between
statements to organize the code into logical subsections. A blank line before the first member or
initializer, or after the last member or initializer of the class, is neither encouraged nor
discouraged.

</p><p><em>Multiple</em> consecutive blank lines are permitted, but never required (or encouraged).</p>

<h4 id="s4.6.2-horizontal-whitespace">4.6.2 Horizontal whitespace</h4>

<p>Beyond where required by the language or other style rules, and apart from literals, comments and
Javadoc, a single ASCII space also appears in the following places <strong>only</strong>.</p>

<ol>
  <li>Separating any reserved word, such as
  <code class="prettyprint lang-java">if</code>,
  <code class="prettyprint lang-java">for</code> or
  <code class="prettyprint lang-java">catch</code>, from an open parenthesis
  (<code class="prettyprint lang-java">(</code>)
  that follows it on that line</li>

  <li>Separating any reserved word, such as
  <code class="prettyprint lang-java">else</code> or
  <code class="prettyprint lang-java">catch</code>, from a closing curly brace
  (<code class="prettyprint lang-java">}</code>) that precedes it on that line</li>

  <li>Before any open curly brace
  (<code class="prettyprint lang-java">{</code>), with two exceptions:
  <ul>
    <li><code class="prettyprint lang-java">@SomeAnnotation({a, b})</code> (no space is used)</li>

    <li><code class="prettyprint lang-java">String[][] x = {{"foo"}};</code> (no space is required
    between <code class="prettyprint lang-java">{{</code>, by item 9 below)</li>
  </ul>
  </li>

  <li>On both sides of any binary or ternary operator. This also applies to the following
  "operator-like" symbols:
  <ul>
    <li>the ampersand in a conjunctive type bound:
    <code class="prettyprint lang-java">&lt;T extends Foo &amp; Bar&gt;</code></li>

    <li>the pipe for a catch block that handles multiple exceptions:
    <code class="prettyprint lang-java">catch (FooException | BarException e)</code></li>

    <li>the colon (<code class="prettyprint lang-java">:</code>) in an enhanced
    <code class="prettyprint lang-java">for</code> ("foreach") statement</li>

    <li>the arrow in a lambda expression:
    <code class="prettyprint lang-java">(String str) -&gt; str.length()</code><br>
    or switch rule:
    <code class="prettyprint lang-java">case "FOO" -&gt; bar();</code></li>
  </ul>
    but not

  <ul>
    <li>the two colons (<code class="prettyprint lang-java">::</code>) of a method reference, which
    is written like <code class="prettyprint lang-java">Object::toString</code></li>
    <li>the dot separator (<code class="prettyprint lang-java">.</code>), which is written like
    <code class="prettyprint lang-java">object.toString()</code></li>
  </ul>
  </li>

  <li>After <code class="prettyprint lang-java">,:;</code> or the closing parenthesis
  (<code class="prettyprint lang-java">)</code>) of a cast</li>

  <li>Between any content and a double slash (<code class="prettyprint lang-java">//</code>) which
  begins a comment. Multiple spaces are allowed.</li>

  <li>Between a double slash (<code class="prettyprint lang-java">//</code>) which begins a comment
  and the comment's text. Multiple spaces are allowed.</li>

  <li>Between the type and variable of a declaration:
  <code class="prettyprint lang-java">List&lt;String&gt; list</code></li>

  <li><em>Optional</em> just inside both braces of an array initializer
  <ul>
    <li><code class="prettyprint lang-java">new int[] {5, 6}</code> and
    <code class="prettyprint lang-java">new int[] { 5, 6 }</code> are both valid</li>
  </ul>
  </li>

  <li>Between a type annotation and <code class="prettyprint lang-java">[]</code> or
  <code class="prettyprint lang-java">...</code>.</li>
</ol>

<p>This rule is never interpreted as requiring or forbidding additional space at the start or
end of a line; it addresses only <em>interior</em> space.</p>

<h4 id="s4.6.3-horizontal-alignment">4.6.3 Horizontal alignment: never required</h4>

<p class="terminology"><strong>Terminology Note:</strong> <em>Horizontal alignment</em> is the
practice of adding a variable number of additional spaces in your code with the goal of making
certain tokens appear directly below certain other tokens on previous lines.</p>

<p>This practice is permitted, but is <strong>never required</strong> by Google Style. It is not
even required to <em>maintain</em> horizontal alignment in places where it was already used.</p>

<p>Here is an example without alignment, then using alignment:</p>

<pre class="prettyprint lang-java">private int x; // this is fine
private Color color; // this too

private int   x;      // permitted, but future edits
private Color color;  // may leave it unaligned
</pre>

<p class="tip"><strong>Tip:</strong> Alignment can aid readability, but attempts to preserve
alignment for its own sake create future problems. For example, consider a change that touches only
one line. If that change disrupts the previous alignment, it's important **not** to introduce
additional changes on nearby lines simply to realign them. Introducing formatting changes on
otherwise unaffected lines corrupts version history, slows down reviewers, and exacerbates merge
conflicts. These practical concerns
take priority over alignment.</p>

<a id="parentheses"></a>
<h3 id="s4.7-grouping-parentheses">4.7 Grouping parentheses: recommended</h3>

<p>Optional grouping parentheses are omitted only when author and reviewer agree that there is no
reasonable chance the code will be misinterpreted without them, nor would they have made the code
easier to read. It is <em>not</em> reasonable to assume that every reader has the entire Java
operator precedence table memorized.</p>

<h3 id="s4.8-specific-constructs">4.8 Specific constructs</h3>

<h4 id="s4.8.1-enum-classes">4.8.1 Enum classes</h4>

<p>After each comma that follows an enum constant, a line break is optional. Additional blank
lines (usually just one) are also allowed. This is one possibility:

</p><pre class="prettyprint lang-java">private enum Answer {
  YES {
    @Override public String toString() {
      return "yes";
    }
  },

  NO,
  MAYBE
}
</pre>

<p>An enum class with no methods and no documentation on its constants may optionally be formatted
as if it were an array initializer (see Section 4.8.3.1 on
<a href="#s4.8.3.1-array-initializers">array initializers</a>).</p>

<pre class="prettyprint lang-java">private enum Suit { CLUBS, HEARTS, SPADES, DIAMONDS }
</pre>

<p>Since enum classes <em>are classes</em>, all other rules for formatting classes apply.</p>

<a id="localvariables"></a>
<h4 id="s4.8.2-variable-declarations">4.8.2 Variable declarations</h4>

<h5 id="s4.8.2.1-variables-per-declaration">4.8.2.1 One variable per declaration</h5>

<p>Every variable declaration (field or local) declares only one variable: declarations such as
<code class="badcode">int a, b;</code> are not used.</p>

<p><strong>Exception:</strong> Multiple variable declarations are acceptable in the header of a
<code class="prettyprint lang-java">for</code> loop.</p>

<h5 id="s4.8.2.2-variables-limited-scope">4.8.2.2 Declared when needed</h5>

<p>Local variables are <strong>not</strong> habitually declared at the start of their containing
block or block-like construct. Instead, local variables are declared close to the point they are
first used (within reason), to minimize their scope. Local variable declarations typically have
initializers, or are initialized immediately after declaration.</p>

<h4 id="s4.8.3-arrays">4.8.3 Arrays</h4>

<h5 id="s4.8.3.1-array-initializers">4.8.3.1 Array initializers: can be "block-like"</h5>

<p>Any array initializer may <em>optionally</em> be formatted as if it were a "block-like
construct." For example, the following are all valid (<strong>not</strong> an exhaustive
list):</p>

<pre class="prettyprint lang-java">new int[] {           new int[] {
  0, 1, 2, 3            0,
}                       1,
                        2,
new int[] {             3,
  0, 1,               }
  2, 3
}                     new int[]
                          {0, 1, 2, 3}
</pre>

<h5 id="s4.8.3.2-array-declarations">4.8.3.2 No C-style array declarations</h5>

<p>The square brackets form a part of the <em>type</em>, not the variable:
<code class="prettyprint lang-java">String[] args</code>, not
<code class="badcode">String args[]</code>.</p>

<h4 id="s4.8.4-switch">4.8.4 Switch statements and expressions</h4>



<p>For historical reasons, the Java language has two distinct syntaxes for <code class="prettyprint lang-java">switch</code>, which we can call <em>old-style</em> and
<em>new-style</em>. New-style switches use an arrow
(<code class="prettyprint lang-java">-&gt;</code>) after the switch labels, while old-style switches
use a colon (<code class="prettyprint lang-java">:</code>).

</p><p class="terminology"><strong>Terminology Note:</strong> Inside the braces of a
<em>switch block</em> are either one or more <em>switch rules</em> (new-style);
or one or more <em>statement groups</em> (old-style). A <em>switch
rule</em> consists of a <em>switch label</em> (<code class="prettyprint lang-java">case ...</code>
or <code class="prettyprint lang-java">default</code>) followed by <code class="prettyprint lang-java">-&gt;</code> and an expression, block, or <code class="prettyprint
lang-java">throw</code>. A statement group consists of one or more switch labels each followed by
a colon, then one or more statements, or, for the <em>last</em> statement group, <em>zero</em> or
more statements. (These definitions match the Java Language Specification,
<a href="https://docs.oracle.com/javase/specs/jls/se21/html/jls-14.html#jls-14.11">§14.11</a>.)</p>

<h5 id="s4.8.4.1-switch-indentation">4.8.4.1 Indentation</h5>

<p>As with any other block, the contents of a switch block are indented +2. Each switch label
starts with this +2 indentation.</p>

<p>In a new-style switch, a switch rule can be written on a single line if it otherwise follows
Google style. (It must not exceed the column limit, and if it contains a non-empty block then
there must be a line break after <code class="prettyprint lang-java">{</code>.) The line-wrapping
rules of <a href="#s4.5-line-wrapping">Section 4.5</a> apply, including the +4 indent for
continuation lines. For a switch rule with a non-empty block after the arrow, the same rules apply
as for blocks elsewhere: lines between <code class="prettyprint lang-java">{</code> and
<code class="prettyprint lang-java">}</code> are indented a further +2 relative to the line with the
switch label.

</p><pre class="prettyprint lang-java">switch (number) {
  case 0, 1 -&gt; handleZeroOrOne();
  case 2 -&gt;
      handleTwoWithAnExtremelyLongMethodCallThatWouldNotFitOnTheSameLine();
  default -&gt; {
    logger.atInfo().log("Surprising number %s", number);
    handleSurprisingNumber(number);
  }
}
</pre>

<p>In an old-style switch, the colon of each switch label is followed by a line break. The
statements within a statement group start with a further +2 indentation.</p>

<a id="fallthrough"></a>
<h5 id="s4.8.4.2-switch-fall-through">4.8.4.2 Fall-through: commented</h5>

<p>Within an old-style switch block, each statement group either terminates abruptly (with a
<code class="prettyprint lang-java">break</code>,
<code class="prettyprint lang-java">continue</code>,
<code class="prettyprint lang-java">return</code> or thrown exception), or is marked with a comment
to indicate that execution will or <em>might</em> continue into the next statement group. Any
comment that communicates the idea of fall-through is sufficient (typically
<code class="prettyprint lang-java">// fall through</code>). This special comment is not required in
the last statement group of the switch block. Example:</p>

<pre class="prettyprint lang-java">switch (input) {
  case 1:
  case 2:
    prepareOneOrTwo();
  // fall through
  case 3:
    handleOneTwoOrThree();
    break;
  default:
    handleLargeNumber(input);
}
</pre>

<p>Notice that no comment is needed after <code class="prettyprint lang-java">case 1:</code>, only
at the end of the statement group.</p>

<p>There is no fall-through in new-style switches.</p>

<h5 id="s4.8.4.3-switch-default">4.8.4.3 Exhaustiveness and presence of the <code>default</code> label</h5>

<p>The Java language requires switch expressions and many kinds of switch statements to be
<em>exhaustive</em>. That effectively means that every possible value that could be switched on will
be matched by one of the switch labels. A switch is exhaustive if it has a <code class="prettyprint lang-java">default</code> label, but also for example if the value being switched
on is an enum and every value of the enum is matched by a switch label. Google Style requires
<em>every</em> switch to be exhaustive, even those where the language itself does not require it.
This may require adding a <code class="prettyprint lang-java">default</code> label, even if it
contains no code.</p>

<h5 id="s4.8.4.4-switch-expressions">4.8.4.4 Switch expressions</h5>

<p>Switch expressions must be new-style switches:</p>

<pre class="prettyprint lang-java">  return switch (list.size()) {
    case 0 -&gt; "";
    case 1 -&gt; list.getFirst();
    default -&gt; String.join(", ", list);
  };
</pre>

<a id="annotations"></a>
<h4 id="s4.8.5-annotations">4.8.5 Annotations</h4>

<h5 id="s4.8.5.1-type-use-annotation-style">4.8.5.1 Type-use annotations</h5>

<p>Type-use annotations appear immediately before the annotated type. An annotation is a type-use
annotation if it is meta-annotated with
<code class="prettyprint lang-java">@Target(ElementType.TYPE_USE)</code>. Example:</p>

<pre class="prettyprint lang-java">final @Nullable String name;

public @Nullable Person getPersonByName(String name);
</pre>

<h5 id="s4.8.5.2-class-annotation-style">4.8.5.2 Class, package, and module annotations</h5>

<p>Annotations applying to a class, package, or module declaration appear immediately after the
documentation block, and each annotation is listed on a line of its own (that is, one annotation
per line). These line breaks do not constitute line-wrapping (Section
4.5, <a href="#s4.5-line-wrapping">Line-wrapping</a>), so the indentation level is not
increased. Examples:</p>

<pre class="prettyprint lang-java">/** This is a class. */
@Deprecated
@CheckReturnValue
public final class Frozzler { ... }
</pre>
<pre class="prettyprint lang-java">/** This is a package. */
@Deprecated
@CheckReturnValue
package com.example.frozzler;
</pre>
<pre class="prettyprint lang-java">/** This is a module. */
@Deprecated
@SuppressWarnings("CheckReturnValue")
module com.example.frozzler { ... }
</pre>

<h5 id="s4.8.5.3-method-annotation-style">4.8.5.3 Method and constructor annotations</h5>

<p>The rules for annotations on method and constructor declarations are the same as the
<a href="#s4.8.5.2-class-annotation-style">previous section</a>. Example: </p>

<pre class="prettyprint lang-java">@Deprecated
@Override
public String getNameIfPresent() { ... }
</pre>

<p class="exception"><strong>Exception:</strong> A <em>single</em> parameterless annotation
<em>may</em> instead appear together with the first line of the signature, for example:</p>

<pre class="prettyprint lang-java">@Override public int hashCode() { ... }
</pre>

<h5 id="s4.8.5.4-field-annotation-style">4.8.5.4 Field annotations</h5>

<p>Annotations applying to a field also appear immediately after the documentation block, but in
this case, <em>multiple</em> annotations (possibly parameterized) may be listed on the same line;
for example:</p>

<pre class="prettyprint lang-java">@Partial @Mock DataLoader loader;
</pre>

<h5 id="s4.8.5.5-local-parameter-annotation-style">4.8.5.5 Parameter and local variable annotations</h5>

<p>There are no specific rules for formatting annotations on parameters or local variables (except,
of course, when the annotation is a type-use annotation).</p>

<a id="comments"></a>
<h4 id="s4.8.6-comments">4.8.6 Comments</h4>

<p>This section addresses <em>implementation comments</em>. Javadoc is addressed separately in
Section 7, <a href="#s7-javadoc">Javadoc</a>.</p>

<p>Any line break may be preceded by arbitrary whitespace followed by an implementation comment.
Such a comment renders the line non-blank.</p>

<h5 id="s4.8.6.1-block-comment-style">4.8.6.1 Block comment style</h5>

<p>Block comments are indented at the same level as the surrounding code. They may be in
<code class="prettyprint lang-java">/* ... */</code> style or
<code class="prettyprint lang-java">// ...</code> style. For multi-line
<code class="prettyprint lang-java">/* ... */</code> comments, subsequent lines must start with
<code>*</code> aligned with the <code>*</code> on the previous line.</p>

<pre class="prettyprint lang-java">/*
 * This is          // And so           /* Or you can
 * okay.            // is this.          * even do this. */
 */
</pre>


<p>Comments are not enclosed in boxes drawn with asterisks or other characters.</p>

<p class="tip"><strong>Tip:</strong> When writing multi-line comments, use the
<code class="prettyprint lang-java">/* ... */</code> style if you want automatic code formatters to
re-wrap the lines when necessary (paragraph-style). Most formatters don't re-wrap lines in
<code class="prettyprint lang-java">// ...</code> style comment blocks.</p>

<a id="todo"></a>
<h5 id="s4.8.6.2-todo-comments">4.8.6.2 TODO comments</h5>



<div>
<p>Use <code>TODO</code> comments for code that is temporary, a short-term solution, or good-enough
  but not perfect.</p>

<p>A <code>TODO</code> comment begins with the word <code>TODO</code> in all caps, a following
  colon, and a link to a resource that contains the context, ideally a bug reference. A bug
  reference is preferable because bugs are tracked and have follow-up comments. Follow this piece of
  context with an explanatory string introduced with a hyphen <code>-</code>.</p>

<p>The purpose is to have a consistent <code>TODO</code> format that can be searched to find out how
  to get more details.</p>

<pre class="good">// TODO: crbug.com/12345678 - Remove this after the 2047q4 compatibility window expires.
</pre>

<p>Avoid adding TODOs that refer to an individual or team as the context:</p>

<pre class="bad">// TODO: @yourusername - File an issue and use a '*' for repetition.
</pre>

<p>If your <code>TODO</code> is of the form "At a future date do something" make sure that you
  either include a very specific date ("Fix by November 2005") or a very specific event ("Remove
  this code when all clients can handle XML responses.").</p>
</div>

<a id="modifiers"></a>
<h4 id="s4.8.7-modifiers">4.8.7 Modifiers</h4>

<p>Class and member modifiers, when present, appear in the order
recommended by the Java Language Specification:
</p>

<pre>public protected private abstract default static final sealed non-sealed
  transient volatile synchronized native strictfp
</pre>

<p>Modifiers on <code>requires</code> module directives, when present, appear in the following
order:</p>

<pre>transitive static</pre>

<h4 id="s4.8.8-numeric-literals">4.8.8 Numeric Literals</h4>

<p><code>long</code>-valued integer literals use an uppercase <code>L</code> suffix, never
lowercase (to avoid confusion with the digit <code>1</code>). For example, <code>3000000000L</code>
rather than <code class="badcode">3000000000l</code>.</p>

<h4 id="s4.8.9-text-blocks">4.8.9 Text Blocks</h4>

<p>The opening <code>"""</code> of a text block is always on a new line. That line may
  either follow the same indentation rules as other constructs, or it may have no indentation at all
  (so it starts at the left margin). The closing <code>"""</code> is on a new line
  with the same indentation as the opening <code>"""</code>, and may be followed on the
  same line by further code. Each line of text in the text block is indented at least as much as the
  opening and closing <code>"""</code>. (If a line is indented further, then the string
  literal defined by the text block will have space at the start of that line.)

</p><p>The contents of a text block may exceed the <a href="#columnlimit">column limit</a>.

<a id="naming"></a>
</p><h2 id="s5-naming">5 Naming</h2>

<h3 id="s5.1-identifier-names">5.1 Rules common to all identifiers</h3>

<p>Identifiers use only ASCII letters and digits, and, in a small number of cases noted below,
underscores. Thus each valid identifier name is matched by the regular expression
<code>\w+</code> .</p>

<p>In Google Style, special prefixes or suffixes are <strong>not</strong> used. For example, these
names are not Google Style: <code class="badcode">name_</code>, <code class="badcode">mName</code>,
<code class="badcode">s_name</code> and <code class="badcode">kName</code>.</p>



<h3 id="s5.2-specific-identifier-names">5.2 Rules by identifier type</h3>

<h4 id="s5.2.1-package-names">5.2.1 Package and module names</h4>

<p>Package and module names use only lowercase letters and digits (no underscores). Consecutive
words are simply concatenated together. For example, <code>com.example.deepspace</code>, not
<code class="badcode">com.example.deepSpace</code> or
<code class="badcode">com.example.deep_space</code>.</p>

<h4 id="s5.2.2-class-names">5.2.2 Class names</h4>

<p>Class names are written in <a href="#s5.3-camel-case">UpperCamelCase</a>.</p>

<p>Class names are typically nouns or noun phrases. For example,
<code class="prettyprint lang-java">Character</code> or
<code class="prettyprint lang-java">ImmutableList</code>. Interface names may also be nouns or
noun phrases (for example, <code class="prettyprint lang-java">List</code>), but may sometimes be
adjectives or adjective phrases instead (for example,
<code class="prettyprint lang-java">Readable</code>).</p>

<p>There are no specific rules or even well-established conventions for naming annotation types.</p>

<p>A <em>test</em> class has a name that ends with <code class="prettyprint lang-java">Test</code>,
for example, <code class="prettyprint lang-java">HashIntegrationTest</code>.
If it covers a single class, its name is the name of that class
plus <code class="prettyprint lang-java">Test</code>, for example <code class="prettyprint
  lang-java">HashImplTest</code>.</p>

<h4 id="s5.2.3-method-names">5.2.3 Method names</h4>

<p>Method names are written in <a href="#s5.3-camel-case">lowerCamelCase</a>.</p>

<p>Method names are typically verbs or verb phrases. For example,
<code class="prettyprint lang-java">sendMessage</code> or
<code class="prettyprint lang-java">stop</code>.</p>

<p>Underscores may appear in JUnit <em>test</em> method names to separate logical components of the
name, with <em>each</em> component written in <a href="#s5.3-camel-case">lowerCamelCase</a>, for
example <code class="prettyprint lang-java">transferMoney_deductsFromSource</code>. There is no One
Correct Way to name test methods.</p>

<a id="constants"></a>
<h4 id="s5.2.4-constant-names">5.2.4 Constant names</h4>

<p>Constant names use <code class="prettyprint lang-java">UPPER_SNAKE_CASE</code>: all uppercase
letters, with each word separated from the next by a single underscore. But what <em>is</em> a
constant, exactly?</p>

<p>Constants are static final fields whose contents are deeply immutable and whose methods have no
detectable side effects. Examples include primitives, strings, immutable value classes, and anything
set to <code>null</code>. If any of the instance's observable state can change, it is not a
constant. Merely <em>intending</em> to never mutate the object is not enough. Examples:</p>

<pre class="prettyprint lang-java">// Constants
static final int NUMBER = 5;
static final ImmutableList&lt;String&gt; NAMES = ImmutableList.of("Ed", "Ann");
static final Map&lt;String, Integer&gt; AGES = ImmutableMap.of("Ed", 35, "Ann", 32);
static final Joiner COMMA_JOINER = Joiner.on(','); // because Joiner is immutable
static final SomeMutableType[] EMPTY_ARRAY = {};

// Not constants
static String nonFinal = "non-final";
final String nonStatic = "non-static";
static final Set&lt;String&gt; mutableCollection = new HashSet&lt;String&gt;();
static final ImmutableSet&lt;SomeMutableType&gt; mutableElements = ImmutableSet.of(mutable);
static final ImmutableMap&lt;String, SomeMutableType&gt; mutableValues =
    ImmutableMap.of("Ed", mutableInstance, "Ann", mutableInstance2);
static final Logger logger = Logger.getLogger(MyClass.getName());
static final String[] nonEmptyArray = {"these", "can", "change"};
</pre>

<p>These names are typically nouns or noun phrases.</p>

<h4 id="s5.2.5-non-constant-field-names">5.2.5 Non-constant field names</h4>

<p>Non-constant field names (static or otherwise) are written
in <a href="#s5.3-camel-case">lowerCamelCase</a>.</p>

<p>These names are typically nouns or noun phrases.  For example,
<code class="prettyprint lang-java">computedValues</code> or
<code class="prettyprint lang-java">index</code>.</p>

<h4 id="s5.2.6-parameter-names">5.2.6 Parameter names</h4>

<p>Parameter names are written in <a href="#s5.3-camel-case">lowerCamelCase</a>.</p>

<p>One-character parameter names in public methods should be avoided.</p>

<h4 id="s5.2.7-local-variable-names">5.2.7 Local variable names</h4>

<p>Local variable names are written in <a href="#s5.3-camel-case">lowerCamelCase</a>.</p>

<p>Even when final and immutable, local variables are not considered to be constants, and should not
be styled as constants.</p>

<h4 id="s5.2.8-type-variable-names">5.2.8 Type variable names</h4>

<p>Each type variable is named in one of two styles:</p>

<ul>
  <li>A single capital letter, optionally followed by a single numeral (such as
  <code class="prettyprint lang-java">E</code>, <code class="prettyprint lang-java">T</code>,
  <code class="prettyprint lang-java">X</code>, <code class="prettyprint lang-java">T2</code>)
  </li>

  <li>A name in the form used for classes (see Section 5.2.2,
  <a href="#s5.2.2-class-names">Class names</a>), followed by the capital letter
  <code class="prettyprint lang-java">T</code> (examples:
  <code class="prettyprint lang-java">RequestT</code>,
  <code class="prettyprint lang-java">FooBarT</code>).</li>
</ul>

<a id="acronyms"></a>
<a id="camelcase"></a>
<h3 id="s5.3-camel-case">5.3 Camel case: defined</h3>

<p>Sometimes there is more than one reasonable way to convert an English phrase into camel case,
such as when acronyms or unusual constructs like "IPv6" or "iOS" are present. To improve
predictability, Google Style specifies the following (nearly) deterministic scheme.</p>

<p>Beginning with the prose form of the name:</p>

<ol>
  <li>Convert the phrase to plain ASCII and remove any apostrophes. For example, "Müller's
  algorithm" might become "Muellers algorithm".</li>

  <li>Divide this result into words, splitting on spaces and any remaining punctuation (typically
  hyphens).

  <ul>
    <li><em>Recommended:</em> if any word already has a conventional camel-case appearance in common
    usage, split this into its constituent parts (e.g., "AdWords" becomes "ad words"). Note
    that a word such as "iOS" is not really in camel case <em>per se</em>; it defies <em>any</em>
    convention, so this recommendation does not apply.</li>
  </ul>
  </li>

  <li>Now lowercase <em>everything</em> (including acronyms), then uppercase only the first
  character of:
  <ul>
    <li>... each word, to yield <em>upper camel case</em>, or</li>
    <li>... each word except the first, to yield <em>lower camel case</em></li>
  </ul>
  </li>

  <li>Finally, join all the words into a single identifier. Note that the casing of the original
  words is almost entirely disregarded.</li>
</ol>

<p>In very rare circumstances (for example, multipart version numbers), you may need to use
underscores to separate adjacent numbers, since numbers do not have upper and lower case variants.
</p>

<p>Examples:</p>

<table>
  <tbody><tr>
    <th>Prose form</th>
    <th>Correct</th>
    <th>Incorrect</th>
  </tr>
  <tr>
    <td>"XML HTTP request"</td>
    <td><code class="prettyprint lang-java">XmlHttpRequest</code></td>
    <td><code class="badcode">XMLHTTPRequest</code></td>
  </tr>
  <tr>
    <td>"new customer ID"</td>
    <td><code class="prettyprint lang-java">newCustomerId</code></td>
    <td><code class="badcode">newCustomerID</code></td>
  </tr>
  <tr>
    <td>"inner stopwatch"</td>
    <td><code class="prettyprint lang-java">innerStopwatch</code></td>
    <td><code class="badcode">innerStopWatch</code></td>
  </tr>
  <tr>
    <td>"supports IPv6 on iOS?"</td>
    <td><code class="prettyprint lang-java">supportsIpv6OnIos</code></td>
    <td><code class="badcode">supportsIPv6OnIOS</code></td>
  </tr>
  <tr>
    <td>"YouTube importer"</td>
    <td><code class="prettyprint lang-java">YouTubeImporter</code><br>
        <code class="prettyprint lang-java">YoutubeImporter</code>*</td>
    <td></td>
  </tr>
  <tr>
    <td>"Turn on 2SV"</td>
    <td><code class="prettyprint lang-java">turnOn2sv</code></td>
    <td><code class="badcode">turnOn2Sv</code></td>
  </tr>
  <tr>
    <td>"Guava 33.4.6"</td>
    <td><code class="prettyprint lang-java">guava33_4_6</code></td>
    <td><code class="badcode">guava3346</code></td>
  </tr>
</tbody></table>

<p>*Acceptable, but not recommended.</p>

<p class="note"><strong>Note:</strong> Some words are ambiguously hyphenated in the English
language: for example "nonempty" and "non-empty" are both correct, so the method names
<code class="prettyprint lang-java">checkNonempty</code> and
<code class="prettyprint lang-java">checkNonEmpty</code> are likewise both correct.</p>


<h2 id="s6-programming-practices">6 Programming Practices</h2>

<h3 id="s6.1-override-annotation">6.1 <code>@Override</code>: always used</h3>

<p>A method is marked with the <code class="prettyprint lang-java">@Override</code> annotation
whenever it is legal.  This includes a class method overriding a superclass method, a class method
implementing an interface method, an interface method respecifying a superinterface method, and an
explicitly declared accessor method for a record component.</p>

<p class="exception"><strong>Exception:</strong>
<code class="prettyprint lang-java">@Override</code> may be omitted when the parent method is
<code class="prettyprint lang-java">@Deprecated</code>.</p>

<a id="caughtexceptions"></a>
<h3 id="s6.2-caught-exceptions">6.2 Caught exceptions: not ignored</h3>

<p>It is very rarely correct to do nothing in response to a caught
exception. (Typical responses are to log it, or if it is considered "impossible", rethrow it as an
<code class="prettyprint lang-java">AssertionError</code>.)</p>

<p>When it truly is appropriate to take no action whatsoever in a catch block, the reason this is
justified is explained in a comment.</p>

<pre class="prettyprint lang-java">try {
  int i = Integer.parseInt(response);
  return handleNumericResponse(i);
} catch (NumberFormatException ok) {
  // it's not numeric; that's fine, just continue
}
return handleTextResponse(response);
</pre>

<h3 id="s6.3-static-members">6.3 Static members: qualified using class</h3>

<p>When a reference to a static class member must be qualified, it is qualified with that class's
name, not with a reference or expression of that class's type.</p>

<pre class="prettyprint lang-java">Foo aFoo = ...;
Foo.aStaticMethod(); // good
<span class="badcode">aFoo.aStaticMethod();</span> // bad
<span class="badcode">somethingThatYieldsAFoo().aStaticMethod();</span> // very bad
</pre>

<a id="finalizers"></a>
<h3 id="s6.4-finalizers">6.4 Finalizers: not used</h3>

<p>Do not override <code class="prettyprint lang-java">Object.finalize</code>. Finalization support
is <a href="https://openjdk.org/jeps/421"><em>scheduled for removal</em></a>.</p>


<a id="javadoc"></a>
<h2 id="s7-javadoc">7 Javadoc</h2>



<h3 id="s7.1-javadoc-formatting">7.1 Formatting</h3>

<h4 id="s7.1.1-javadoc-multi-line">7.1.1 General form</h4>

<p>The <em>basic</em> formatting of Javadoc blocks is as seen in this example:</p>

<pre class="prettyprint lang-java">/**
 * Multiple lines of Javadoc text are written here,
 * wrapped normally...
 */
public int method(String p1) { ... }
</pre>

<p>... or in this single-line example:</p>

<pre class="prettyprint lang-java">/** An especially short bit of Javadoc. */
</pre>

<p>The basic form is always acceptable. The single-line form may be substituted when the entirety
of the Javadoc block (including comment markers) can fit on a single line. Note that this only
applies when there are no block tags such as <code>@param</code>.</p>

<h4 id="s7.1.2-javadoc-paragraphs">7.1.2 Paragraphs</h4>

<p>One blank line—that is, a line containing only the aligned leading asterisk
(<code>*</code>)—appears between paragraphs, and before the group of block tags if present.
Each paragraph except the first has <code>&lt;p&gt;</code> immediately before the first word, with
no space after it. HTML tags for other block-level elements, such as <code>&lt;ul&gt;</code> or
<code>&lt;table&gt;</code>, are <em>not</em> preceded with <code>&lt;p&gt;</code>.</p>

<a id="s7.1.3-javadoc-at-clauses"></a>

<h4 id="s7.1.3-javadoc-block-tags">7.1.3 Block tags</h4>

<p>Any of the standard "block tags" that are used appear in the order <code>@param</code>,
<code>@return</code>, <code>@throws</code>, <code>@deprecated</code>, and these four types never
appear with an empty description. When a block tag doesn't fit on a single line, continuation lines
are indented four (or more) spaces from the position of the <code>@</code>.
</p>

<h3 id="s7.2-summary-fragment">7.2 The summary fragment</h3>

<p>Each Javadoc block begins with a brief <strong>summary fragment</strong>. This
fragment is very important: it is the only part of the text that appears in certain contexts such as
class and method indexes.</p>

<p>This is a fragment—a noun phrase or verb phrase, not a complete sentence. It does
<strong>not</strong> begin with <code class="badcode">A {@code Foo} is a...</code>, or
<code class="badcode">This method returns...</code>, nor does it form a complete imperative sentence
like <code class="badcode">Save the record.</code>. However, the fragment is capitalized and
punctuated as if it were a complete sentence.</p>

<p class="tip"><strong>Tip:</strong> A common mistake is to write simple Javadoc in the form
<code class="badcode prettyprint lang-java">/** @return the customer ID */</code>. This is
incorrect, and should be changed to
<code class="prettyprint lang-java">/** Returns the customer ID. */</code> or
<code class="prettyprint lang-java">/** {@return the customer ID} */</code>.</p>

<a id="s7.3.3-javadoc-optional"></a>
<h3 id="s7.3-javadoc-where-required">7.3 Where Javadoc is used</h3>

<p>At the <em>minimum</em>, Javadoc is present for every <em>visible</em> class, member, or record
component, with a few exceptions noted below. A top-level class is visible if it is <code class="prettyprint lang-java">public</code>; a member is visible if it is <code class="prettyprint
lang-java">public</code> or <code class="prettyprint lang-java">protected</code> and its containing
class is visible; and a record component is visible if its containing record is visible.

</p><p>Additional Javadoc content may also be present, as explained in Section 7.3.4,
<a href="#s7.3.4-javadoc-non-required">Non-required Javadoc</a>.</p>

<h4 id="s7.3.1-javadoc-exception-self-explanatory">7.3.1 Exception: self-explanatory members</h4>

<p>Javadoc is optional for "simple, obvious" members and record components, such as a
<code class="prettyprint lang-java">getFoo()</code> method, <em>if</em> there <em>really and
truly</em> is nothing else worthwhile to say but "the foo".</p>

<p class="note"><strong>Important:</strong> it is not appropriate to cite this exception to justify
omitting relevant information that a typical reader might need to know. For example, for a record
component named <code class="prettyprint lang-java">canonicalName</code>, don't omit its
documentation (with the rationale that it would say only
<code class="badcode">@param canonicalName the canonical name</code>) if a typical reader may have
no idea what the term "canonical name" means!</p>

<h4 id="s7.3.2-javadoc-exception-overrides">7.3.2 Exception: overrides</h4>

<p>Javadoc is not always present on a method that overrides a supertype method.

</p>



<h4 id="s7.3.4-javadoc-non-required">7.3.4 Non-required Javadoc</h4>

<p>Other classes, members, and record components have Javadoc <em>as needed or desired</em>.

</p><p>Whenever an implementation comment would be used to define the overall purpose or behavior of a
class or member, that comment is written as Javadoc instead (using <code>/**</code>).</p>

<p>Non-required Javadoc is not strictly required to follow the formatting rules of Sections
7.1.1, 7.1.2, 7.1.3, and 7.2, though it is of course recommended.</p>



</div>
</div>
</body>
</html>
