这两个java类的作用及每条语句的作用,怎么一步一步实现这个功能的

public static List<Class> getClassList(String packageName) { List> classList = new LinkedList();
String path = packageName.replace(".", "/");
System.out.println(""+path);
try {
Enumeration urls = getClassLoader().getResources(path);
System.out.println("urls:"+urls.toString());
while(true) {
while(true) {
URL url;
do {
if (!urls.hasMoreElements()) {

                        return classList;
                    }

                    url = (URL)urls.nextElement();
                    System.out.println("url:"+url.toString());
                } while(url == null);

                String protocol = url.getProtocol();
                if (protocol.equals("file")) {
                    addClass(classList, url.toURI().getPath(), packageName);
                } else if (protocol.equals("jar")) {
                    JarURLConnection jarURLConnection = (JarURLConnection)url.openConnection();
                    JarFile jarFile = jarURLConnection.getJarFile();
                    Enumeration jarEntries = jarFile.entries();

                    while(jarEntries.hasMoreElements()) {
                        JarEntry jarEntry = (JarEntry)jarEntries.nextElement();
                        String entryName = jarEntry.getName();
                        if (entryName.startsWith(path) && entryName.endsWith(".class")) {
                            String className = entryName.substring(0, entryName.lastIndexOf(".")).replaceAll("/", ".");
                            addClass(classList, className);
                        }
                    }
                }
            }
        }
    } catch (Exception var12) {
        //log.error("获取类出错!", var12); //待修改
        //log.error();
        return classList;
    }
}

private static void addClass(List<Class<?>> classList, String packagePath, String packageName) {
    try {
        File[] files = (new File(packagePath)).listFiles((filex) -> {
            return filex.isDirectory() || filex.getName().endsWith(".class");
        });
        if (files != null) {
            File[] var4 = files;
            int var5 = files.length;

            for(int var6 = 0; var6 < var5; ++var6) {
                File file = var4[var6];
                String fileName = file.getName();
                String subPackagePath;
                if (file.isFile()) {
                    subPackagePath = fileName.substring(0, fileName.lastIndexOf("."));
                    if (packageName != null) {
                        subPackagePath = packageName + "." + subPackagePath;
                    }

                    addClass(classList, subPackagePath);
                } else {
                    subPackagePath = fileName;
                    if (packageName != null) {
                        subPackagePath = packagePath + "/" + fileName;
                    }

                    String subPackageName = fileName;
                    if (packageName != null) {
                        subPackageName = packageName + "." + fileName;
                    }

                    addClass(classList, subPackagePath, subPackageName);
                }
            }
        }

    } catch (Exception var11) {
        throw new RuntimeException(var11);
    }
}

第一个是扫描指定包下的类,第二个是以文件形式获取包下的所有Class(但是似乎你的这个代码不完整)。
自己动手丰衣足食,建议你自己一步一步调试看看代码的执行逻辑。