谈JAVA静态载入的两种方式
创始人
2024-07-31 21:31:13
0

你对JAVA静态载入了解吗?如果你了解,你了解多少呢?下面就为你介绍JAVA的静态载入。

JAVA静态载入的时候需要思索到安全要素,这个问题就是我们必须解决的问题。下面我们就看看如何才能更好的解决相关安全下面的问题。 希望大家从中吸取相关的知识。

我们试想一下, 假如不运用这种委托模式,那我们就可以随时运用自定义的String来静态替代java中心api中定义类型,这样会存在十分大的安全隐患,而双亲委托的方式,就可以防止这种情况,因为String已经在启动时被加载,所以用户自定义类是无法加载一个自定义的ClassLoader。

java静态载入class的两种方式:

implicit隐式, 即应用实例化才载入的特性来java静态载入入class。

explicit显式方式, 又分两种方式:

java. lang. Class的forName()办法

java. lang. ClassLoader的loadClass()办法

用Class. forName加载类

Class. forName运用的是被调用者的类加载器来加载类的。

这种特性, 证明了java类加载器中的称号空间是***的, 不会相互搅扰。

即在一般情况下, 保证同一个类中所关联的其他类都是由以后类的类加载器所加载的。

以下是代码片段:

  1. public static Class forName(String className)   
  2. throws ClassNotFoundException {   
  3. return forName0(className, true , ClassLoader. getCallerClassLoader());   
  4. }   
  5. /** Called after security checks have been made. */   
  6. private static native Class forName0(String name, boolean initialize,   
  7. ClassLoader loader)   
  8. throws ClassNotFoundException; Java代码   
  9. public static Class forName(String className)   
  10. throws ClassNotFoundException {   
  11. return forName0(className, true , ClassLoader. getCallerClassLoader());   
  12. }   
  13. /** Called after security checks have been made. */   
  14. private static native Class forName0(String name, boolean initialize,   
  15. ClassLoader loader)   
  16. throws ClassNotFoundException; 

 

下面中 ClassLoader. getCallerClassLoader 就是失掉调用以后forName办法的类的类加载器static块在什么时候执行?

当调用forName(String)载入class时执行, 假如调用ClassLoader. loadClass并不会执行. forName(String, false, ClassLoader)时也不会执行,假如载入Class时没有执行static块则在***次实例化时执行. 比如new , Class. newInstance()操作static块仅执行一次, 各个java类由哪些classLoader加载?

java类可以通过实例. getClass. getClassLoader()得知接口由AppClassLoader(System ClassLoader, 可以由ClassLoader. getSystemClassLoader()取得实例)载入ClassLoader。类由bootstrap loader载入NoClassDefFoundError和ClassNotFoundException。

NoClassDefFoundError:当java源文件已编译成. class文件, 但是ClassLoader在运行期间在其搜索途径load某个类时, 没有找到. class文件则报这个错。

ClassNotFoundException:试图通过一个String变量来创建一个Class类时不成功则抛出这个异常。

以上就是对java静态载入的介绍,希望对你有帮助。

【编辑推荐】

  1. 详细介绍Java语言中的IO系统
  2. Java堆、栈和常量池详解
  3. C++和Java 的缺省初始化问题
  4. 我们为什么要学习Java Java的八大优点
  5. Java多线程编程基础之线程对象

 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...