if(clazz != null) {
return clazz;
} else {
Class ex;
String clToUse1;
if(name.endsWith("[]")) { //此处的[]结尾的描述符表示什么类型呢?
clToUse1 = name.substring(0, name.length() - "[]".length());
ex = forName(clToUse1, classLoader);
return Array.newInstance(ex, 0).getClass();
} else if(name.startsWith("[L") && name.endsWith(";")) {
clToUse1 = name.substring("[L".length(), name.length() - 1);
ex = forName(clToUse1, classLoader);
return Array.newInstance(ex, 0).getClass();
} else if(name.startsWith("[")) {
clToUse1 = name.substring("[".length());
ex = forName(clToUse1, classLoader);
return Array.newInstance(ex, 0).getClass();
} else {
ClassLoader clToUse = classLoader;
if(classLoader == null) {
clToUse = getDefaultClassLoader();
}
try {
return clToUse != null?clToUse.loadClass(name):Class.forName(name);
} catch (ClassNotFoundException var9) {
int lastDotIndex = name.lastIndexOf(46);
if(lastDotIndex != -1) {
String innerClassName = name.substring(0, lastDotIndex) + '$' + name.substring(lastDotIndex + 1);
try {
return clToUse != null?clToUse.loadClass(innerClassName):Class.forName(innerClassName);
} catch (ClassNotFoundException var8) {
;
}
}
throw var9;
}
}
}
数组的Class对象调用getCanonicalName方法,返回 Java Language Specification 中所定义的底层类的规范化名称,名称以[]结尾