2. 分析汇编代码,找出APP的核心代码,如调用的API函数、数据结构、算法等;
3. 将汇编派圆代码转换为高级语言,如C/C++,以便更好枝旅地理解APP的核心代码;
4. 对APP的核心代码进行分析,以便更好地理解APP的功能和实现原理
这样是不行的。因为String 类是java的核心类,同时String类是final修饰的,被final修饰的类是不能被继承。从java的动态加载机制中可以更好的来分析该问题。
当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class加载到JVM里头,放在内存的程序代码区中运行,负责加载Java class的这部分就叫做Class Loader,Class Loader有好几层。
站在Class Loader角度上来讲,每一个被Loade进来的class文件就是Class的对象。JVM不是一次性把所有的Class文件都loade进来,而是需要某个class的时候就loade哪个class。这是java的动态加载机制。
但是,当程序需要某个class的时候,首先会去检查当前所需要的这个class有没有被加载进来。这时当前底层的Class Loader就会去调用它的上一层的Class Loader引用的一个getParent()方法,这个方法是去检查它的上一层的Class Loader有没有加载进所需要的class。这种调用检查时逐级的,就是一级一级的调用方法去检查。如果到了顶层的Class Loader发现没有加载,那么就会把需要的class加载进来。如果有,那么就不会再去加载该class了。
简单点就是说,我程序代码锋返行现在运行到某一行,需要一个类,这个时候就会去检查这个类有没有被加载到内存,如果有,就直接从内存中用。如银哗果没有,那么就去把这个需要的类加载进来,再去世扮使用。
java中的String类是它的核心类,所以在程序运行之初就会被加载进来。这样做的好处就是保证了java语言的稳定性和安全性。就是为了防止楼主所提到的问题。所以我们是永远没有机会自己去创建这个String核心类,并且去改写其中的代码,从而破坏核心类而导致java程序的崩溃。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)