Dog is the name of the class, and you're correct about d, cobi, and dog2 being instances. Technically, they're all references, and the actual objects reside in memory. But that's not all that important, really...just know that those are all objects.

That code most definitely won't compile, and you shouldn't call the constructor within the constructor.
public Dog(String name) {
   Dog whatever = new Dog("Some_Name");
does not work. You just need to assign the instance variable ( to the value passed in (name). That assignment you made (Dog whatever =...) would be fine in the main() method.