面经笔记

2017-07-12  本文已影响0人  倾情123

String为什么是final?

1.安全性:因为final修饰的类是不可被继承和更改的,被final修饰的累的方法也是不可被覆盖的,所以使用final来修饰String会比较安全。java不是操作系统语言,所以java需要借助操作系统来做事。JDK中提供的很多核心类,比如String等,这些类的内部方法实现都不是使用java来完成的,好多都是调用的操作系统的API,这就是著名的“本地方法调用”,这种类是很底层的,和操作系统的交流是很频繁的。如果这些类可以被继承,内部方法被重写,且内部方法被写为一些具有恶意攻击的代码,这是很危险的。

2. 效率:如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%。

反射中class.forName()与classLoader的区别?

       共同点:Java中的class.forName()和classLoader都可以对类进行加载。

      区别:class.forName()除了会将.class加载到JVM中去,还会对类进行解释,执行类中的static块。class.forName(name, initialize, loader)带参函数也可控制是否加载static块,并且只能使用new instance来创建新的对象。

                 classLoader只会将.class文件加载到JVM中,而不会执行static块,只有在newInstance时才会执行static块。

总结:目前只看到这两点,希望大家可以补充(本人菜鸟,大家勿喷)

上一篇下一篇

猜你喜欢

热点阅读