Skip to main content

Java code style

Topics/tags: The joy of code, Java, technical

As I’ve noted in an earlier musing, when I teach most programming languages, I encourage students to follow a consistent style. As I suggest to my students, consistent formatting makes code more readable. I don’t usually have them choose the style themselves; rather, since I know that they will likely have to adopt someone else’s style, I choose one for them. Choosing the right one can be a challenge. One would hope that most formatting guidelines are designed for clarity, but it’s not always clear that that’s always the case [1].

I tend to prefer GNU C style for the C-like languages I use. The design choices often have a sensible rationale [2]; it’s also a style I’ve both read and used a lot. In the past, when I’ve taught Java, I’ve encouraged my students to use a similar style for their Java programs. But I’ve come to realize that essentially no Java programmers use GNU C style. Among other things, Java programmers don’t seem to like open braces on a line by themselves, and Java programmers don’t follow the GNU convention of separating a procedure from its modifiers.

What do I mean by the latter? I’m always tempted to write something like the following.

public static void
main (String[] args)
  throws Exception
{
  ...
}

But most Java programmers would write something more like this.

public static void main(String[] args) throws Exception {
    ...
}

I worry that the procedure name gets lost in all of the modifiers.

In any case, I was looking around for a decent Java style guide to adopt for the coming semester when I stumbled upon the Google Java Style Guide. It seems quite extensive. It meets some of my other preferences, such as avoiding tabs and using a two-space indent. And it even has settings for Eclipse.

While the Google style guide seems comprehensive, I find it interesting to see what it does not include. It does not say that all the modifiers for a procedure declaration belong on the same name as the declaration, but it seems that they do. It is silent on extends and implements, although I’m pretty sure that Google expects them on the same line as the class name. So, although I’d much prefer

public class Foo
  extends Bar
  implements Baz
{
}

it’s clear that I’ll be stuck writing

public class Foo extends Bar implements Baz {
  ...
}

Bleh.

While it’s not a style I like, I do tell my students that there are many benefits to following a standard style. What’s sauce for the goose, as they say. It looks like I’ll be rewriting my Java code to follow these new style conventions.


[1] More likely, there are competing design goals. For example, GNU C style makes matching braces easy, but at the cost of extra vertical space.

[2] For example, in a procedure declaration, we put the procedure name at the start of a line so that it’s easy to find the declaration.

[3] Not so surprisingly, Google has a decent Markdown style guide, too.


Version 1.0 of 2019-01-07.