命令行环境下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. [TypeScript] Using Lodash in TypeScript with Typings and SystemJS

    One of the most confusing parts of getting started with TypeScript is figuring out how to use all th ...

  2. Linux 安装 Python3.5

    1. 准备 操作系统:Red Hat Enterprise Linux Server release 6.5 (Santiago) Python 安装包:Python-3.5.2.tgz 下载地址:h ...

  3. 【Android】数据存储-SharedPreferences存储

    简单介绍:SharedPreferences是使用键值对的方式来存储数据的,也就是说,当保存一条数据的时候,给这条数据提供一个键,如果需要读取数据,只需要通过这个键就可以提取到对应的数据. 一:存储数 ...

  4. bash登录式shell(完全切换)与非登陆式shell(不完全切换)区别

    1.以登录式shell切换用户 su - username 登录式shell读取配置文件及其顺序: /etc/profile /etc/profile.d/*.sh ~/.bash_profile ~ ...

  5. webservice未能加载文件或程序集“**.DLL”或它的某一个依赖项。

    方法1.C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files先删除这个下面所有的文件,然后把bin里面的引用的dl ...

  6. 在MessageBox的Show方法中如何无限使用参数值?

    今天发现在show方法中不能使用花括号的方式使用多个可变参数,经过查询得出结果.在show方法中是不存在花括号的方式使用参数的.在Console.WriteLine中是存在的,如下: 那么在show方 ...

  7. SQL循环+游标

    /****** Script for SelectTopNRows command from SSMS  ******/use DB  declare @id bigint   DECLARE cur ...

  8. Android Studio 2.2 HTTP proxy setting 提示异常

    操作系统 :MacOS 10.11.6 IDE :Android Studio 2.2 Java Version :1.8 异常现象描述: 在给Android Studio 2.2设置代理时,出现警告 ...

  9. 关于AfterLogic WebMail 的.net版无法上传控件的解决办法

    在使用AfterLogic WebMail做客户端的时候发现无论是在FF下还是在IE下发送邮件时附件怎么也无法上传,后来查看代码发现它使用的FLASH上传调用的上传代码是upload.php,问题就出 ...

  10. js获取UserControl (<uc1>)控件ID

    ASPX: <table> <tr> <td> <uc1:uccalendar id="ucXudaxia" runat="se ...