URLClassLoader是ClassLoader的一个子类,java加载时逐级上传,当前类加载器无法加载时抛给父级加载器,当父级加载器为null时bootstrapclassloader充当父级加载器启动。这里看应该是先传给了URLClassLoader加载器,调用它的findclass。URLClassloader这个是用来安装指定路径加载资源的一个加载类。classloader只能加载classpath下的类。我猜可能是因为代码中给定了要加载类的路径,所以java先传给了URLClassLoader类加载器。如果这个加载器无法加载还会继续传递给父类classloader
别听他们胡说,为了转义是反斜杠“\\”,两个反斜杠实际代表一个反斜杠“\”。
那为什么Java中写正斜杠“/”、“//”、“///”,甚至再多都不会有问题呢?
那是因为Java中处理流,都会使用到File这个类,在Windows环境中,File会使用WinNTFileSystem
这个工具类处理那些问题,再WinNTFileSystem类中,会把所有的正斜杠“/”都处理成反斜杠,再把多余的反斜杠“\”给去掉,最终会表示成转义后的一个反斜杠。
可以测试一下:
public static void main(String[] args) { File file = new File("C:\\\\\\Users///pc//////////Desktop\\工作日志.txt"); System.out.println(file.getAbsolutePath()); }
输出结果为:
C:\Users\pc\Desktop\工作日志.txt
getAbsolutePath()的源代码为:
public String getAbsolutePath() { return fs.resolve(this); }
而这个fs在Windows平台下正是WinNTFileSystem这个类:
WinNTFileSystem则处理了这些事情。