1.java 堆栈 理解
java对于堆栈内存的处理分区其实很复杂,这里粗暴的分为 三个部分 常量池、堆、栈
常量池(constant pool): 指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。
它包括了关于类、方法、接口等中的常量,也包括字符串常量。一般 java 基本数据类型,
都是放在常量池中。如 int a =1; 1就是放在常量池中。
堆(heap): 堆中一般放置 new 的数据,对于对象的操作 一般是放在堆中 如 String str = new String("heap");
heap 及存放在堆中。
栈(stack):这里说明下,如 int a = 1; String str = "abc"; 1和abc就会存在常量池中
a 和 str 的引用指针存放于栈中,指针分别指向常量池中的 1和abc。String newStr = new String("newAbc");
newAbc存放于堆中,newStr的指针引用存放栈中,指针指向存放于堆中的newAbc。
具体了解jvm这一块,可翻阅书籍 《深入java虚拟机》 作者:(美)Bill Venners 著
2.特殊的引用类型 String
String是java中的特殊引用类型。说它特殊是因为 String extends Object 它就是个引用类型
但是在应用中又凸显出值类型的特点。下面用一个例子来说明String的特点
此例子转载于ProgramCreek网站。
String s = "abcd";
String s2 = s; || String s2 = "abcd";
s = s.concat("ef");
上图展示的是String的不变性。
图二: String s2 =s; 是把 s的指针引用复制一个给s2; String s2 = "abcd"; java会去查找常量池中是否有 abcd 当有时,把 abcd值得引用付给s2
图三:当给s这个字符串结尾追加一个ef的字符串时,不是在原来的基础追加ef,而是在内存中新增加一块地址存放abcdef ,
然后再把s的指针指向从abcd 指向 abcdef 。
3.Collections和Collection 集合的结构及具体集合的使用
4.java异常的结构 及常见的异常与处理