java javac 以及 javaw
java javac 以及 javaw
- 1.javac
- 2. java 和 javaw
1.javac
一个java程序运行的流程:
源码->编译(.java->.class)->运行(.class->启动jvm)
javac 的目的就是编译 将.java变成.class 将高级编程语言变成字节码 字节码不是机器码我记得是java提供的一种实现独立于底层硬件之外的方法, 因为大部分机器的机器码都是不一样的如果编译成机器码将会高度依赖于底层硬件, 所以这里编译成字节码实现硬件无关.
接下来我们看一下 javac 的编译流程
其中这里面的蓝色为javac的对应的类 红色的部分是对应的产出物
编译完成后最后是给JVM用的字节码对应了我们上面说的. 至于上面的词法分析器语法分析器对应了javac中的哪些类 可以去看一下 https://blog.csdn.net/u011983531/article/details/49430153
这里我们提两个类:
com.sun.tools.javac.parser—读取java源文件并创建语法分析树的类
com.sun.tools.javac.tree—表示java语言的被标注的语法树的类. 最顶层的节点Tree.TopLevel表示源文件的内容(应该是JCTree.TopLevel)
总结一下:
- java 的运行过程是 源码->编译(.java->.class)->运行(.class->启动jvm)
- javac 是java的编译器 将 .java编译成.class 将高级语言编译成java JVM能看懂的字节码
- javac 在 jdk/lib/tool.jar 中的 /com/sun/tools/javac
到这里有没有想起来配置环境变量的时候要在CLASSPATH中加入jdk/lib/tool.jar 是因为很多工具类都在里面 但是真正使得javac全局化的还是Path中添加的
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
有没有很奇怪一个毫不相关的路径怎么能使javac全局可见呢 进入bin之后找到了答案 下面是bin的截图
这里找到了 javac的可运行程序只有16KB因此应该是javac的快捷方式在bin下所以引入bin就实现了全局可见
这也是为什么java javaw javadoc等一系列命令在path中更改后都会变得全局可见, 但是正如之前说过的java 和 javaw不需要path这两条就能全局可见原因见Windows 10 配置 java 环境变量
2. java 和 javaw
在安装jdk后 电脑中会出现三个javaw,一个在jdk文件下的bin中,一个在jdk同目录的jre中,一个在windows/system32中,当然这三个目录中还有三个java.exe和javaws.exe。
那我们的程序会使用哪一个javaw来运行我们的程序呢。如果程序的配置文件中可以指定的,就用指定的。
使用的就是我们在环境变量中配置的,path下的,顺序靠前的那一个bin下的程序。
不同点:
- javaw.exe运行程序时不会输出控制台信息,如果是双击打开jar文件的话(假设已经设置好了打开方式),那么根本就不会出现控制台窗口,主要用来运行带窗体的应用程序,其中的“w”就是window的意思,所以用它来运行控制台程序时虽不会报错,但不会输出任何结果。而java.exe无论运行控制台程序,还是运行窗体程序都没有任何问题。
- 运行java命令时,会出现并保持一个console窗口,程序中的信息可以通过System.out在console内输出,而运行javaw,开始时会出现console,当主程序调用之后,console就会消失。
java javac 以及 javaw相关推荐
- javac.exe 、 java.exe、 javaw.exe 、 javaws.exe有什么区别?
最近用命令行执行jar包时,碰巧遇到了这个问题,有点感兴趣,查了大量资料之后,简单地写写我自己的总结,以供大家参考. 首先,我先贴上我主要参考的文章 一个是javapapers.com,另 ...
- 了解javac.exe、java.exe、javaw.exe
了解javac.exe.java.exe.javaw.exe 了解这些之前,先要了解一个java程序是怎么被开发的: 源码->编译(.java->.class)->运行(.class ...
- 【Java】辨析jvm.dll、java.exe、javaw.exe、javaws.exe
Eclipse运行程序 我们写的命令行程序和GUI程序,在Eclipse中运行程序,显示是使用了javaw.exe. 可是我们在刚接触Java的时候,基本只知道 java.javac 等命令,java ...
- java.exe和javaw.exe有什么区别?
先来科普的介绍下java.exe和Javaw.exe的基本概念和理论知识: java.exe和javaw.exe是Sun Microsystems公司的相关网络协议软件. 1.java.exe:运行j ...
- 【cmd运行java/javac/java -version不显示信息】
cmd运行java/javac/java -version不显示信息(空白处理办法) 1.原因:由于Java自动更新,为我们的环境变量的PATH中配置了C:\Program Files (x86)\C ...
- java javac javap 命令使用简介
首先我们来写一个简单的JavaTest方法,大致如下: package com.cuiyongzhi.io;public class JavaTest {public static void main ...
- 安装了超图、oracle、eclipse、JDK后系统的java进程情况以及java.exe、javaw.exe
发现系统java进程占用内存高:高时达500M: 展开查看详情,从电脑管家的内存管理中看不出所以然: Eclipse是另外单独的进程: 进入任务管理器,看到第一个java应用是超图服务器:占内存比较高 ...
- linux java javac版本_linux下java 和 javac version 不一致问题
centos下 我新安装了个jdk1.7的版本 ,vi profile 之后 java -version 是新版本,想在看看javac -version 发现还是1.6的 之前安装了1.6的 那好咱就 ...
- java javac编译与JIT编译
编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现.很容易看出,上图中 ...
- 如何在Linux下使用java,javac命令
java命令 使用java命令需要安装jdk,并且配置环境变量才可以使用. 配置环境变量需要更改/etc/profile文件. 输入指令: vim /etc/profile 进入到文件中,如图使用G命 ...
最新文章
- VR变革已来!华为完成业界首个5G实验网下Cloud VR业务验证
- ASP.NET 获取上一个页面的Url链接
- 运用Smark.SocketAsyncs方便实现数据交互服务
- asp.net简单的注册或者登陆三层架构的例子
- oracle long类型转换成字符串_数值类型在计算机中的保存形式以及类型转换的思考和尝试...
- python-json
- javascript 日期控件
- C语言面试题之华为篇2(答案全)
- Atitit onvif 协议截图 getSnapshotUri 使用java
- 管理信息系统复习总结(保姆级)
- 直播功能引入微信小程序
- 时间序列相似性度量-DTW
- HTML前端开发入门之表单标签/labei标签/datalist标签
- SQL的删除语句delete(删除表中的数据)
- Windows下安装与配置Docker
- GRU时间序列数据分类预测
- authority解读
- 【通信学习】一些5G基本概念
- SOA面向服务架构:通信逻辑与SOME/IP消息格式
- Ripple(瑞波)会是下一个金融科技巨头吗?