import仅仅包含导入操作,并不包含将字节码文件加载进内存这一动作,将字节码文件加载进内存是后续的实例化操作完成的。
例如通过import导入了一堆包和类,但是后续什么都没用(没用实例化),那么导入的东西是不会被加载进内存的。
而且import是编译期的,如果你在后续代码中没有使用到你导入的内容,那么import语句甚至不会编译和执行。
查看字节码文件可以看出,import的作用就是对你程序中要用到(实例)的东西进行署名(signature),当程序运行的时候好知道你实例化的对象的类的字节码文件去哪里找。
而Class.forName方法包含的动作是:根据给出的全类名(方法的参数)找到对应的字节码文件,并将字节码文件通过ClassLoader加载进内存中生成Class类对象(方法的返回值就是Class类对象)。
这些就是二者的区别了。