#Class

Class#getResource(String name)
根据 name 是否以’/‘ 开头,分两种情况:

  1. 不以/开头。则将当前Class的package 作为指定name 的前path, 最终拼接 path+’/‘+name.replaceAll(“.”,”/“)。
  2. 以/开头,则不做任何替换。 所以,传入的name 必须是以/开头,且name应当是以/作为分隔符的而不是.作为分隔符。 含义就是,查找classpath 下指定路径的文件存在。

然后调用 ClassLoader#getResource(String newName)

#ClassLoader

ClassLoader#getResource(String name)
委托机制,
会先使用BootstrapClassLoader
然后 ExtClassLoader
然后 AppClassLoader
进行查找指定name 文件的操作。

应用程序的path 是在AppClassLoader 的path中。
可知,name 应该是以/为分隔符的, 相当于是找文件,所以要以当前操作系统分隔符。