Java程序运行机制

Java程序要经过先编译,后解释两个步骤

编译型:高级语言源码 -->机器码(一次性)    生成可执行程序,脱离开发环境,在指定平台上运行。(C/C++/Objective-C/Swift/Kotlin)

解释型:每执行一次,都需要编译一次,效率低,可移植性高(JavaScript/Ruby/Python)

伪编译型:

Java编译后生成的是与平台无关的字节码(*.class文件),该字节码文件面向JVM,用Java解释器可以来解释执行这个字节码文件。

JVM(Java Virtual Machine)负责解释字节码文件,任意平台的JVM向编译器提供相同的编程接口(任意平台JVM内部不同),而编译器只需要面向JVM,生成JVM能理解的代码,然后由JVM来解释执行。在一些JVM的实现中,还会将JVM代码转换成特定系统的机器码实现,从而提高执行效率。

JVM是Java跨平台的关键部分。

开发Java的准备

下载安装JDK(包括Java编译器、Java运行时环境(JRE)、常用Java类库),即Java标准版开发包

JRE包含JVM,JVM是核心虚拟机,JRE还包含运行Java程序的其他环境支持。

ps:如果只是运行Java程序,可以只安装JRE。如果要开发,下载JDK即可,JDK包含JRE。

Java分为:Java SE(JDK)  、Java  EE (Java EE SDK->包含最新版JDK) 、Java  ME 。

开发工具:JDK核心,包含了JRE

源代码:Java核心类库的源代码

公共JRE:一个独立的JRE系统,会向IE等浏览器和系统注册Java运行时环境,这样系统中任何应用程序都可以使用公共JRE。但是JDK里有JRE,没必要安装公共JRE

ps:安装路径最好没有空格。

JDK 9 引入新的JMOD格式,近似JAR格式,但JMOD可以包含本地代码和配置文件。

设置PATH环境变量

windows操作系统在Path的一系列路径中依次查找命令

Linux设置PATH环境变量:

①进入当前用户的home路径,然后输入:ls -a

②使用无格式编辑器打开 .base_profile 文件

③在该文件的PATH变量后添加JDK安装路径

④在.base_profile 文件最后添加导出PATH变量的语句

⑤重新登录Linux平台,或者执行如下命令,为了运行该文件,让文件设置中PATH变量值生效

第一个Java程序

Java源代码可以使用任何无格式的文本编辑器(Windows->记事本/Editplus  |  Linux->VI)

在记事本中新建一个文本文件,并输入如下代码:

Java严格区分大小写

将上述文件保存为HelloWorld.java,该文件就是Java程序的源程序了。

接下来就是编译该Java源文件来生成字节码。

编译命令:javac

javac -d destdir srcFile

通常将字节码文件放在当前路劲下

javac -d . HelloWorld.java

运行后在指定路径下会生成一个HelloWorld.class文件

javac以类为单位生成相应的字节码文件,并且编译命令中省略 -d ,则默认为当前路径。

ps:还可以使用Editplus

运行Java程序

运行命令:java

java Java类名

ps:java命令后面的参数是Java类名,不是字节码的文件名,也不是源文件名。

先通过命令行进入HelloWorld.class所在的路径

输入:

java HelloWorld

可以看到输出

ps:同样可以使用Editplus

CLASSPATH环境变量:

在1.4以前版本的JDK中没有设计在运行Java程序时到当前路径下搜索Java类。也就意味着,即使当前路径已经包含了HelloWorld.class ,并在当前路径下执行java命令,系统一样提示找不到HelloWorld 类。

JDK 1.5以上的版本也可以设置CLASSPATH环境变量(通常用于加载第三方类库)

如果想在运行Java程序时临时指定JRE搜索Java类的路径,则可以使用-classpath选项(或用-cp选项,-cp是简写,作用完全相同)

java -classpath dir1;dir2;dir3...;dirN Java类

多个路径在windows平台上以分号隔开,在Linux上以冒号隔开。

Java学习笔记——第1篇的更多相关文章

  1. java学习笔记之基础篇

    java选择语句之switch   //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...

  2. Java学习笔记——第2篇

    Java程序的基本规则 Java程序的组织形式:纯粹的面向对象的程序设计语言,所以Java程序必须以类的形式存在,类是Java程序的最小程序单位,Java程序不允许可执行语句.方法等成分独立存在,所有 ...

  3. Java学习笔记——第3篇

    面向对象 结构化程序的任何一个结构都具有唯一的入口和唯一的出口,并且程序不会出现死循环. 虽然Java是面向对象的,但Java的方法里则是一种结构化的程序流. 面向对象的基本思想:类.对象.继承.封装 ...

  4. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  5. 20145330第十周《Java学习笔记》

    20145330第十周<Java学习笔记> 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就 ...

  6. 20145330第九周《Java学习笔记》

    20145330第九周<Java学习笔记> 第十六章 整合数据库 JDBC入门 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JD ...

  7. 20145330第八周《Java学习笔记》

    20145330第八周<Java学习笔记> 第十五章 通用API 通用API 日志:日志对信息安全意义重大,审计.取证.入侵检验等都会用到日志信息 日志API Logger:注意无法使用构 ...

  8. 20145330第七周《Java学习笔记》

    20145330第七周<Java学习笔记> 第十三章 时间与日期 认识时间与日期 时间的度量 GMT(格林威治标准时间):现在不是标准时间 世界时(UT):1972年UTC出来之前,UT等 ...

  9. 20145330第六周《Java学习笔记》

    20145330第六周<Java学习笔记> . 这周算是很忙碌的一周.因为第六周陆续很多实验都开始进行,开始要准备和预习的科目日渐增多,对Java分配的时间不知不觉就减少了,然而第十和十一 ...

随机推荐

  1. LODOP打印table不切行TableRowThickNess

    不切行的调整方法有三种:1.简单表格,不嵌套合并等,可以用ADD_PRINT_TABLE输出,该 语句不切行,相关博文:LODOP设置超文本不自动分页的方法.2.进入打印设计,调整打印项到合适的高度, ...

  2. JS获当前网页元素高度offsetHeight

    本文测试的是offsetHeight,获取网页中某元素的高度,单位是像素,获取的类型是整型,可以进行数字运算.如图,网页中的元素本身的高度包括,自身的内容+padding+border,而margin ...

  3. mssql的update :from语法

    一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据.我们先来讨论根据其他表数据更新你要更新的表 一.MS    S ...

  4. 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计

    前言 近来公司需要构建一套 EMM(Enterprise Mobility Management)的管理平台,就这种面向企业的应用管理本身需要考虑的需求是十分复杂的,技术层面管理端和服务端构建是架构核 ...

  5. 斐波那契数列&&上台阶

    使用装饰器的场景 当我们想对多个函数增加一个相同的功能时,例如计数统计,缓存计算结果,记录日志等 # coding:utf-8 # [题目1] # 斐波那契数列 又称黄金分割数列,指的是这样的一个数列 ...

  6. Andrew Ng机器学习课程9-补充

    Andrew Ng机器学习课程9-补充 首先要说的还是这个bias-variance trade off,一个hypothesis的generalization error是指的它在样本上的期望误差, ...

  7. 找出整数数组中出现次数超过数组长度一半的元素(Java)

    Question:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字 package com.study.zhipengs.test; import java.util.Arrays; im ...

  8. eclipse的maven中需要把jar的包文件登入到自己的仓库里面的操作

    问题的描述 从别人那拿到了Java maven的工程,导入自己的eclipse中之后编译的时候出现包文件找不到,之后把工程进行maven的update project之后,pom.xml文件出现错误, ...

  9. qbittorrent搜索在线插件

    https://raw.githubusercontent.com/khensolomon/leyts/master/yts.py https://raw.githubusercontent.com/ ...

  10. 任务调度之Quartz.Net配置文件

    前面介绍的任务的创建执行是通过代码来实现的,当要添加一个任务的时候就非常的不灵活,做不到热插拔.而通过配置文件的方式实现配置化,可以做到在添加一个任务的话,我们可以新建一个类库来定义Job做到热插拔. ...