Java and Go are both statically typed, but this has nothing to do with the
static keyword in Java (which in fact is different from the same keyword in C, which again is still statically typed).
So static typing simply means, that the type of each piece of data is known statically at compile time and can’t change.
Usually you also can’t change the type of a variable afterwards, but at least in Go, sometimes it feels as if you could, due to shadowing.
Both, Java and Go have some type that is a “supertype” of all others. In both cases, you can’t do much with those without doing runtime typechecks. In go you use typeassertions, in java you use
In contrast to static typing there is dynamic typing, which basically means, that no types are known at compiletime but only at runtime. Most scripting languages use this kind of typing.
1 +  is possible and results in
Usually you classify a typesystem in a 2 dimensional grid using “weak/strong” on one axis, “static/dynamic” on the other.