Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #20079
| From | markspace <-@.> |
|---|---|
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: ClassLoader.getSystemResourceAsStream versus this.getClass().getResourceAsStream() |
| Date | 2012-12-03 12:07 -0800 |
| Organization | A noiseless patient Spider |
| Message-ID | <k9j0qj$ftg$1@dont-email.me> (permalink) |
| References | <3c227741-7b7f-4cf8-b188-ce5268894031@googlegroups.com> |
On 12/3/2012 11:29 AM, zyng wrote:
> I am sure the difference between the two have been discussed well:
> the first one is using the System classloader and the second one is
> using the class loader which has loaded this class, most likely a
> child of System classloader, according to what I have found on the
> web.
First, note that there are two separate objects here, ClassLoader and
Class. Just because the names of their respective methods are the named
the same, doesn't mean they do the same thing.
>
> //option 1: InputStream is =
> ClassLoader.getSystemResourceAsStream("hij/hello.txt");
>
> //option 2: InputStream is =
> ResourceTools.class.getResourceAsStream("/hij/hello.txt");
Note in the documentation of the second method call:
" This method delegates to this object's class loader. If this object
was loaded by the bootstrap class loader, the method delegates to
ClassLoader.getSystemResourceAsStream(java.lang.String)."
So it's different because it delegates to a different method. I have to
guess that the two methods are designed to do different things, in spite
of their identical names. I suppose this could be considered a
"gotcha." My advice is to consider option 2; I've never seen the first
form in actual practice.
Why they did things this way, I have no idea. Classloading pretty
confusing except in trivial cases. I think it's best to keep things as
simple as possible when you resort to loading manually.
For extra fun, look at Thread::getContextClassLoader, which is even more
correct than option 1 or 2 above in certain circumstances (mainly web apps).
<http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#getContextClassLoader()>
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
ClassLoader.getSystemResourceAsStream versus this.getClass().getResourceAsStream() zyng <xsli2@yahoo.com> - 2012-12-03 11:29 -0800
Re: ClassLoader.getSystemResourceAsStream versus this.getClass().getResourceAsStream() markspace <-@.> - 2012-12-03 12:07 -0800
Re: ClassLoader.getSystemResourceAsStream versus this.getClass().getResourceAsStream() Lew <lewbloch@gmail.com> - 2012-12-03 14:04 -0800
Re: ClassLoader.getSystemResourceAsStream versus this.getClass().getResourceAsStream() markspace <-@.> - 2012-12-03 15:25 -0800
Re: ClassLoader.getSystemResourceAsStream versus this.getClass().getResourceAsStream() Lew <lewbloch@gmail.com> - 2012-12-03 20:37 -0800
Re: ClassLoader.getSystemResourceAsStream versus this.getClass().getResourceAsStream() zyng <xsli2@yahoo.com> - 2012-12-04 05:40 -0800
Re: ClassLoader.getSystemResourceAsStream versus this.getClass().getResourceAsStream() Lew <lewbloch@gmail.com> - 2012-12-04 12:57 -0800
csiph-web