JAVA入门级教学之(JAVA程序的加载和运行)

JAVA程序的加载和运行

多思考多动脑(边参考文章最后的示意图,边按步骤理解)

1.JAVA程序的加载和运行包括两个非常重要的阶段:

  • 编译阶段
  • 运行阶段

2.我们先来了解一下什么是编译阶段:

  • 首先,我们自己动手敲的JAVA代码(只要你安装好JDK后在记事本都可以敲JAVA代码),记事本的扩展名改为xxx.java

  • 然后,扩展名由xxx.java–>xxx.class,这就是一次编译,那为什么要变成xxx.class的文件呢?xxx.class文件是什么呢?

  • 接来下我们带着这个疑问去了解 什么是编译

  • 编译阶段主要的任务是检查java源程序是否符合java语法要求:

  • 符合java语法则能够生成正常的字节码文件(即xxx.class文件)

  • 不符合java语法规则则无法生成字节码文件

  • 那么字节码文件是什么呢?:

  • 字节码文件就是我们所说的.class文件

  • 字节码文件中不是纯粹的二进制代码:

  • 因此字节码文件无法直接和操作系统交互(因为操作系统和纯二进制打交道)

3.编译阶段的过程的实现:

  • 程序员需要在硬盘的某个位置(位置随意)新建一个xxx.java扩展名的文件,

  • 该文件就叫做java源文件,在源文件中编写的代码叫做java源代码,源代码不可以随意编写,需要符合java语法规则

  • 程序员需要使用JDK中自带的 javac.exe 命令进行编译,过程如下:

  • xxx.java–>javac.exe(在JDK中会调用javac.exe工具)–>xxx.class

  • javac.exe是一个java编译器工具

  • javac在哪里用呢?怎么用?:

  • 在DOS命令窗口中使用

  • 在窗口命令行输入 javac java源文件路径

  • 这样系统就会调用JDK的javac.exe资源,将java源文件编译成字节码文件

  • 此时在源文件同级路径位置会出现一个xxx.class文件,表示编译成功

  • 下面是因为JDK的路径在D盘中,所以用命令D:跳转盘符

在这里插入图片描述

  • 在这里插入图片描述

  • 一个java源程序可以编译生成多个xxx.class文件:

  • A.class/B.class/C.class这个以后再说

字节码文件是最终要执行的文件,所以说class文件生成后,即使你删除java源程序也不会影响java程序的执行。
但是最好不要删除源程序,因为字节码文件最终执行效果可能不是我们想要的,那么这个时候只需要回头重新修改源程序,然后将源程序重新编译生成新的字节码文件,得到新的效果。

  • 编译结束后,可以将xxx.class文件拷贝到不同的操作系统中运行:
  • 解释:因为xxx.class文件还要变成纯二进制代码才可以和系统交互
  • 所以你只需要拷贝xxx.class文件到相应的位置,然后xxx.class文件通过JVM虚拟机和操作系统交互,剩下的事情就交给JVM

4.接下来我们了解 运行阶段

  • JDK安装之后,除了自带的一个javac.exe负责编译之外,还有另一个工具,叫做java.exe工具

  • java.exe工具负责运行阶段

  • java.exe在哪里用?怎么用?:

  • 同样,java.exe和javac.exe一样在DOS命令窗口中使用

  • 在窗口中输入 java 类名

  • 类名我们后面再解释

  • 例如:
    硬盘上有一个A.class,那么就 输入: java A
    硬盘上有一个B.class,那么就 输入: java B
    硬盘上有一个C.class,那么就 输入: java C
    在这里插入图片描述

  • 千万要注意:不要写成这样: java A.class 【错误示范】:

  • A、B、C指的是类名,记住就行

5.运行阶段的过程解析:

  • 打开DOS命令窗口
  • 输入: java A 然后按下回车
  • java.exe工具会启动java虚拟机(JVM),JVM会启动 类加载器ClassLoader
  • 类加载器ClassLoader会去硬盘上搜索A.class文件,找到该文件则将该文件装载到JVM中
  • JVM将A.class字节码文件解释成二进制1001000101这样的数据
  • 然后操作系统执行二进制和底层硬件平台进行交互

总结:编写好java源程序后,以xxx.java结尾修改扩展名,打开DOS命令窗口,输入 javac xxx.java 回车执行后,在我们放java源程序的文件里多出来一个xxx.class文件 意味着编译成功(这就是加载) 那么这个xxx.class文件可以拷贝到不同的系统中使用,为了让xxx.class文件里的代码变成纯二进制代码 我们再次打开DOS命令窗口,输入 java xxx 这时候就是java.exe工具启动JVM,JVM启动类加载器 类加载器找到刚刚编译好的xxx.class文件 在JVM环境里 xxx.class文件变成纯二进制的代码 这时候就可以和操作系统直接交互啦

这个章节涉及的内容概念有点多,不必全部都了解,只需要了解字面意思的概念
后面我们会深入讲解

参考来源:动力节点在这里插入图片描述

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

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

相关文章

abstract类中可以有private的成员_C++|static成员与单例模式

如果需要一个全局对象,如对话框、系统日志、显卡等设备的驱动程序对象、一台PC连接一个键盘等。这样的全局对象只能是一个且是全局的,这就是单例模式,如何实现呢?1 不能在类外部通过构造函数新建对象:构造函数的访问方…

JAVA入门级教学之(JDK安装-JDK、JRE、JVM)

1.下面我们开支安装JDK【JDK开源、免费】 安装地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择 Windows x64-->jdk-8u221-window-x64.exe 下载 下载完成后 双击JDK安装包-->进入安装界面(…

vim显示python嵌套级_在Vim中为Python突出显示语法

Vim中针对Python的语法突出显示(目标是Ubuntu 12.10)这是有关如何在Ubuntu 12.10的Python中设置语法突出显示的演练。 你所看到的就是你得到的:[https://github.com/sentientmachine/Pretty-Vim-Python/]一旦掌握了如何为特定用户将配色方案和语法突出显示注入到vi编…

JAVA入门级教学之(编写第一个HelloWorld程序)

目录 1.创建一个HelloWorld.java文件 2.用记事本打开HelloWorld.java 3.接下来我们要完成xxx.java-->xxx.class的步骤 怎么解决javac不可用的问题: 4.配置环境变量path 怎么配环境变量Path? 5.接下来就是在DOS命令窗口下进行编译【javac java源…

springboot api文档_SpringCloud/SpringBoot - 自动生成API文档

SpringCloud/SpringBoot 的项目一定要前后分离,这就需要一个API文档生成的工具,后端一定要和前端或者是移动端对接接口,那么问题来了,接口是不是要自己写给他们看,一般的会采用Excel或者Word来写,高级一点的…

JAVA入门级教学之(classpath的配置)

目录 JAVA入门级教学之(classpath的配置) 1.打开DOS命令窗口,执行java HelloWorld 2.疑问?:为什么会出现找不到HelloWorld.class文件? 3.解释: JAVA入门级教学之(classpath的配置…

语法手册_程序员必备——SQL语法速成手册

一、基本概念数据库术语数据库(database) - 保存有组织的数据的容器(通常是一个文件或一组文件)。数据表(table) - 某种特定类型数据的结构化清单。模式(schema) - 关于数据库和表的布局及特性的信息。模式定义了数据在表中如何存储,包含存储什么样的数据&#xff0…

JAVA入门级教学之(JAVA注释)

目录 JAVA入门级教学之(JAVA注释) 1.关于java源程序中的注释: 2.java中的注释怎么写? JAVA入门级教学之(JAVA注释) 1.关于java源程序中的注释: 什么是注释?注释的作用是什么&…

JAVA入门级教学之(你是否理解HelloWorld的这段经典的代码的注释)

//public表示公开的 //class表示一个类 //HelloWorld表示一个类名public class HelloWorld{//表示一个公开的类,类名是HelloWorld//在这个大括号内写的是类体,类体中不能直接编写java语句【除声明变量之外】,否则会报错/*public表示公开的sta…

devtools的ctrl加r_Chrome DevTools调试技巧

【1】DevTools触发伪类右键单击Elements面板中的元素节点并选择“ force state ”。或者在Sytle子窗格中单击“:hov ”图标。可以触发元素上的伪类来研究元素在悬停时的效果和样式​【2】DevTools-在任何网页上运行预定义的代码片段DevTools中有一个叫做代码段的特性…

JAVA入门级教学之(public class和class的区别)

目录 JAVA入门级教学之(public class和class的区别) 1.public class 和 class 的区别: 2.public class 类名A{ }的 类名A需要和源文件 类名 保持一致 总的来说: JAVA入门级教学之(public class和class的区别&…

c 程序中的注释相当于空白字符_Python专题 | (三)注释、变量与输出

小伙伴们,大家好呀,欢迎回到我们的python专题。前两篇文章已经把编程简单的知识和大家介绍过了,今天我们正式开始学习python语法。第一个python程序我们在第一篇文章中介绍pycharm的安装时曾给大家展示过这样的一段代码:print(&qu…

JAVA入门级教学之(第一章总结)

总结第一章需要掌握的内容: 理解java的加载与执行能理解自己搭建的java开发环境(JDK)能够独立编写HelloWorld程序,编译并运行掌握环境变量path的原理以及如何配置掌握环境变量classpath的原理以及如何配置java中的注释public cla…

JAVA入门级教学之(标识符与关键字)

目录 JAVA入门级教学之(标识符与关键字) 1.什么是标识符? 2.标识符的命名规则? 3.标识符的命名规范? 4.严格遵守规则和规范: 在java里的关键字都是小写的 JAVA入门级教学之(标识符与关键字) 1.什…

birt project mysql_eclipse birt如何连接mysql数据库 配置文件

双击.rptdesign打开data explorer,右键点Data Sources -> New Data Sources ->JDBC Data Source到Next如果没有mysql-connector-java的包,请去下一个http://dev.mysql.com/downloads/connector/j/5.0.html然后在Driver Class这里就可以选 com.mysql.jdbc.Driv…

JAVA入门级教学之(变量)

目录 关于java语当中的变量: 1、什么是变量? 2、数据类型的作用? 3、变量要求 4、声明/定义变量的语法格式: 5、变量声明之后怎么赋值? 6、声明和赋值可以放到一起完成 7、变量赋值之后,可以重新赋值&…

mysql添加timestamp有什么用_mysql中timestamp的使用

mysql中timestamp的使用mysql> CREATE TABLE t1 (-> id mediumint(9) NOT NULL auto_increment,-> name char(11) default NULL,-> rq timestamp default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,-> PRIMARY KEY (id)-> ) ;Query OK, 0 rows…

JAVAWEB企业级开发关于Tomcat的安装和配置

首先,我们来了解一下什么是JSP:动态网页 静态:规定不会变化 动态:随着时间、地点、用户操作改变而改变 1.动态网页: 需要使用到 服务器端脚本语言(JSP) 2.使用的架构: CS:Client Server 不足…

mysql中设置字符_MySQL中设置默认字符集的方法

对于默认字符集,让我们看一下语法-CREATE DATABASE IF NOT EXISTS yourDatabaseNameDEFAULT CHARACTER SET utf8DEFAULT COLLATE utf8_general_ci;让我们实现以上语法以设置默认字符集UTF8-CREATE DATABASE IF NOT EXISTS instant_app-> DEFAULT CHARACTER SET u…

mysql api 连接池_SpringBoot-整合HikariCP连接池

HikariCP连接池概述池化思想 池化思想是我们项目开发过程中的一种非常重要的思想,如整数池,字符串池,对象池、连接池、线程池等都是池化思想的一种应用,都是 通过复用对象,以减少因创建和释放对象所带来的资源消耗&…