В вашем примере у вас фактически есть переменная экземпляра, а не переменная класса.Разница наступает в тот момент, когда вы добавляете новый конструктор MyClass (аргумент объекта) и забываете непосредственно устанавливать x и забываете также вызывать оригинальный конструктор без аргументов.Если вы сделаете его окончательным, если это применимо, вы, конечно, заставите вас не забывать устанавливать значение где-либо.
В случае с переменными класса все становится намного интереснее, просто измените x на static и добавьте следующий метод main в MyClassи наблюдать за результатами.
public static void main(String ... args) {
MyClass y = null;
System.out.println(y.x);
System.out.println(MyClass.x);
new MyClass();
System.out.println(MyClass.x);
}