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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄晓鑫 高级黑马   /  2014-1-20 16:04  /  1854 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

求大神详细跟我讲下 有代码和分析思路更好 一步一步来 别一脚飞天

5 个回复

倒序浏览
本帖最后由 廉伟杰 于 2014-1-20 16:16 编辑

这个问题感觉要懂JVM   我知道static修饰的是随着类的加载而加载 ,能直接 类名.变量来用,具体类是怎么加载的,我就不知道了,同等答案中
回复 使用道具 举报
类加载器,加载类用的。类加载器负责加载 Java 类的字节代码到 Java 虚拟机中,一般不直接用。
回复 使用道具 举报
看张孝祥老师的视频吧
哥们,版主都申请 成功了,赶紧来云8吧。
回复 使用道具 举报
在java中可以有多个类加载器,默认有三个主要的类加载器,
BootStrap , ExtClassLoader , AppClassLoader

java中所有的类都由类加载器加载进内存,(回答类加载器有什么用)
类加载器本身也是java类,而类加载器是由BootStrp来加载
BootStrp不是java类,是一段二进制码,可以最顶层的类加载器。(回答什么是类加载器)

每个类加载器都管辖一个范围
BootStrap 只在 jre/lib/rt.jar中找需要加载的类
ExtClassLoader 只在 jre/lib/ext中找需要加载的类
BootStrap 只在 classpath指定的目录中找需要加载的类

说通俗点,就是一般我们自己写的普通类,都是在 classpath指定的目录中(classpath即.class文件所放的目录或jar),是用APPClassLoader类加载器加载的;而像java自带的类一般是由BootStrap加载的,例:System类是由BootStrap类加载器加载的。
ExtClassLoader类加载器一般加载的是扩展类。
而我们自定义的类加载器是加载我们自己指定目录里的类文件,可以用于加密解密我们自己想加密的.class 文件。

其实一般我们自己写的类都是在 classpath指定的目录中,用APPClassLoader类加载器加载就可以了(都是自动加载的)。类加载器的作用,加载.class文件。.class文件只有被类加载器加载了才能被执行,编译和执行是两个过程。

评分

参与人数 1技术分 +1 收起 理由
黄晓鑫 + 1

查看全部评分

回复 使用道具 举报
类加载器是JVM的一部分,主要作用是将字节码加载进入执行引擎,以供执行。当使用java A 的时候,java.exe被调用,从而根据%JAVA_HOME%\jre\lib\i386\jvm.cfg配置来选择激活jvm,启动之后初始化工作 完成之后便产生Bootstrap Loader加载器,它由C++编写。JVM中另外两个内置类加载器是ExtClassLoader和AppClassLoader,它们定义在 sun.misc.Launcher.class中,为内部类,且由Bootstrp Loader加载进入虚拟机。
   每个类加载器会根据预设的url来搜索.class文件并动态加载之。Bootstrap Loader的加载路径为sun.boot.class.path,表现为CLASS_PATH环境变量;ExtClassLoader加载路径为 java.ext.dirs,默认是%JAVA_HOME%\jre\lib\ext;AppClassLoader加载路径为 java.class.path,由执行java.exe时的-classpath或-cp参数指定;
1、类加载器的委派模型:假设AppClassLoader需要加载一个类,它会首先委托其父加载器ExtClassLoader来加载此 类,ExtClassLoader也会递归性的委托其父加载器Bootstrap Loader来加载此类,如果Bootstrap Loader在sun.boot.class.path下找到被加载类时即加载,如果无法找到时再依次由子类加载器去加载。委派模型是针对Java安全而 设计的,这也印证了Java语言的设计初衷:面向网络的编程语言。
   2、由同一个类加载器所加载的类只能引用该加载器和其父加载器所加载的其他类。

评分

参与人数 1技术分 +1 收起 理由
黄晓鑫 + 1

查看全部评分

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