阿里内推面试问题---自己写的String类能否被加载?
来源:互联网 发布:海拔计指南针软件 编辑:程序博客网 时间:2024/05/18 00:49
前段时间同学推荐我参加了阿里的内推面试,因为本人主要关注在技术上写代码稍强一些,对于这样的问题好难回答的上来,只知道有个类加载器,大概的顺序,对与这样的问题是在是一筹莫展,顾在面完之后马上到网上查了查总算搞清楚了~~~好了废话不多进入主题。
1.什么是类加载器?
类加载器就是Java运行时环境(Java Runtime Environment)的一部分,负责动态加载Java类到Java虚拟机的内存空间中。恩看了这个介绍就知道了~~~原来平常的.class文件是通过这个加载器,加载到内存中的。
2.类加载器的种类以及作用
1)Bootstrap ClassLoader
负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类
2)Extension ClassLoader
负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包
3)App ClassLoader(SystemClassLoader)
负责记载classpath中指定的jar包及目录中class
4)Custom ClassLoader
属于应用程序根据自身需要自定义的ClassLoader,如tomcat、jboss都会根据j2ee规范自行实现ClassLoader
OK那么好了,我们现在知道了什么是类加载器以及它的种类及作用了,那么现在问题来了,为什么我们自己写的Sring类能否被加载到呢?我们自己写一个来看看
首先,写了一个跟JAVA自带的String类一个一样的String,包名也一样就是在构造方法里面多了一行输出。
public String() { this.value = new char[0]; System.out.println("=================="); }
也就是说只要调用了我们自己写的String类得话应该是有输出的,接下来我们来试试:
import java.lang.String;public class Test { public static void main(String[] args) { String test =new String(); test = "测试"; System.out.println(test);}}
运行结果如下:
可以看到调用的是系统的String类,没有输出。
这是为什么呢?查阅了一些资料终于发现问题所在,这就是类加载器的委托机制。
3.类加载器的委托机制
从JDK1.2开始,类的加载过程采用父亲委托机制。这种机制能更好的保证java平台的安全。在此委托机制中,除了Java虚拟机自带的根类加载器以外,其余的类加载器都有且只有一个父加载器。当Java程序请求加载器loader1加载Sample类时,loader1首先委托自己的父加载器去加载Sample类,若父加载器能加载,则由父加载器完成加载任务,否则才由加载器loader1本身加载Sample类。
好吧~~~这下看明白了类加载器有个加载顺序我们来看一下这个加载顺序
加载过程中会先检查类是否被已加载,检查顺序是自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层检查,只要某个classloader已加载就视为已加载此类,保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下,也就是说当发现这个类没有的时候会先去让自己的父类去加载,父类没有再让儿子去加载,那么在这个例子中我们自己写的String应该是被Bootstrap ClassLoader加载了,所以App ClassLoader就不会再去加载我们写的String类了,导致我们写的String类是没有被加载的。
OK~~~~到处总算是搞明白了~~~还有好长的路要走了~~~。
- 阿里内推面试问题---自己写的String类能否被加载?
- 阿里内推面试经历
- 阿里内推面试经验
- 阿里内推面试经验总结
- 心中的激动与兴奋交加,阿里内推面试
- 2015小米笔试/阿里内推面试
- CVTE、阿里内推笔试面试经历
- 2015阿里内推实习生面试经历
- 阿里算法工程师内推面试经历
- 阿里内推电话面试一面小结
- 阿里内推实习生电话面试
- 关于自己写的java.lang.String能不能被加载的问题
- 自己写的 string 类
- 自己写的String类
- 阿里内推实习面试体会(客户端开发)
- 2017阿里内推实习生面试经历(已获得offer)
- 阿里2016春招实习生内推面试
- 2016秋招阿里内推面试经历
- 精妙SQL语句-1
- [笔记]HashMap
- 浅谈大型web系统架构
- Jackson 高性能的JSON处理 ObjectMapper
- sqlite乱码
- 阿里内推面试问题---自己写的String类能否被加载?
- Mina和QuickServer中为什么服务器接收数据的方法不被触发
- 【Android本地开发:图像处理】Skia图像库
- 利用runtime解析model
- 精妙SQL语句-2
- 查找字符串中出现次数最多的字符
- C/C++_sizeof的本质与使用注意事项
- 项目成功六要素
- 系统的稳定性