`
allen413
  • 浏览: 95751 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Java中带包的类的编译与执行 .

 
阅读更多

Java 中带包的类的编译与执行

HelloWorld.java 为例( 假设该文件的位置是/home/HelloWorld.java):

package a.b;
public class HelloWorld{
 public static void main(String[] args){
  System.out.println("Hello World!");
 }
}

 

下面根据不同的编译方法来讨论:


第一种编译方法( 编译直接生成class 文件,执行需先创建包的路径)
假设当前目录为/src/java/ ,则编译命令为:javac HelloWorld.java

补充: javac 工具读取用 Java 编程语言编写的类和接口定义,并将它们编译成字节码类文件。缺省情况下,编译器将每个类文件与其源文件放在同一目录中。 此处使用缺省的javac则编译完后产生的类文件(.class文件)会在与源文件(.java文件)在同一目录下,此时编译不会产生a目录、b目录。
假设当前目录为/src/ ,则编译命令为:javac /src/java/HelloWorld.java 或者使用相对路径:javac java/HelloWorld.java 执行完该命令后,/src/java/ 目录下生成一个HelloWorld.class 文件。执行文件(在java 目录下新建目录a ,在a 目录下新建目录bHelloWorld.class 至于b 目录下;执行java a.b.HelloWorld ),必须要按照包的结构先创建目录。

第二种编译方法( 编译直接生成包的路径)
假设当前目录为/src/java/ ,则编译命令为:javac -d . HelloWorld.java

补充:javac -d . *.java 命令中的 “-d”则是设置类文件的目标目录。如果某个类是一个包的组成部分,则 javac 将把该类文件放入反映包名的子目录中,必要时创建目录。 在此处会自动创建c目录、d目录。在d目录下生成编译后的类文件(HelloWorld.class
说明:"." 为指定编译路径为当前目录;生成的HelloWorld.class 所有目录为/src/java/a/b/HelloWorld.class
javac -d c/d HelloWorld.java
说明:c/d 为指定编译路径为/src/java/c/d ,同样也可以写成绝对路径如javac -d d:/ HelloWorld.java ,前提是路径必须先存在;生成的HelloWorld.class 所有目录为/src/java/c/d/a/b /HelloWorld.class
假设当前目录为/src/ ,则编译命令为:javac -d . java/HelloWorld.java
说明:生成的HelloWorld.class 所有目录为/src/a/b/HelloWorld.class
javac -d java/c/d java/HelloWorld.java
说明:生成的HelloWorld.class 所有目录为/src/java/a/b/HelloWorld.class

第三种编译方法(先把源文件按照包结构放到指定的目录中,然后执行编译命令)
假设当前目录为/src/java/,先在目录中创建目录/a/b,然后编译命令:
javac a/b/HelloWorld.java

下面总结一下对于带包的类进行编译和执行时的一些要点:
1、编译时可以不考虑包结构的问题,不论用哪种方法,其实本质都是一样的,只需要让javac命令找到所需要编译的原文件(*.java)即可。编译时可以用相对或者绝对路径来为javac命令提供源文件的位置信息。
2、初学者易混淆classpath的作用,对于java命令的-cp选项和javac命令的-classpath选项,以及配置环境变量时的 CLASSPATH.其作用是不变的:都是指定所需要的class文件的位置。所不同的是,执行javac编译时的-classpath选项用于指定被编译的源文件需要调用另外的用户自定义类的位置.。执行java命令是根据classpath来寻找所需要执行的class文件的位置;而javac命令不能根据classpath来找源文件,只能根据classpath来寻找所需要用到的类。 

下面举例来说明该问题:
假设以下代码(位置:/src/java/code/a/b/TestT.java):

package a.b;
import c.d.T;
public class TestT {
   public static void main(String[] args) {
    T t = new T();
    t.p();
  }
}

 

引入的文件(位置:/src/java/code/tmp/c/d/T.java)

package c.d;
public class T {
   public void p(){
    System.out.println("class:T");
   }
}

 

假设现在编译两个文件(目录:/src/java/),则编译命令为:javac -classpath code/tmp code/a/b/TestT.java 执行命令为:java -cp code;code/tmp a/b/TestT 

如果当前目录为:/src/java/code/,则编译命令为:javac -classpath tmp a/b/TestT.java执行命令为:java -cp .;tmp a/b/TestT    


假设现在编译不同磁盘的三个文件(目录:e:/src/java/),则编译命令为:
假设以下代码(位置:e:/src/java/code/a/b/TestT.java):

package a.b;
import c.d.T;
import e.f.T1;
public class TestT {
  public static void main(String[] args) {
   T t = new T();
   t.p();
   T1 t1 = new T1();
   t1.p();
  }
}

 

引入的文件1(位置:d:/java/code/tmp/c/d/T.java)

package c.d;
public class T {
  public void p(){
   System.out.println("class:T");
  }
}

 引入的文件2(位置:c:/code/tmp/e/f/T1.java)

package e.f;
 public class T1 {
  public void p(){
   System.out.println("class:T1");
  }
}

 如果当前目录为:e:/src/java/
编译命令为:javac -classpath d:/java/code/tmp;c:/code/tmp code/a/b/TestT.java执行命令为:java -cp code;d:/java/code/tmp;c:/code/tmp a/b/TestT

说明:javac命令中的classpath必须指定引入类的路径;同样java命令中的cp必须引入引入类的class的路径也需指定执行类的路径

分享到:
评论

相关推荐

    Java动态编译Java代码,运行在内存中,并执行

    获取当前执行的classpath的所有jar包的路径 * 3.通过java的ToolProvider创建JavaCompile,用来执行class源文件 * 4.创建DiagnosticCollector用来执行获取执行失败的错误结果 * 5.添加动态执行的编译环境 options ...

    JAVA--包的编译

    第一种编译方法( 编译直接生成class 文件,执行需先创建包的路径) 第二种编译方法( 编译直接生成包的路径) 。。。。。。

    服务器 使用脚本打包编译java项目

    服务器 使用脚本打包编译java项目 包含了使用svn下载代码,ant编译打包,发布 等所有的过程

    java反编译项目工程-可以将class 文件进行修改重新导包生成修改后的jar

    java反编译项目工程,可以将class 文件 进行 修改 重新导包 生成修改后的jar 步骤 1、将需要修改的 jar 包 放入 lib 目录下,并加入项目中 ,选中 jar 右击 选择 add a libray这个时候会看到 jar 的 目录 结构 2、...

    java打包后jar包反编译工具

    java打包后jar包反编译工具,反编译源码,可以破解源码,查看相关源码已亲测,非常好用再也不用担心编译后版本代码找不到了!!在Java开发过程中,反复编译是一个常见的问题,特别是在大型项目或者需要频繁修改代码...

    java 程序都编译成执行文件jar命令详解

    但是 JET 是要用钱买的,而且据说 JET 也不是能把所有的 Java 程序都编译成执行文件,性能也要打些折扣。所以,使用制作可执行 JAR 文件包的方法就是最佳选择了,何况它还能保持 Java 的跨平台特性

    把java程序编译成可执行文件的工具

    通过这个工具,可以很方便地把java程序编译成可执行文件。

    JDK8 下 SpringBoot 应用动态编译 Java 源码并注入 Spring 容器

    基于接口、抽象类实现不停机动态调整代码的目的,将修改后的源码文件放置于指定目录下,读取文件后执行动态编译方法,即可将该类重新加载,新的类可以在Spring容器从新注册,且仅在当前窗口生效。如果重启了服务或...

    Dos环境下使用javac编译与java执行多个包下的.java文件

    NULL 博文链接:https://qn-lf.iteye.com/blog/990975

    Java文件转换为 Exe 可执行文件

    可执行程序能够自动从“注册表”或“JAVA_HOME环境变量” 找到当前操作系统中所安装的 jre 环境。 3.2 配置运行环境 如果 jre 文件夹采用复制方式,随同可执行文件一起发布,那么可以添加配置文件进行配置。 配置...

    Java6内存中动态编译案例

    java6提供标准包javax.tools操作Java编译器,本例实现在内存动态编译java代码,并加载动态生成类 执行 console: public class HelloWorld { public static void main(String args[]) { System.out.println("Hello...

    EditPlus3.31_可编译运行java

    请将JDK8 安装在D盘根目录,就可以直接用了。 添加了5个自定义按钮,分别实现:编译Java,执行Java,编译带包Java,执行带包Java,清理项目

    java反编译工具jd-gui

    java反编译工具jd-gui 批量反编译工具是将java语言打包的执行文件回滚为java代码,同时支持单文件反编译和批量操作 支持多种格式,可直接反编译类文件,或j2ee的ear分发包,甚至支持直接反编译android应用 批量反...

    protobuf-java完整包(jar+source+javadoc)

    1. 编辑build.bat,根据build.bat内设置的路径,把.proto文件放到相应的文件夹内,执行build.bat即可把.proto文件编译成.java文件。 2. 在eclipse的java项目的buildpath添加java-protobuf.jar,即可用java调用...

    JD-GUI(java反编译工具)

    “编译”:将源代码转换成二进制执行代码的过程(.java--->.class); “反编译”:将二进制转换为源代码的过程(.class--->.java)。 总结: 1、它可以把已经生成的Jar包反编译回代码的形式,没有经过代码混淆的Jar...

    java基础学习笔记 java整合技术 java工具类.rar

    3、执行编译文件(java.exe解释器) 4、交由JVM(java虚拟机执行) 3.3:编译运行 每次代码改变后都要重新编译一下,才能有运行结果 javac xx.java文件名 进行编译,将源程序转成字节码 java xx文件名(不要后缀) ...

    基于java实现的数据库管理系统.7z

    从.java到.class再到类加载执行的过程对SQL语句进行先编译再执行,时间有限,,只有一 星期时间,细节方面没考虑很多,代码也没怎么重构,看起来有点凌乱。。。 1.执行过程思路:先根据sql语法把sql字符串切割成...

    java源代码生成exe可执行程序 打包教程

    java源代码生成exe可执行程序打包.pdf

    将java程序打包成可执行文件

    把 java项目 打包成 exe 可执行文件! 如何打包跨平台的.exe文件。安装后运行左窗窗口标有十步。 第1步 : 完全略过,直接点Next 第2步 : 我们选择“JAR in EXE mode” 就是选择我们已经有制作好的jar文件。 第3步...

    Java快速命令编译助手(JCR)

    (有点小问题,最好下载另一个同名资源)JCR(Java compile & run) 意思Java文件编译并执行的工具!是我学习Java一段时间后,根据我了解的编译技巧制作的一个可以对Java源文件进行快速编译的小程序。 有了它我们就不必...

Global site tag (gtag.js) - Google Analytics