windows命令行中java和javac、javap使用详解(java编译命令)

更新时间:2014年03月23日 11:53:15   作者:    我要评论

http://www.jb51.net/article/48380.htm

学习一下java
 
最近重新复习了一下java基础,这里便讲讲对于一个类文件如何编译、运行、反编译的。也让自己加深一下印象
 

如题,首先我们在桌面,开始->运行->键入cmd 回车,进入windows命令行。进入如图所示的画面:

可知,当前默认目录为C盘Users文件夹下的Administrator文件夹。一般而言,我们习惯改变当前目录。由于windows有磁盘分区,若要跳到其他磁盘,例如E盘,有几种方法:

1、输入命令: pushd 路径(此命令可将当前目录设为所希望的任一个已存在的路径)

2、输入命令: e:  转移到e盘,然后再输入 cd 转移到所希望的已知路径。

如图:

希望在windows命令行下使用javac、java、javap等命令,那么当前电脑必须安装了jdk,并且将jdk的bin目录添加到环境变量path下了。这个不用多说。那么让我们看一下如何使用javac、java、javap吧。

一、javac

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

javac -d destdir srcFile

其中:1、-d destdir是用来指定存放编译生成的.class文件的路径。(若此选项省略,那么默认在当前目录下生成.class文件,并且没有生成包文件夹;当前目录可以用“.”来表示,即:javac -d . srcFile )

注意:添加-d选项除了可以指定编译生成的.class文件的路径外,最大的区别是可以将源文件首行的package关键字下的包名在当前路径下生成文件夹。

2、srcFile是源文件.java文件的路径。

例如:有这样一个简单的java类,路径为E:\test\JavacTest.java:

复制代码代码如下:
package com.stopTalking.test;      public class JavacTest {          public static void main(String[] args) {       
        byte a = 5;        
        short b = 6;        
        System.out.println("JavacTest [a=" + a + ", b=" + b +  "]");        
    }        
}

当前路径下,输入 javac JavacTest.java ,便在当前路径下生成了一个JavacTest.class的文件,如图:

注意:JavacTest.java是一个首行标注了package的java文件,而此时它在硬盘上的目录并未对应它的包名,所以,使用java com.stopTalking.test.JavacTest运行时是无法找到该java的。

若输入,javac –d . JavacTest.java ,那么生成的JavacTest.class便在当前目录下生成的包文件中了,如图:

二、java

此时,我们希望运行该类,在大部分的教材中,使用java JavacTest便可直接运行,可是我们发现出现这样的错误:

这是因为,大部分的教材使用的类是默认包名的,即源文件的第一行是没有package指定包名的。使用一个类,我们知道,是需要使用它的全限定类名的。

所以,我们在命令行输入:java com/stopTalking/test/JavacTest,便可看到正确的结果了:

总结:使用简单的java命令运行一个.class文件,不仅需要使用该类的全限定类名,而且需要在当前路径下有该类的包层次文件夹。这必须要求编译时使用-d选项。否则需要自己来建立包层次文件夹。

三、javap

javap主要用于帮助开发者深入了解Java编译器的机制,主要选项有:

-c 分解方法代码,即显示每个方法具体的字节码

-public | protected | package | private 用于指定显示哪种级别的类成员

-verbose 指定显示更进一步的详细信息

输入 javap -c com/stopTalking/test/JavacTest,显示如图:

您可能感兴趣的文章:

【转帖】windows命令行中java和javac、javap使用详解(java编译命令)的更多相关文章

  1. windows命令行中java和javac、javap使用详解(java编译命令)

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

  2. Shodan搜索引擎详解及Python命令行调用

    shodan常用信息搜索命令 shodan配置命令 shodan init T1N3uP0Lyeq5w0wxxxxxxxxxxxxxxx //API设置 shodan信息收集 shodan myip ...

  3. Java中堆内存和栈内存详解2

    Java中堆内存和栈内存详解   Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,ja ...

  4. 转:Java中的equals和hashCode方法详解

    转自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这 ...

  5. adb shell命令模拟按键/输入input使用keycode 列表详解

    在adb shell里有一个非常使用的命令,模拟按键输入,这里首先不要理解为是键盘的模拟按键,下面命令的使用和键值做一个详解. input命令格式 adb shell input keyevent & ...

  6. 「跬步千里」详解 Java 内存模型与原子性、可见性、有序性

    文题 "跬步千里" 主要是为了凸显这篇文章的基础性与重要性(狗头),并发编程这块的知识也确实主要围绕着 JMM 和三大性质来展开. 全文脉络如下: 1)为什么要学习并发编程? 2) ...

  7. [译]Java Thread join示例与详解

    Java Thread join示例与详解 Java Thread join方法用来暂停当前线程直到join操作上的线程结束.java中有三个重载的join方法: public final void ...

  8. (转)Java并发包基石-AQS详解

    背景:之前在研究多线程的时候,模模糊糊知道AQS这个东西,但是对于其内部是如何实现,以及具体应用不是很理解,还自认为多线程已经学习的很到位了,贻笑大方. Java并发包基石-AQS详解Java并发包( ...

  9. java.util.logging.Logger使用详解 (转)

    http://lavasoft.blog.51cto.com/62575/184492/ ************************************************* java. ...

随机推荐

  1. 51 Nod 1092 回文字符串

    1092 回文字符串  基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串.每 ...

  2. POJ 2109 Power of Cryptography 数学题 double和float精度和范围

    Power of Cryptography Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 21354 Accepted: 107 ...

  3. Centos 7自定义屏幕分辨率

    $ xrandrScreen 0: minimum 1 x 1, current 1680 x 900, maximum 8192 x 8192Virtual1 connected primary 1 ...

  4. simple queue(简单队列)

    Virtual host-虚拟主机 虚拟主机,用于进行逻辑隔离,是最上层的路由,类似于redis的16个db,是一种逻辑上的隔离 一个virtualhost里面可以有若干个Exchange和Queue ...

  5. kali安装与配置

    闲来没事,把kali虚拟机重新装到了电脑上,记录下步骤 1.在kali官网(https://www.kali.org/downloads/)直接下载的.ova虚拟机,因为之前从官网下载的iso文件不知 ...

  6. isEmpty和isBlank区别

    isEmpty 判断某字符串是否为空,为空的标准是 str==null或 str.length()==0 StringUtils.isEmpty(null) = true StringUtils.is ...

  7. setHasFixedSize(true)的意义 (转)

    RecyclerView setHasFixedSize(true)的意义 2017年07月07日 16:23:04 阅读数:6831 <span style="font-size:1 ...

  8. C++ STL 中 map 容器

    C++ STL 中 map 容器 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它 ...

  9. XPATH了解

    特殊标签 找SVG这种特殊标签可以使用[name()='svg'],如//[name()='svg']/[name()='line'][2] 文本 找标签内的文本时可以使用: //*[text()=' ...

  10. vsftpd 配置上传失败553

    1查看ftp服务 ftp://ftpuser:123456@10.11.102.58:8023 2 getsebool -a | grep ftp 临时关闭 [root@xuegod63~]# get ...