直接上代码:
代码示例1(注意:下面代码中,Student类和Test类,两个是同等级的类):
很显然:getSimpleName()仅仅只是获取到当前类名而已。另外两个方法目前暂时是一样,继续往下看这两个的区别(注意,上面代码的Student类和Test类,两个是同等级的类)
代码示例2(注意:下面代码中,Student类是Test类的内部类):
显然,得出结论:
1、如果一个类(这边简称A)不是内部类,那么A类调用getName()和getCanonicalName(),得到的结果都是带包含路径的类名,两个返回值是一样的。
2、如果一个类(这边简称A)是内部类,那么A类调用getName()的返回值是路径.类名$内部类,getCanonicalName()的返回值是路径.类名.内部类
所以如果有用到反射获取包名,获取方式(这边是伪代码):getCanonicalName()-getSimpleName()