.字符串变量(线程安全)
.字符串变量(非线程安全)
对于三者使用的总结:
" 如果要操作少量的数据用6
$ 单线程操作字符串缓冲区下操作大量数据6.
多线程操作字符串缓冲区下操作大量数据6.
扩展;
"6E你好+,E
$6E你好E(E+,E
<!"66$#
<!" !#66$ !##
这段代码将打印两个 ,也就是说字符串 " 和 $ 是共享同一个实例。不过前
提是尽管使用了表达式,但是表达式中必须都是常量。
描述一下 :, 加载 文件的原理机制
+, 中的所有类,都需要由类加载器装载到 +T 中才能运行。类加载器本身也是一个
类,而它的工作就是把 文件从硬盘读取到内存中。在写程序的时候,我们几乎不需要
关心类的加载,因为这些都是隐式装载的,除非我们有特殊的用法,像是反射,就需要显
式的加载所需要的类。
+, 类的加载是动态的,它并不会一次性将所有类全部加载后再运行,而是保证程序
运行的基础类!像是基类#完全加载到 A, 中,至于其他类,则在需要的时候才加载。这当
然就是为了节省内存开销。
+, 的类加载器有三个,对应 +, 的三种类-
.<1CC负责加载系统类 !指的是内置类,像是 ,对应于 /U中的
类和 /C/((标准库中的类#
@
%%;'/1CC负责加载扩展类!就是继承类和实现类#
@
%%K<</1CC负责加载应用类!程序员自定义的类#
三个加载器各自完成自己的工作,但它们是如何协调工作呢?哪一个类该由哪个类加
载器完成呢?为了解决这个问题,+, 采用了委托模型机制。
委托模型机制的工作原理很简单:当类加载器需要加载类的时候,先请示其 !即
上一层加载器#在其搜索路径载入,如果找不到,才在自己的搜索路径搜索该类。这样的顺
序其实就是加载器层次上自顶而下的搜索,因为加载器必须保证基础类的加载。之所以是
这种机制,还有一个安全上的考虑:如果某人将一个恶意的基础类加载到 A,,委托模型
机制会搜索其父类加载器,显然是不可能找到的,自然就不会将该类加载进来。
我们可以通过这样的代码来获取类加载器-
/16/: /1!#
/116 !#
注意一个很重要的问题,就是 +, 在逻辑上并不存在 .<V1 的实体!因为