区别
    类名.class叫做“类字面量”,因class是关键字, 所以类名.class编译时确定。
    getclass()运行时根据实际实例确定,getClass()是动态而且是final的。

    String.class 是能对类名的引用取得在内存中该类型class对象的引用,
    new String().getClass() 是通过实例对象取得在内存中该实际类型class对象的引用。

    例子
    1.抽象类

    1. package com.abc;
    2. public abstract class Animal {
    3. }

    2.实例类

    1. package com.abc;
    2. public class Dog extends Animal {
    3. public static void main(String[] args) {
    4. Animal animal = new Dog();
    5. System.out.println(animal.getClass().getName());
    6. System.out.println(Animal.class.getName());
    7. }
    8. }

    3.结果
    com.abc.Dog
    com.abc.Animal