An inner class is a class declared within another class. There are several types of inner classes including local inner classes and anonymous inner classes. Local inner classes cannot be invoked from outside the method they are declared in and can only access final parameters of the enclosing block. Anonymous inner classes are used when a local class is only needed once and help make code more concise by allowing declaration and instantiation at the same time. The .this operator refers to the current instance of the enclosing class from within an inner class. The .new operator is used to create an object of the inner class type by specifying the enclosing class instance. Inner classes increase encapsulation and can lead to more readable code by placing related classes closer together.