当前位置: 首页 > news >正文

教你如何做网站百度网络优化推广公司

教你如何做网站,百度网络优化推广公司,提升学历选什么专业比较好,软文营销案例文章【1】什么是双亲委派 Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象。而且加载某个类的class文件时,Java虚拟机采用的是双亲委派模式,即把请求交由父类处理&#xff0c…

【1】什么是双亲委派

Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象。而且加载某个类的class文件时,Java虚拟机采用的是双亲委派模式,即把请求交由父类处理,它是一种任务委派模式。

在这里插入图片描述

工作原理

  • 如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行;
  • 如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器;
  • 如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式。

在这里插入图片描述

【2】双亲委派机制举例

如下所示,我们想要加载jdbc.jar中的类。

  • 加载jdbc.jar 用于实现数据库连接的时候会首先去java.sql下加载需要的类和接口
  • 双亲委派给引导类加载器加载需要的类和接口
  • 部分实现类是第三方厂商提供故而反向委派给系统类加载器加载

在这里插入图片描述

【3】沙箱安全机制

我们首先自定义一个java.lang.String ,编写main方法进行测试:

public class String {static{System.out.println("我是自定义的String类的静态代码块");}//错误: 在类 java.lang.String 中找不到 main 方法public static void main(String[] args) {System.out.println("hello,String");}
}

会报错如下:

错误: 在类 java.lang.String 中找不到 main 方法, 请将 main 方法定义为:public static void main(String[] args)
否则 JavaFX 应用程序类必须扩展javafx.application.Application

解释: 采用双亲委派机制,引导类加载器会加载核心类库中的String(rt.jar包中java\lang\String.class),其是没有main方法的。

那如何定义一个核心类库不存在的类呢,比如下面示例:

public class Jane {public static void main(String[] args) {System.out.println("hello!");}
}

将会报错如下: 也就是不允许你使用java.lang这个包名。

java.lang.SecurityException: Prohibited package name: java.langat java.lang.ClassLoader.preDefineClass(ClassLoader.java:655)at java.lang.ClassLoader.defineClass(ClassLoader.java:754)at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)at java.net.URLClassLoader.access$100(URLClassLoader.java:74)at java.net.URLClassLoader$1.run(URLClassLoader.java:369)at java.net.URLClassLoader$1.run(URLClassLoader.java:363)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:362)at java.lang.ClassLoader.loadClass(ClassLoader.java:418)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)at java.lang.ClassLoader.loadClass(ClassLoader.java:351)at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" 

上面这种保护机制就是沙箱安全机制,可以保护java核心类库。

【4】双亲委派机制的优势

通过上面的例子,我们可以知道,双亲机制可以

  • 避免类的重复加载
  • 保护程序安全,防止核心API被随意篡改
    • 自定义类:java.lang.String
    • 自定义类:java.lang.Jane(报错:阻止创建 java.lang开头的类)

【5】如何判断两个class对象是否相同

在JVM中表示两个class对象是否为同一个类存在两个必要条件:

  • 类的完整类名必须一致,包括包名。
  • 加载这个类的ClassLoader(指ClassLoader实例对象)必须相同。

换句话说,在JVM中,即使这两个类对象(class对象)来源同一个Class文件,被同一个虚拟机所加载,但只要加载它们的ClassLoader实例对象不同,那么这两个类对象也是不相等的。

JVM必须知道一个类型是由启动加载器加载的还是由用户类加载器加载的。如果一个类型是由用户类加载器加载的,那么JVM会将这个类加载器的一个引用作为类型信息的一部分保存在方法区中。当解析一个类型到另一个类型的引用的时候,JVM需要保证这两个类型的类加载器是相同的。

【6】类的主动使用和被动使用

Java程序对类的使用方式分为:王动使用和被动使用。

主动使用,又分为七种情况:

  • 创建类的实例
  • 访问某个类或接口的静态变量,或者对该静态变量赋值
  • 调用类的静态方法
  • 反射(比如:Class.forName(“XXXXXX”))
  • 初始化一个类的子类
  • Java虚拟机启动时被标明为启动类的类
  • JDK7开始提供的动态语言支持:java.lang.invoke.MethodHandle实例的解析结果REF_getStatic、REF_putStatic、REF_invokeStatic句柄对应的类没有初始化,则初始化

除了以上七种情况,其他使用Java类的方式都被看作是对类的被动使用,都不会导致类的初始化。

http://www.dinnco.com/news/34396.html

相关文章:

  • 北京网站推广服务关键词竞价广告
  • github 做自己的网站推广互联网推广
  • 个人网站开发与设计摘要郑州seo服务公司
  • 单机游戏大全seo综合查询系统
  • 网站建设推广语关键词排名点击软件工具
  • 做网站应该注意哪些方面百度推广方法
  • 网站建设网络怎么才能建立一个网站卖东西
  • php b2b网站开发网站优化软件哪个好
  • 重庆涪陵建设银行网站百度认证怎么认证
  • 一个人的网站建设灰色推广
  • 高端文化网站腾讯企点注册
  • 成都做小程序青岛网站seo服务
  • 高端网站鉴赏专业网站优化培训
  • 地方网站怎么做推广广告公司推广方案
  • 自已建设网站流程网络推广seo
  • 购物网站建设与开发数字营销工具
  • 湛江做网站设计公司百度小说搜索风云榜排名
  • 网站建设底部百度搜索引擎竞价排名
  • 最快做网站的语言百度游戏中心
  • 做外贸相关的网站福州seo推广外包
  • php建设网站工具百度怎么投广告
  • 实战营销型网站建设免费自助建站网站
  • 融资网站建设重点新网站推广方案
  • 开源建站软件中国营销网官网
  • 网站导航栏制作郑州企业网站优化排名
  • 小程序网站开发公司成都网站seo设计
  • 怎么搭建一个博客网站河南公司网站建设
  • 怎么给甲方做网站备案千峰培训可靠吗?
  • 佛山市外贸网站建设公司百度站长工具排名
  • 微信公众平台注册官网搜索引擎优化作业