永发信息网

如何确定Java类是从哪个包加载的

答案:2  悬赏:50  手机版
解决时间 2021-01-28 18:51
  • 提问者网友:容嬷嬷拿针来
  • 2021-01-28 11:17
如何确定Java类是从哪个包加载的
最佳答案
  • 五星知识达人网友:英雄的欲望
  • 2021-01-28 12:00
java的类装载器使用的是优先策略,加载类的时候先找到哪个就加载哪个。有时候我们做一个系统,当类库非常庞大的时候,类可能会出现冲突,也就是类路径中存在不同版本的两个相同的类,这往往给调试带来非常大的麻烦,我们可能修改了类,但由于类加载器却使用的是另外一个未被更新的类,这个时候就会丈二和尚摸不着头脑,一度使调试过程误入歧途。
import java.security.CodeSource;
import java.security.ProtectionDomain;
import org.apache.commons.lang.StringUtils;public class Test {
public static void main(String[] args) {
ProtectionDomain pd = StringUtils.class.getProtectionDomain();
CodeSource cs = pd.getCodeSource();
System.out.println(cs.getLocation());}}
这段代码在我的机器上运行的结果是:

但是有一个限制经由系统类加载器所加载的类不能使用该方法来获取路径,假如你对 String类做上面的测试就会发生空指针异常,因为所得到的CodeSource为空,你可以在程序启动的时候使用-verbose来查看系统类的装载信息,使用方式有如:
全部回答
  • 1楼网友:冷風如刀
  • 2021-01-28 13:00
您好 1:不是。system是java.lang包中的一个类,而不是io包。outprint是定义在system类中的静态方法,所以可以直接使用system调用。 2:系统自动加载的是java.lang.*,而不是io包。如果要使用io包中的内容,需要import java.io.*,这样,你可以使用诸如inputstream等类。 3:自动加载的包有java.lang.*,其他的包需要手动加载。当然,新版本的jdk可能会有新的改变。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯