命令行环境下Java编译运行

1. java的运行机制的基本概念:

源文件 也就是我们熟知的.java文件。

类文件  .class文件是编译器由.java文件编译而成。众所周知,Java的跨平台性在于Java虚拟机(JVM)这一层对硬件的隔离,而.class文件可以理解为JVM中的执行文件(自己的理解,可能不太准确)。里面存储的是java字节码,javabytecode 是基于栈的(stackbased)(关于字节码和JVM更详细的官方解释可以参照 The JavaVirtual Machine Specification ,如果嫌那本书太厚,另外再推荐一本 Programmingfor the Java Virtual Machine)。

编译 Java的编译一般是指从源文件(.java文件)到类文件(.class文件)的转化过程。在JDK命令行中是 javac 命令(javacompiler的缩写~跟C语言木关系的~)

运行 在JVM中执行.class文件。是 java 命令。

2. linux 下安装jdk

首先在linux下安装jdk,如果出现提示权限不够(且root下也提示权限不够),可用#ls-l filename命令查看一下,如果显示类似如:

-rw-rw-rw- 1 root root ….

则表示任何用户都没有可执行权限(即使是root用户)。

解决方法:

#chmod a+x filename

这样,安装好后,就可以接下来进行环境变量的配置了。

我们需要设置三个环境变量:JAVA_HOME、PATH 和 CLASSPATH。

JAVA_HOME:该环境变量的值就是 Java 所在的目录,一些 Java 版的软件和一些 Java 的工具需要用到该变量,设置 PATH 和 CLASSPATH 的时候,也可以使用该变量以方便设置。

PATH:指定一个路径列表,用于搜索可执行文件的。执行一个可执行文件时,如果该文件不能在当前路径下找到,则依次寻找 PATH 中的每一个路径,直至找到。或者找完 PATH 中的路径也不能找到,则报错。Java 的编译命令  (javac),执行命令 (java)和一些工具命令 (javadoc, jdb 等) 都在其安装路径下的 bin 目录中。因此我们应该将该路径添加到 PATH 变量中。

CLASSPATH:也指定一个路径列表,是用于搜索 Java 编译或者运行时需要用到的类。在 CLASSPATH 列表中除了可以包含路径外,还可以包含.jar 文件。Java 查找类时会把这个  .jar 文件当作一个目录来进行查找。通常,我们需要把 JDK 安装路径下的 jre/lib/rt.jar (Linux: jre/lib/rt.jar)包含在 CLASSPATH 中。

PATH 和 CLASSPATH 都指定路径列表,列表中的各项 (即各个路径) 之间使用分隔符分隔。在 Windows 下,分隔符是分号 (;),而在 Linux 下,分隔符是冒号  (:)。

目前这两步,服务器JDK安装和环境变量设置都已经弄好了。

3. 编译运行命令

编译

javac [-d] [-o] [-verbose] [-classpath][-sourcepath]

-d, 指定生成的.class文件存放目录,一般省略则默认放在java源文件同一目录下

-o, 这个选项告诉javac优化内联的static,final以及privite成员函数所产生的码。

-verbose,此选项告知java显示出有关被编译的源文件和任何被调用类库的信息。如-verbose:class能看到各种加载的信息,-verbose:gc 是garbagecollection 的信息

-classpath,设定要用到的类路径,可以是目录,jar文件,zip文件(里面都是class文件),值得注意的是,此classpath中的内容是会覆盖掉环境变量CLASSPATH里面的设定。也可以省略,省略则默认使用环境变量$CLASSPATH路径。

所以一般classpath的设定都是:当前目录加环境变量CLASSPATH设置目录,如

javac  -classpath .:$CLASSPATH    abc.java java基本类一般都在JDK环境变量$CLASSPATH中指定好路径了

自己需要用到的第三方类一般都放在文件当前目录下,用.指定路径即可

若自己需要添加一些类可以在.:$CLASSPATH后面添加“:类的具体路径”。

-sourcepath, 设定要编译的java文件路径,可以是目录,jar文件,zip文件(里面都是java文件)。

若编译的是jar包中的主类文件abc.java时,一般编译整个包javac edu.test.jar或者包文件夹javac ./edu/test。

一般当java文件中有多个需要编译时,可以逐一列出,也可以将文件名列在一个文件中,名称间用空格或者回车行来进行分隔,然后在命令行中使用该列表名,名字前冠以@字符,如:

javac @usr/test/sourcefile.list             目录usr/test 下的sourcefile.list

说明

1)一般,对于只有一个出口主函数main,其他java文件是以内联类的形式被主函数调用的多个java文件组成的工程来说,编译时只需要对出口主函数main所在java文件编译即可,工程中的其他java文件会自动关联编译。

2)对于程序中调用到了第三方类或者package的情况,则一般先需要在程序文件中加入import第三方类或者jar包.*  如

import edu.test.abc  引用jar包edu.test下的abc.java,如果直接引用文件夹的话,则是edu/test文件夹下的abc.java文件。为稳妥,一般都引用整个包内文件import edu.test.*。

(jar包名对应文件夹路径,将某个路径文件夹下的所有java文件进行打包即为jar包,引用时可以直接引用文件夹)

编译时需要将jar包路径或者文件夹根目录,如edu的路径加入到classpath中。一般常把jar包或者根文件夹拷贝到当前目录下,指定classpath为.,编译器自动会从当前目录开始寻找。

运行

java [-classpath] [-sourcepath]

-classpath和编译时一致,指定运行时要搜索的类路径。需要注意的是,由于所要执行的类也是要搜索的类的一部分,所以一定要把这个类的路径也放到classpath设置里,故在要执行的类的路径里执行java命令时,一定要加上.表示当前目录也搜索。

-sourcepath 指需要运行的目标文件名(不要后缀名),如编译javac a.java则运行java a。若运行的是jar包中的主类文件时需要指出包路径并要在class名前带上完整的包名,如java edu,test.abc。且该包的根目录(edu所在文件夹路径)需要包含在classpath中。

说明:

1)文件搜索时,系统只会向下,从指定目录向其子目录搜索,不会溯源向其父祖目录搜索。

2)运行时,classpath应同时包含执行的目录和调用类的目录,一般两者放在同一根目录下,运行时在根目录下运行。不然会出现错误找不到运行的main函数。如

调用的类文件./com/bao/ws/h.class,执行文件为./com/bao/bs/a.class,classpath应包含.路径

Linux下Java 编译运行说明的更多相关文章

  1. Windows/Linux javac/java编译运行引入所需的jar包

    > Windows 假设要引用的jar放在D:/test目录下,名字为t1.jar, java源文件放在D:/test/src目录下,名字为t2.java. 编译: javac  -cp  d: ...

  2. linux下怎么编译运行C语言程序?

    linux下的C语言编译器是gcc,C++的编译器是g++. linux下编程可以使用编辑器vi或vim,建议使用vim,因为它有语法高亮显示.程序编写好后,假设你的程序名为test.c,可以使用gc ...

  3. linux下如何编译运行c程序

    GCC是Linux操作系统下一个非常重要的源代码编译工具,有着许多重要的选项,支持许多不同语言的编译,如C.C++.Ada.Fortran.Objective.Perl.Python.Ruby以及Ja ...

  4. 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序

    如何用javac 和java 编译运行整个Java工程 (转载)  http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...

  5. Windows/Linux下引用jar包,并用javac/java编译运行

    Windows/Linux下引用jar包,并用javac/java编译运行,有需要的朋友可以参考下. 1> Windows 假设要引用的jar放在D:/test目录下,名字为t1.jar, ja ...

  6. JAVA 基础开发环境 vscode 搭建 Windows下VSCode编译运行简单java

    JAVA 基础开发环境 vscode 搭建 来源 https://www.cnblogs.com/freewsf/p/7744728.html 对于使用 Visual Studio Code 的 Ja ...

  7. Linux下java nohup 后台运行关闭后进程停止的原因,不挂断后台运行命令

    Linux下java nohup 后台运行关闭后进程停止的原因,不挂断后台运行命令 今天写sh脚本发现一终止命令程序就停止运行了,检查了很久才发现后面少了个&字符导致的!错误写法:nohup ...

  8. linux下java调用.so文件的方法1: JNI

    摘自http://blog.163.com/squall_smile/blog/static/6034984020129296931793/ https://my.oschina.net/simabe ...

  9. linux下Java环境的配置

    linux下Java环境的配置 现在用linux的朋友越来越多了,前几天就有两个朋友问我linux下怎么配置java环境,我想还有很多朋友想了解学习这方面的东西,就写一个完全一点的linux java ...

随机推荐

  1. UVM:8.2.4 factory 机制的调试

    1.UVM提供了print_override_info 帮助debug.以上节new_monitor 为例: 2.调用print_override_info : 结果: 实际调用debug_creat ...

  2. Linux系统调优1

    Linux在进行系统调优的时候,首先要考虑整个操作系统的结构,然后针对各个部分进行优化,下面展示一个Linux系统的各个组成部分: 有上图可以看出,我们可以调整的有应用程序,库文件,内核,驱动,还有硬 ...

  3. linux下配置php Apache mysql

    一 Apache部分 http://www.cnblogs.com/bluewelkin/p/3805107.html里面是纠正了原文的一些小错误,即可正常安装 1.su 命令2.安装apr-1.3. ...

  4. request对象多种方法封装表单数据

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, ...

  5. CentOS6.5一键安装MySQL5.5.32(源码编译)

    ###################################################mysql_install.sh                                 ...

  6. [转] Putty - 文件夹显示的蓝色太暗

    Putty SSH key的后缀为ppk 默认文件夹的颜色显示为ANSI Blue,颜色太暗. ANSI Blue : RGB(0, 0, 187) 将ANSI Blue修改为和ANSI Blue B ...

  7. JavaScript的DOM操作(二)

    一:window.history对象 历史记录,通过历史记录可以操作页面前进或者后退 window.history.back();后退 window.history.forward();前进 wind ...

  8. pc机安装centos6.5,提示sda必须有一个GPT磁盘标签处理

    1.在进入安装界面,也就出现图形界面时,对它命令首先创建gpt --按ctrl+alt+f2的组合键,然后进入命令行 --进行如下操作输入parted输入mklabel gpt /dev/sda在提示 ...

  9. java web 中的转发和重定向

    假设应用程序的 contextPath 为 /ctx,在 http://localhost:8080/ctx/a/b 资源中,我们转发和重定向到 http://localhost:8080/ctx/x ...

  10. 曾经感动过我们的文字 今天是否还有印象?——v1

    ①人最宝贵的东西是生命.生命对人来说只有一次.因此,人的一生应当这样度过:当一个人回首往事时,不因虚度年华而悔恨,也不因碌碌无为而羞愧;这样,在他临死的时候,能够说,我把整个生命和全部精力都献给了人生 ...