为什么getResourceAsStream方法在Class类中?

为什么public InputStream getResourceAsStream(String name)在Class类中? 它只给出了jar文件中的文件输入流,与Class类没有关系。 所以它可以是静态方法,它可以在任何类中。

与class级有关系:

  • 考虑到类的包 – 如果你在foo.bar.SomeClass的类上调用getResourceAsStream("baz.txt") ,它将查找/foo/bar/baz.txt
  • 首先考虑类加载器以查找资源 – 如果它是静态方法,它将如何知道要查看哪些jar文件(等)? 生命比系统类加载器更重要

它只是给jar文件中的文件输入流…

不正确。 并非所有类加载器都从常规JAR文件加载资源。

  • 一些类加载器从目录加载。
  • 一些类加载器从网络加载。
  • 一些类加载器从多个源加载。

在这种情况下,当您通过Class使用ClassLoader API时,所有这些复杂性都会对您隐藏。

……并且与class级没有关系。

不正确。 请参阅@Jon Skeet的回答。 请注意,调用Class.getResourceAsStream(String)会提供属于与该类相同的安全上下文的资源。 如果正在使用多个类加载器/安全上下文,这可能非常重要。