Now that I was looking into static inner class, I found that the way of object creation of static inner class and non-static inner class is different. But I don't understand why.
For non-static inner class:
Outer.Inner inner = new Outer().new Inner();
For static inner class:
Outer.Inner inner = new Outer.Inner();