I read somewhere, while reading about the System.out.print that in the System class, there is a declaration of 'out' as a PrintStream class type static variable as follows: public static final PrintStream out;
This invoked a question in me that what exactly happens if we just declare a variable of a certain class type and not initialize it by not calling any constructor? In above example 'out' is declared static and final, but I am looking for a generalized answer.

This invoked a question in me that what exactly happens if we just declare a variable of a certain class type and not initialize it by not calling any constructor?
Then like any other field, it starts off with its default value - which for references types (classes, interfaces, enums) is the null reference. From section 4.12.5 of the JLS:
Every variable in a program must have a value before its value is used:
- Each class variable, instance variable, or array component is initialized with a default value when it is created (§15.9, §15.10.2):
- For type
byte, the default value is zero, that is, the value of(byte)0.- For type
short, the default value is zero, that is, the value of(short)0.- For type
int, the default value is zero, that is,0.- For type
long, the default value is zero, that is,0L.- For type
float, the default value is positive zero, that is,0.0f.- For type
double, the default value is positive zero, that is,0.0d.- For type
char, the default value is the null character, that is,'\u0000'.- For type
boolean, the default value isfalse.- For all reference types (§4.3), the default value is
null.
System.out is a bit special - it's final, but can be changed via System.setOut. I would try to avoid generalizing any other behaviour based on that.
See more on this question at Stackoverflow