社区
Java SE
帖子详情
谁能为我讲清楚编译,装载,连接,初始化这之间的关系和顺序?越清楚越好。
xuanxufeng
2012-07-24 10:11:56
谁能为我讲清楚编译,装载,连接,初始化这之间的关系和顺序?越清楚越好。特别是涉及到static类型的成员。
...全文
129
4
打赏
收藏
谁能为我讲清楚编译,装载,连接,初始化这之间的关系和顺序?越清楚越好。
谁能为我讲清楚编译,装载,连接,初始化这之间的关系和顺序?越清楚越好。特别是涉及到static类型的成员。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
BadPattern
2012-07-25
打赏
举报
回复
java是动态语言,没有链接这一步骤,只在类加载的过程中有连接过程.
编译就是将源文件编译为class文件.
类加载过程分为:加载,连接(又分为验证,准备和解析三步)和初始化,static成员在准备的过程中被分配内存并赋予默认值(位模式全部为0),在初始化的过程通过初始化方法(静态方法,静态块等)被赋予各种程序员想要给予的值.
Sammie
2012-07-24
打赏
举报
回复
Java的运行过程:
Java源文件(*.java)——>Java编译器——>字节码文件(*.class)——>类装载器——>字节码校检器——>解释器——>操作系统(Windows、Linux等)整个文件Load到内存区,一系列动作之后形成操作系统认识的代码,操作系统找到main方法开始实行。
每个解释:
1、编译:指使用Java编译器对源文件进行错误排查的过程,编译后将生成后缀名为.class的字节码文件的过程。
2、装载:运行JVM字节码的工作是由解释器( java命令 )来完成的。解释执行过程分三部进行:代码的装入、代码的校验和代码的执行。装入代码的工作由"类装载器"(class loader)完成。
ClassLoader.getSystemClassLoader().loadClass(类)。最终产生一个CLASS对象
3、连接:装载后进行验证、预备和解析的过程。
-- 验证:类在语法等相关的验证
-- 预备:就是你类中一些变量等等开辟空间的操作
-- 解析:在类型的常量池中寻找类、接口、字段和方法的符号引用,把这些符号引用替换成直接引用。
4、初始化:我所理解的是代码执行的顺序。
他们之间的关系:
一个类的源文件先编译成字节码文件,然后在执行这类的时候需要做先装载,然后连接,最后初始化。
以上个人理解,关于理论问题最怕害人,所以仅供参考。
冰思雨
2012-07-24
打赏
举报
回复
没听说Java还有连接这个步骤。连接,在学C语言的时候,听说过。
编译,就是把按照Java语法规则编写的文本文件(源码文件)按照一定的规则转换成字节码文件(.class文件)的过程。
字节码文件能够被JVM识别,并解释执行。字节码文件的数据结构,是开放的,官方已经制定了标准。
装载,就是Java虚拟机将字节码文件的内容,读取到内存当中的过程。
mengyalizuopeng
2012-07-24
打赏
举报
回复
Bruce Eckel可以 ,。。
高手过招:请教:变量到底是在
编译
的时候
初始化
的,还是在运行的时候
初始化
的?
请教:变量到底是在
编译
的时候
初始化
的,还是在运行的时候
初始化
的? [问题点数:40分,结帖人learnc2015] https://bbs.csdn.net/topics/391832733 收藏帖子 回复 learnc2015 结帖率 62.5% 变量到底是在...
c 语言全局变量
初始化
,C中全局变量和static变量的存储与
初始化
数据段又分为:.data 段 和 .bss段,其中.data段存储已
初始化
的全局变量和静态变量,.bss 段存储未
初始化
的全局变量。在C中,凡是在任何代码块之外声明的变量总是存储于静态内存中,也就是不属于堆栈的内存,这类...
VxWorks6.9
初始化
流程介绍
在
讲
初始化
流程之前,我们先了解下VxWorks的三种映像类型。要搞
清楚
映像结构,需要先了解下VxWorks的内存空间分配。所以我们先从框架入手。 1. 框架图 2. 内存空间分配 二、内核映像 根据应用场合不同,...
Java类加载机制的几个个阶段,加载、验证、准备、解析、
初始化
【jvm】
一个Java文件从编码完成到最终执行,一般主要包括两个过程:
编译
和运行,其中
编译
就是把我们写好的java文件,通过javac命令
编译
成字节码,也就是我们常说的.class文件,然后运行则是把
编译
声称的.class文件交给Java...
[
编译
链接
装载
]之静态链接
这里
讲
的模块,主要是
编译
概念上的模块,通常他们按照功能划分,比如一个.c或者.cpp文件就是一个
编译
单元,就是一个模块,
编译
后就产生一个.o目标文件。为了最终生成一个可执行文件、静态库或者动态库,就需要把各个...
Java SE
62,615
社区成员
307,307
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章