javac是用来编译.java文件的。命令行下直接输入javac可以看到大量提示信息,提示javac命令的用法,常用格式如下:

javac -d ${destdir} ${srcFile} $如果destdir省略那么默认就是当前文件夹
javac StackStructureTest.java #编译java文件StackStructureTest.java,然后生成字节码文件StackStructureTest.class

打开cmd

注意!!!
直接通过 javac xxx.java命令生成的.class文件默认会有package

package 的作用就是 c++ 的 namespace 的作用,防止名字相同的类产生冲突。Java 编译器在编译时,直接根据 package 指定的信息直接将生成的 class 文件生成到对应目录下。
如 package aaa.bbb.ccc 编译器就将该 .java 文件下的各个类生成到 ./aaa/bbb/ccc/ 这个目录。import 是为了简化使用 package 之后的实例化的代码。假设 ./aaa/bbb/ccc/ 下的 A 类,假如没有 import,实例化A类为:new aaa.bbb.ccc.A(),使用 import aaa.bbb.ccc.A 后,就可以直
接使用 new A() 了,也就是编译器匹配并扩展了 aaa.bbb.ccc. 这串字符串。

通过javac -d . xxx.java命令即可在生成的字节码文件中首行不带package声明,而此时编译的字节码文件 xxx.class 在硬盘上的目录并未对应它的包名,所以,使用 java xxx 运行时是无法找到该类的的。会报找不到该文件错误,如下

错误: 找不到或无法加载主类 xxxx

而.class文件首行没有package,那么直接执行如下命令即可执行该字节码文件

java xxx

注意:java是运行命令,只能运行编译后的java字节码文件,java xxx注意格式:xxx数类名,不带java后缀名

总结
javac命令是将xxx.java文件编译生成xxx.class文件,java命令是执行xxx.class文件,注意使用java命令是xxx.class文件首行不能有package,因为package声明的路径不是该文件在硬盘的绝对路径而是相对路径,这样java就会报错误: 找不到或无法加载主类 xxxx,但只要首行没有package,java命令就会默认在当文件夹下去找xxx类,所以这也侧面证明java项目同一目录下不能有重名的class.

javap 主要用于帮助开发者深入了解 Java 编译器的机制,例如

StackStructureTest.java 文件如下

public class StackStructureTest {public static void main(String[] args) {int i = 2 + 3;System.out.println(i);}
}

StackStructureTest.class 文件如下,注意,这里是由IntelliJ IDEA从.class文件重新创建的源代码,也就是通过FernFlower反编译器提供的,真正的.class是一堆我们都看不懂的二进制格式。

public class StackStructureTest {public StackStructureTest() {}public static void main(String[] var0) {byte var1 = 5;System.out.println(var1);}
}

对StackStructureTest.class 文件执行javap -c StackStructureTest如下
补充,整个java程序执行的流程是 xxx.java => xxx.class => 被类加载器加载到jvm中 => 不同OS上的jvm讲xxx的汇编语言翻译成当前OS所能识别的二进制机器码。其中javap则是把xxx.class反汇编(解析)成汇编语言,如下

Compiled from "StackStructureTest.java"
public class StackStructureTest {public StackStructureTest();Code:0: aload_01: invokespecial #1                  // Method java/lang/Object."<init>":()V4: returnpublic static void main(java.lang.String[]);Code:0: iconst_5    #java文件中我们的命令int i = 2+3在编译期间即会生成5,也就等价于int i = 5,改名了即初试化第一个变量i的值为51: istore_1    #讲第一个变量(i)存储起来2: getstatic     # 创建输出流对象5: iload_16: invokevirtual #3                  // 执行sout方法9: return
}

java,javac,javap命令相关推荐

  1. java javac javap 命令使用简介

    首先我们来写一个简单的JavaTest方法,大致如下: package com.cuiyongzhi.io;public class JavaTest {public static void main ...

  2. cmd中java编译命令是什么_cmd中java的编译命令——java和javac、javap

    如题,首先我们在桌面,开始->运行->键入cmd 回车,进入windows命令行.进入如图所示的画面: 可知,当前默认目录为C盘Users文件夹下的Administrator文件夹.一般而 ...

  3. 【JVM】通过javap命令分析Java汇编指令

    文章目录 javap命令简述 javap测试及内容详解 例子1 例子2 总结 转载说明 javap命令简述 javap是jdk自带的反解析工具.它的作用就是根据class字节码文件,反解析出当前类对应 ...

  4. java -p_说说javap命令

    javap定义 javap是 Java class文件分解器,可以反编译(即对javac编译的文件进行反编译),也可以查看java编译器生成的字节码.用于分解class文件. 测试类 public c ...

  5. 通过javap命令分析java汇编指令

    一.javap命令简述 javap是jdk自带的反解析工具.它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令).本地变量表.异常表和代码行偏移量映射表.常量池等等信息. ...

  6. java se的命令文件_Java SE的命令文件(java、javac、javadoc等)所在目录是___

    Java SE的命令文件(java.javac.javadoc等)所在目录是___ 答:%JAVA_HOME%\\bin 智慧职教: 1-7.( )社会物流成本包括存货持有成本.运输成本和物流行政管理 ...

  7. 17下列命令中_哪个命令是java的编译命令?,下列命令中,哪个命令是Java的编译命令?A.java cB.javaC.java docD.applet viewer...

    下列命令中,哪个命令是Java的编译命令?A.java cB.javaC.java docD.applet viewer 更多相关问题 疯狂老鼠的刹车装置主要安装在轨道和站台. 当观览车运转中突然停电 ...

  8. java $p_javap -c命令详解

    一直在学习Java,碰到了很多问题,碰到了很多关于i++和++i的难题,以及最经典的String str = "abc" 共创建了几个对象的疑难杂症. 知道有一日知道了java的反 ...

  9. 【JVM】javap命令行分析(a++ + ++a)的虚拟机指令

    源代码 public class PlusTest {public static void main(String[] args) {int a = 2;System.out.println(a++ ...

最新文章

  1. linux内核版本 2.6.39,linux – 为什么这个内核模块在2.6.39上被标记为永久
  2. mongodb系列教程
  3. 「功能笔记」Spacemacs+Evil备忘录
  4. leetcode15 三数之和
  5. vue使用 xterm_为什么我坚持使用xterm
  6. Hibernate初步
  7. 用python建立socket,用python建立socket服务器
  8. C#在线预览文档(word,excel,pdf,txt,png)
  9. 用脚本运行Modelsim教程
  10. 转dmg 到iso。。。
  11. 计算机在中医方剂中的应用,利用网络技术实现计算机中医疾病及处方检索的应用方法专利_专利查询 - 天眼查...
  12. 6 种 Python 数据可视化工具
  13. 安川工业机器人实训心得_安川MOTOMAN工业机器人编程与操作(3)
  14. 本地缓存下载文件,download的二次封装
  15. ueditor+秀米
  16. pdf加密文件怎么解密?
  17. 手把手教你使用R语言做出SCI论文中的表二(单因素分析表)(1)
  18. Unity实现发光材质
  19. 《第四周RFID作业》物联112118 林家辉
  20. 测试中遇到不可重现的Bug处理办法

热门文章

  1. (转)深入理解Javascript闭包(closure)
  2. javascript系统系列:浅析js中的浏览器循环事件(eventLoop)
  3. react form表单 input和textarea用法
  4. NG RouteReuseStrategy(路由复用策略)
  5. JAVA-求整数序列中出现次数最多的数
  6. 7-135 二叉搜索树的2层结点统计
  7. android 不通过数据线打印日志_人人都可写代码-Android零基础编程-开发调试、APK编译04...
  8. 递增的整数序列链表的插入
  9. python requests cookiejar,Python requests模块cookie实例解析
  10. java 二维数组奇数金字塔_调整数组顺序使得奇数在前偶数在后(Java)