The first one will be default class, i.e it cannot be accessed in any other package except itself, but can be accessed by other classes in the same package.
The second one makes it public,i.e, you can access it from any class of any package just like you access String and Array which are if different packages.
Remember, we are talking about accessible from packages not class.
Regarding,
And then: If I have a class X (please capitalize the class name) that is not declared as public, can I have public instance variables (EG public String name;) in it?? ;)
Yes of course you can have public instance variables in non-public class.