我刚刚学习了从Java获取资源的方法,并且看到我们可以通过两种方式使用getResource()来获取资源。
Class.getResource()
ClassLoader.getResource()我搞不清我们什么时候会用Class.getResource(),什么时候会用ClassLoader.getResource()。
有人对此有什么看法吗?
发布于 2021-01-30 06:27:18
总是由ClassLoader来完成查找资源并使其可用于您的代码的工作。但您并不一定能立即访问ClassLoader实例。如果您这样做了,并且您知道这是要使用的正确ClassLoader,那么您应该继续并通过调用getResource()方法直接使用它。
使用<Class instance>.getResource()通常是获得您想要的行为的更直接、更“智能”的方法。它做了许多不同的事情来确定要用来执行查找的正确ClassLoader。然后,它最终调用<ClassLoader instance>.getResource()或它的表亲方法之一(如ClassLoader.getSystemResource())来查找资源。由于您始终可以访问A类,并且通常可以访问与资源相关联的类,因此调用<Class instance>.getResource()并让系统执行查找要使用的适当ClassLoader的工作会更方便。
注意:在不涉及模块的情况下,<Class instance>.getResource()通常等同于<Class instance>.getClassLoader().getResource()。但并不是所有的类都有关联的ClassLoader。如果类本身没有关联的ClassLoader,则调用Class版本的getResource()将使用系统ClassLoader。
https://stackoverflow.com/questions/65962385
复制相似问题