设为首页 加入收藏

TOP

计算机二级辅导:java类装载(2)
2014-11-18 00:48:06 】 浏览:3067
Tags:计算机 二级 辅导 :java 装载

  在这种情况下,系统会提示我们出现异常,因为我们有两个相同的类,一个是真正的URL,一个是我在上面实现的伪类;出现异常是正常的,因为你想想,如果我们在执行一个applet的时候,程序自己实现了一个String的类覆盖了我们虚拟机上面的真正的String类,那么在这个String里面,不怀好意的人可以任意的实现一些功能;这就造成极不安全的隐患;所以java采用了一种名为“双亲委托”的加载模式;


  以下是jdk源代码:


  protected synchronized Class loadClass(String name, boolean resolve)


  throws ClassNotFoundException


  {


  // First, check if the class has already been loaded


  Class c = findLoadedClass(name);


  if (c == null) {


  try {


  if (parent != null) {


  c = parent.loadClass(name, false);


  } else {


  c = findBootstrapClass0(name);


  }


  } catch (ClassNotFoundException e) {


  // If still not found, then invoke findClass in order


  // to find the class.


  c = findClass(name);


  }


  }


  if (resolve) {


  resolveClass(c);


  }


  return c;


  }


  在上面的代码中,我们可以清晰的看见,我们调用一个ClassLoader加载程序的时候,这个ClassLoader会先调用设置好的 parent ClassLoader来加载这个类,如果parent是null的话,则默认为Boot ClassLoader类,只有在parent没有找的情况下,自己才会加载,这就避免我们重写一些系统类,来破坏系统的安全;


  再来看一个明显的例子:


  package org.corey;


  public class MyCls{


  private String name;


  public MyCls(){


  }


  public MyCls(String name){


  this.name=name;


  }


  public void say(){


  System.out.println(this.name);


  }


  }


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇计算机二级辅导:java类装载 下一篇计算机二级辅导:正确地killjava进..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目