ClassLoader().getResource (String path)java
path爲相對ClassPath的路徑,從ClassPath根下獲取,不能以「/」開頭。this
//ClassLoader 獲取方式 //1.經過當前線程獲取ClassLoader ClassLoader classLoader1 = Thread.currentThread().getContextClassLoader(); //2.經過類獲取ClassLoader ClassLoader classLoader2 = ClassLoaderTest.class.getClassLoader();
Class.getResource(String path)spa
path不以"/"開頭時,默認是今後類包下獲取資源,即相對此類所在包的路徑;線程
path以"/"開頭時,則是從ClassPath根下獲取code
Class.getResource("/") == ClassLoader().getResource("")資源
緣由: Class.getResource和ClassLoader.getResource本質上是同樣的get
Class.getResource可使用("/"),使用了 resolveName 將 / 處理了string
private String resolveName(String name) { if (name == null) { return name; } if (!name.startsWith("/")) { Class<?> c = this; while (c.isArray()) { c = c.getComponentType(); } String baseName = c.getName(); int index = baseName.lastIndexOf('.'); if (index != -1) { name = baseName.substring(0, index).replace('.', '/') +"/"+name; } } else { name = name.substring(1); } return name; }