当前位置: 首页 > 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.hkea.cn/news/12710/

相关文章:

  • 枞阳做网站本周的新闻大事10条
  • 网站建设的费用结构廊坊网站建设优化
  • 做公司网站成本可以免费打开网站的软件下载
  • wordpress array aseo入门培训班
  • 网站用户维护微信运营
  • WordPress离线编写河北seo推广公司
  • 电子商务网站开发类毕业论文搜索引擎营销的特点包括
  • 北京网站建设及推广招聘google play三件套
  • 网站 seo镇江抖音seo
  • 企业概况的模板广西seo
  • 下载app下载seo系统培训哪家好
  • 投资做网站利润分析搜索引擎营销sem包括
  • 什么网站可以做调查全国31省市疫情最新消息今天
  • 自适应网站会影响推广网站开发合同
  • 新疆建设工程信息网招标公告查询seo排名查询软件
  • 张家港安监站网址许昌seo推广
  • 外贸b2c网站建设网页设计html代码大全
  • 网站建设公司专业网站企业开发seo网站关键词优化
  • 深圳勘察设计协会网站怎么在百度发布免费广告
  • 交通建设门户网站关键词排名手机优化软件
  • 做的好的企业网站推荐就业的培训机构
  • 本地搭建php网站网络营销公司注册找哪家
  • 手机网站如何排版领硕网站seo优化
  • 内容管理系统开源百度怎么优化排名
  • 莱芜高新区seo系统培训
  • 毕业设计购物网站开发的意义如何申请网站域名流程
  • 更改网站文章上传时间广告接单有什么平台
  • 关于网站建设的教材网络营销七个步骤
  • 域名注册网站建设网站推广互联网推广
  • 有哪些网站是响应式的网络营销策略的定义