A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wahaha 中级黑马   /  2013-3-4 07:32  /  1368 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 夏添 于 2013-3-4 21:20 编辑

张老说类加载器也是类(除了最开始那段C 写的二进制代码)
看到下面这段代码我又晕了。。求扫盲。
ClassLoaderTest.class.getClassLoader().getClass().getName();
这句代码中,从语法逻辑上看,getClassLoader()是对象吧,只有对象才.getClass(),
既然getClassLoader()是对象,这个对象是谁创立的呢?Java自己创立的?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

3 个回复

倒序浏览
ClassLoaderTest.class.getClassLoader().getClass().getName(); //类加载器就是Java虚拟机中用来把类加载到内存的工具,当ClassLoaderTest.class被运行时会有一个相应的类加载器,因为类加载器本身也是类,调用getClassLoader()是获取加载此类的类加载器对象,类加载器对象应该是JVM自己创立的吧。
回复 使用道具 举报
  1. Class clazz = ClassLoaderTest.class;//ClassLoaderTest的字节码对象clazz
  2. ClassLoader loader = clazz.getClassLoader();//得到classLoader对象
  3. Class clazzLoader = loader.getClass();//ClassLoader 的字节码
  4. clazzLoader .getName();
复制代码
ClassLoaderTest.class.getClassLoader().getClass().getName();
分开写就清楚了
回复 使用道具 举报
我来回答你的这个问题吧,类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。我觉得首先你要先理解类加载器的概念。顾名思义,类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class 类的一个实例。每个这样的实例用来表示一个 Java 类。通过此实例的 newInstance()方法就可以创建出该类的一个对象。
1. ClassLoader 中与加载类相关的方法
  方法说明
  getParent() 返回该类加载器的父类加载器。
  loadClass(String name) 加载名称为 name 的类,返回的结果是 java.lang.Class 类的实例。
  findClass(String name) 查找名称为 name 的类,返回的结果是 java.lang.Class 类的实例。
  findLoadedClass(String name) 查找名称为 name 的已经被加载过的类,返回的结果是 java.lang.Class 类的实例。
   所以说类加载器本身也是类,调用getClassLoader()是获取加载此类的类加载器对象,类加载器对象是JVM自己创立的!
  defineClass(String name, byte[] b, int off, int len) 把字节数组 b 中的内容转换成 Java 类,返回的结果是 java.lang.Class 类的实例。这个方法被声明为 final 的。
对于 1 中给出的方法,表示类名称的 name 参数的值是类的二进制名称。需要注意的是内部类的表示,如 com.example.Sample$1 和 com.example.Sample$Inner 等表示方式。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马