Java程序执行原理简介

2024-02-17 13:38

本文主要是介绍Java程序执行原理简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Java程序执行原理

 首先了解一下什么是计算机程序。计算机的作用在于它可以帮助人类完成计算功能,它由硬件和软件两部分组成,硬件包括中央处理器(CPU)、存储器、输入输出设备等,软件包括计算机程序、相关文档及数据。而计算机程序可以看作整个计算机系统的灵魂,它向计算机发出指令,指挥数据的输入、运算和输出,由于计算机程序的作用太重要了,因此好多人把软件和程序看成是一回事。

计算机程序是由一条条的指令组成的,但计算机所能接受的指令是由0和1构成的二进制数据,这叫做机器指令。让计算机算一下1+2等于几怎么办呢?只能向计算机输入类似于下面的代码了:

0011111 0000000 0000001 000000 00000010

当然了,具我的老师说,他的老师编写过这样机器指令程序,当时还没有键盘这种东西,首先根据程序中0、1的位置在纸带上打孔,然后把纸带送到机器上进行读入,然后……,试想一下,如果使用机器指令编写一个企业管理信息系统的话,得浪费多少木材资源啊,估计要毁坏一个大兴安岭。

好在对于我们来说噩梦已经结束了,如今编程语言已经从机器语言、汇编语言发展成接近人类语言的高级语言,Java也正是一种优秀的高级程序设计语言。

我们利用Java语言编写程序,实际上是编写程序的源代码(source code),程序设计者能看懂这些源代码,但计算机是不懂的,50多年来它们一直顽固不化,仍然只认得机器指令。

怎么才能让Java编写的程序能够在计算机上执行呢?

首先要利用Java编译器(JDK自带的工具)把它转换成一种叫做Java字节码(Byte Code)的东西,这个过程叫做编译,它可以检查程序中的错误。

Java字节码可以在计算机上运行了吗?还是不行,这种字节码只有Java虚拟机(JVM)才能读懂,也就是说一台计算机如果想运行Java程序的话,安装Java虚拟机是必不可少的。Java虚拟机连同一些必要的Java核心类库一起称作Java运行时环境,这是执行Java程序必不可少的工具,可以免费获得并安装。

运行Java程序时,Java虚拟机首先读入字节码、对节码进行正确性,针对客户计算机平台生成对应的机器指令,由客户机器执行机器指令。

 
    好了,我们回顾一下Java程序开发及运行的过程。

现在假如你是一个优秀的Java程序设计师,老板交给你一个非常重要的任务:为客户编写一个Java应用系统,这个系统具有一项高级功能——计算两个数相加的和!

你该怎么办呢?

1. 编写满足需求的Java源程序,将源程序保存为以.java为扩展名的文件。例如Add.java。

2. 利用JDK提供的javac命令将源文件编译为字节码文件,例如输入:

javac Add.java

java编译器可以生成名称为Add.class的字节码文件。

3.  在装有Java运行环境的机器上执行Add.class,例如输入:

java Add

其他的工作交给Java虚拟机完成。

4.你的心里暗暗想:Java虚拟机者是个好东东。

上面介绍的是手工编译、执行Java程序的过程,目前有很多优秀的开发工具用于开发Java应用程序(如Eclipse、NetBeans、Jbuilder等),编写完代码后可以通过菜单项或快捷按钮进行编译、运行程序。但我们应该了解:在图形化界面的背后还是调用了javac和java命令。


 

这篇关于Java程序执行原理简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/717936

相关文章

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co