java jvm 加载类的顺序_由经典面试题看java中类的加载机制

原标题:由经典面试题看java中类的加载机制

1.概述

类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行,对理解java虚拟机的连接模型和java语言的动态性都有很大帮助。

由于Java的跨平台性,经过编译的Java源程序并不是一个可执行程序,而是一个或多个类文件。当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。

JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。 2.类加载器

类的加载是由类加载器完成的,类加载器包括:根加载器(BootStrap)、扩展加载器(Extension)、系统加载器(System)和用户自定义类加载器(java.lang.ClassLoader的子类)。

Bootstrap:一般用本地代码实现,负责加载JVM基础核心类库(rt.jar);

Extension:从java.ext.dirs系统属性所指定的目录中加载类库,它的父加载器是Bootstrap;

System:又叫应用类加载器,其父类是Extension。它是应用最广泛的类加载器。它从环境变量classpath或者系统属性java.class.path所指定的目录中记载类,是用户自定义加载器的默认父加载器。 3.类加载的过程

下图是我总结的一个java类被jvm加载的过程。

d75809cc6ecd2dfd7d16ade63cf736e0.png 4.子类和父类加载顺序

那么问题来了,如果有一个java类继承了另一个java类,这两个类的内部具体的执行过程是什么呢?

比如下面的面试题:

3bbbeb412e17951f8cf55811e36004cd.png

c202a697c22d563eb979ca1bf299fa25.png public class Tests{ @Test public void test(){ A a= newA(); a.aDisplay(); } }

执行结果: Class B1:static blocks2 Class B2:static blocks3 Class A1:static blocks1 Class A2:static blocks2 Class B:common blocksi=4,j=3 constructorB: i=5,j=4 Class A:common blocksi=3,j=2 constructorA: i=4,j=3 Class A:static void a Display(): i=5,j=3

可能这里面最迷惑人的就是两个成员变量了,一个静态的一个非静态的。

其实他们出现在这是貌似没啥太大意义,父类和子类虽然拥有着同名的成员变量,但是,这些变量都独自存在于各自的类中,并有各自的只。

言归正传,由上面的面试题,我们可以得出下面的规律:

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

联想一键恢复系统教程

联想一键恢复系统教程?下面我们来看一看吧。 联想不同类型的电脑进入一键恢复界面的方法不一,台式机一体机就在电脑开机出现联想logo界面时按下FnF2组合键。 联想一键恢复系统教程 笔记本则寻找一键恢复按键,在电脑电源关闭的情况下按住几秒钟即可进…

java 中的单引号报错_shell中的单引号,双引号,反引号

docker的父镜像中定义了一个环境变量,我们的镜像在启动命令中需要用到这个环境变量。但是不加双引号时总是报错,报找不到java的启动类,加上双引号就不报错了。父镜像中定义的变量:$xxx_CMD -Xdump:tool:eventssysthrow,optsASYNC…

腾讯视频怎么开启禁止界面硬件加速

本文小编给大家分享“腾讯视频怎么开启禁止界面硬件加速”。腾讯视频播放器下载界面设计、功能操作使用、启动播放速度、视频内容数量、画面品质等方面均得到了用户的高度认可。相对于其他几大视频播放器来说,腾讯视频会员性价比还是比较高的,这点&#…

java多线程论文_Java5 多线程之入门篇-论文

Java5 多线程之入门篇Java5 多线程之入门篇首先回顾一下JDK1.5之前的线程相关的知识:1 线程的入门.什么是线程,线程就是程序执行的线索,Java是面向对象的语言什么类来表示这样一个东西呢?Thread.通过start()方法启动它,线程所要执行的任务放在run()方法里面,下面可以看一下run…

xp怎么升级到win7

使用云骑士软件前注意电脑磁盘至少要2个以上,同时备份好C盘上的重要资料,包括桌面文件和聊天记录等等。 打开浏览器,在云骑士官网下载云骑士一键重装系统软件,下载好以后打开云骑士装机大师,点击一键装机页面下的立即…

brew php7 intl_brew安装php7

设置brewbrew tap homebrew/dupesbrew tap homebrew/versionsbrew tap homebrew/homebrew-php安装php7brew install php70 \--without-snmp \--without-apache \--with-debug \--with-fpm \--with-intl \--with-homebrew-curl \--with-homebrew-libxslt \--with-homebrew-opens…

电脑怎么备份系统

电脑怎么备份系统?下面就与大家分享电脑备份系统的方法。 可以使用电脑的备份功能。 1 第一步 右键点击此电脑,选择属性,选择左侧菜单中的系统保护选项 电脑怎么备份系统 电脑怎么备份系统(1) 2 第二步 点击配置,勾选启用系统保护&#…

php求北京时间方法,php怎么将获得的时间转换为北京时间

从php5.10开始,php中加入了时区的设置,在php中显示的时间都是格林威治标准时间,这就造成了我们中国的用户会差八个小时的问题!相关设置是修改php.ini中的 date.timezone 参数:[Date]; Defines the default timezone us…

php sql desc,PHP SQL 查询封装

/*** SQL 简单查询工具类* * $tools new SQLTools("表名", "数据库操作对象实例");*$tools->query("字段默认为*") //(如无后续操作此处返回查询结果集)* ->where( 条件, PDO参数化查询参数 ) //(如无后续操作此处返回查询结果集)* ->…

彩虹浏览器使用技巧:页签自动切换

核心提示:彩虹66760设计了创新的页签自动切换功能,当鼠标移动到某个页签时,无需要点击就能自动激活您所想打开的网页,这个功能是不是很酷很炫呢,为大家节约一点小时间。 1,悬停换页 彩虹浏览器设计了创新…

php 的不等于符号,mysql 不等于 符号写法

经过测试发现mysql中用<>与!都是可以的&#xff0c;但sqlserver中不识别!,所以建议用<>selece * from zzvips where id<>45sql 里 符号<> 于 ! 的区别<> 与!都是不等于的意思&#xff0c;但是一般都是用<>来代码不等于因为<>在任何S…

腾讯视频怎么禁止别人登录我的会员

一旦你有了腾讯视频的vip会员账号&#xff0c;那么不管你是朋友眼中&#xff0c;还是在那些盗号的眼中&#xff0c;你就是非常诱人的&#xff0c;那么我们怎么设置才能够禁止别人登录自己的会员账号呢?跟着小编的节奏&#xff0c;带你安全设置腾讯视频vip账号。 首先&#xf…

php数组交集方法,PHP获得数组交集与差集的方法

本文实例讲述了PHP获得数组交集与差集的方法。分享给大家供大家参考。具体分析如下&#xff1a;一、数组的交集 array_intersect()array_intersect()函数返回一个保留了键的数组&#xff0c;这个数组只由第一个数组中出现的且在其他每个输入数组中都出现的值组成。其形式如下&a…

如何获取优酷视频的通用代码?

在网站建设中&#xff0c;假如置入视頻&#xff0c;则必须该视頻所属视频平台的通用性编码&#xff0c;比如某一视频在优酷网的通用性编码。拷贝该通用性编码在自身的网址&#xff0c;大家就可以自身在自身网址收看&#xff0c;无需自动跳转优酷网站。如何获取优酷视频的通用代…

一般java,【面试题】java一般

1、取最大最小值public static int maxOrMinTest(List list){Integer[] integers list.toArray(new Integer[0]);int max integers[0];for (int a1;aif (max < integers[a]){max integers[a];}}return max;}2、冒泡排序public static List sortTest(List list){Integer[]…

如何在金山毒霸软件里安装腾讯视频

有很多软件管理工具&#xff0c;金山毒霸不仅仅是杀毒软件&#xff0c;也是软件管理工具&#xff0c;对于一些电脑小白用户来说&#xff0c;在这里也可以非常方便的一键下载安装自己想要的软件&#xff0c;比如腾讯视频&#xff0c;这个其实和360软件管家是一样的道理&#xff…

java使用wsdlreader,Java WSDLReader.setFeature方法代碼示例

本文整理匯總了Java中javax.wsdl.xml.WSDLReader.setFeature方法的典型用法代碼示例。如果您正苦於以下問題&#xff1a;Java WSDLReader.setFeature方法的具體用法&#xff1f;Java WSDLReader.setFeature怎麽用&#xff1f;Java WSDLReader.setFeature使用的例子&#xff1f;…

如何进行系统还原

在我们使用电脑的时候有时候要对系统进行还原&#xff0c;那么你知道如何进行系统还原吗?不知道的小伙伴一起来操作一遍吧。 1 第一步 鼠标单击左下角的开始菜单&#xff0c;选择设置&#xff0c;进入页面 如何进行系统还原 2 第二步 单击更新和安全&#xff0c;选择左侧的恢…

搜狐视频开放平台的申请使用方法

软件是否好用&#xff0c;还得大家下载搜狐视频安装才知道。本文分享搜狐视频开放平台的申请使用方法。搜狐视频电脑版是电脑桌面客户端应用&#xff0c;用户只要登录帐号就能够拥有云同步功能&#xff0c;无论是在家、出差都可以查看自己的视频观看记录&#xff0c;随时追剧。…

java guava限流,Guava的RateLimiter实现接口限流

最近开发需求中有需要对后台接口进行限流处理&#xff0c;整理了一下基本使用方法。首先添加guava依赖:com.google.guavaguava23.0然后封装RateLimiter适用对多接口的限制:import com.google.common.util.concurrent.RateLimiter;import org.springframework.util.StringUtils;…