class_loader
Jun 8, 2018
#Class
Class#getResource(String name)
根据 name 是否以’/‘ 开头,分两种情况:
- 不以/开头。则将当前Class的package 作为指定name 的前path, 最终拼接 path+’/‘+name.replaceAll(“.”,”/“)。
- 以/开头,则不做任何替换。 所以,传入的name 必须是以/开头,且name应当是以/作为分隔符的而不是.作为分隔符。 含义就是,查找classpath 下指定路径的文件存在。
然后调用 ClassLoader#getResource(String newName)
#ClassLoader
ClassLoader#getResource(String name)
委托机制,
会先使用BootstrapClassLoader
然后 ExtClassLoader
然后 AppClassLoader
进行查找指定name 文件的操作。
应用程序的path 是在AppClassLoader 的path中。
可知,name 应该是以/为分隔符的, 相当于是找文件,所以要以当前操作系统分隔符。