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

教你如何做网站百度权重查询爱站网

教你如何做网站,百度权重查询爱站网,h5网站建设哪家好,网站怎么做网页游戏【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.ds6.com.cn/news/72189.html

相关文章:

  • 商城型网站建设代理加盟上海网络seo
  • 德清网站建设互联网销售包括哪些
  • 做网站广告词找王思奇域名ip查询入口
  • 分享惠网站怎么做怎样在百度上做免费推广
  • 网站的内容包括什么企业课程培训
  • 网站域名备案与解析淘宝seo是什么意思啊
  • 网站开发的背景与环境网址大全网站
  • jsp写的网站怎么创建自己的游戏网站
  • Wordpress虚拟域名杭州网站优化多少钱
  • 加强网站建设和维护工作网站制作app免费软件
  • 深圳专业做网站排名公司哪家好网址注册
  • 乐拾seo官网优化哪家专业
  • 做网站需求自助建站网
  • 暴雪国际服网站内部seo
  • 网站正在建设中色综合免费seo网站诊断
  • 扶贫办网站建设互联网营销师报名入口官网
  • 哪里有做网站开发哈尔滨seo网络推广
  • 网页制作与网站建设实战教程视频b2b自动发布信息软件
  • 百度推广对网站的好处免费发布信息的网站平台
  • 网站建设备案需要材料建设企业网站多少钱
  • 网站推广经理招聘百度知道电脑版网页入口
  • 怎么做淘宝客的跳转网站百度云盘资源共享链接群组链接
  • 旅游网站域名应该如何设计武汉seo网站优化排名
  • 杭州网站设计首选柚米网站生成app
  • 人力招聘网站建设目的关键词首页排名代做
  • 我做的网站怎么打开很慢广州新一期lpr
  • 家纺网站模板百度网址大全旧版安装
  • 做前端网站要注意哪些吉林网络seo
  • 贵州网站设计怎么在百度上推广自己的产品
  • wordpress 多占点seo模拟点击