I find myself getting confused as to the order of access and non access modifiers. For example
abstract void go() abstract public void go() public final
Yes, there's the Java Language Specification, which explains all that is valid syntax in the language and there is also the coding conventions used by Oracle/Sun, which is a bit old but still explains a lot of stuff.