/**
* 作者:liujian on 2018/6/26 10:24
* 邮箱:15313727484@163.com
*/
public class TestClass {
private static final String TAG = "TestClass";
static class staticClass {
}
class NormalClass {
}
public static void main(String[] args){
print(staticClass.class);
print(NormalClass.class);
print(TestClass.class);
}
public static void print(Class c){
Log.e(TAG,"getName: "+c.getName());
Log.e(TAG,"getSimpleName: "+c.getSimpleName());
Log.e(TAG,"getCanonicalName: "+c.getCanonicalName());
Log.e(TAG,"getEnclosingClass: "+c.getEnclosingClass());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Log.e(TAG,"getTypeName: "+c.getTypeName());
}
}
}
打印结果
06-26 10:46:04.773 24734-24734/com.lj.test E/TestClass: getName: com.lj.test.test_class.TestClass$staticClass
getSimpleName: staticClass
getCanonicalName: com.lj.test.test_class.TestClass.staticClass
getEnclosingClass: class com.lj.test.test_class.TestClass
getName: com.lj.test.test_class.TestClass$NormalClass
getSimpleName: NormalClass
getCanonicalName: com.lj.test.test_class.TestClass.NormalClass
getEnclosingClass: class com.lj.test.test_class.TestClass
getName: com.lj.test.test_class.TestClass
06-26 10:46:04.774 24734-24734/com.lj.test E/TestClass: getSimpleName: TestClass
getCanonicalName: com.lj.test.test_class.TestClass
getEnclosingClass: null
通过上面日志分析我们可以看到:
getName:
内部类: com.lj.test.test_class.TestClass
staticClass非内部类:com.lj.test.testclass.TestClass说明:如果是内部类格式完整外部类名
s
t
a
t
i
c
C
l
a
s
s
非
内
部
类
:
c
o
m
.
l
j
.
t
e
s
t
.
t
e
s
t
c
l
a
s
s
.
T
e
s
t
C
l
a
s
s
说
明
:
如
果
是
内
部
类
格
式
完
整
外
部
类
名
内部类名称
getSimpleName:
内部类:staticClass
非内部类:TestClass
说明:这个方法返回的是不带包名的类名称。
getCanonicalName:
内部类:com.lj.test.test_class.TestClass.staticClass
非内部类:com.lj.test.test_class.TestClass
说明:很明显内部类的$符号换成了.;标准的类的命名。