[原创]Java源代码学习
一、一些关键字
方法声明中的native:调用本地方法,该方法一般是用C或者C++写的
变量声明中的transient:在序列化过程中会忽略该变量,即不进行序列化保存
变量声明中的volatile:编译器不会对其进行优化,如一条赋值紧接着一条赋值,编译器会忽略前一条赋值,而只保留后一条。该关键字表明不进行优化。
在JDK1.8中,对HashMap的存储结构有链表改成了平衡树,当通过key去获取entity时,复杂度由O(n)降低到了O(log n)
调试时无法进入源代码解决方案:安装JDK环境,把JRE改为JDK即可,JRE是已经编译过的JDK,仅仅是运行环境,不能进行调试,JDK则是Java develop kit,提供给开发人员使用的,也是带有JRE的。
看不到源代码的变量是因为:要调试的类的Class文件里没有包含LocalVariableTable属性表。在用Java源码编译器编译Java源码得到Class文件的时候,传-g参数就会有符号信息了。 还有一个表叫做LineNumberTable,负责保存行号信息,在下断点时有用,如果下断点是报错,说明行号表不存在。-g:lines参数可以保存两个表到代码中。