Java面向对象与高级编程

Java面向对象与高级编程

  • IDEA设置.class文件输出路径

    ​ idea中如果不修改class文件的输出路径的话,会默认在工程下创建一个out文件用来装编译的class文件或者说是用来存放在src目录下文件(包括配置文件,只要在src目录下就会被加载到out里面)。根据out文件夹中的这些文件我们可以直接打包成jar包,jar除了包含一系列class文件,还有其他一些静态资源文件。

    ​ artifact是一个项目资源的组合体。例如,一个已编译的java类的集合,一个已打包的java应用。

  • jar包以及相关命令

    • jar包打包

      ​ 在IDEA的Project Structure可以设置jar包打包方法。主要是在artifacts中设置,artifacts就是将项目输出为可执行程序用于测试部署的设置。

      ​ 设置好后通过IDEA的build建立jar包。此时建立的jar包中有MANIFEST.MF文件,如果想通过java -jar命令运行jar包,该文件是不能确少的。

    • 运行jar包

      法一:java -jar命令,这种方法要求jar包中一定要包含MANIFEST.MF文件,否则会报错

      法二:java -cp。这里的cp时指定类运行所依赖的其他类路径,比如可以将依赖的jar放入cp路径。这种方法不要求jar包中一定存在MANIFEST.MF文件,只需将jar包放入classpath路径,并指定运行的主类即可。

    1
    2
    3
    4
    5
    6
    java -cp lib/*;etc/ com.Start param1 param2
    将lib下的所有jar文件以及etc下的所有配置文件添加到 classpath 中
    并在classpath 中寻找 com.Start类(main方法类)并运行
    param1,param2 为main方法的参数可不填
    注意:jar 文件引入classpath,通配符不能写成 *.jar, 只能使用 * 或 123*
    注意:配置文件引入classpath,只能写到目录 /, 不能添加 *
    • 引用别人的jar文件

    • 将静态资源打包到jar包

      项目Project Structure中的artifacts设置,是jar包的预览结构,可以根据需要,自己创建jar目录。当选择加入需要打包的资源时,点击“+”号可以选择,其中extracted from file可从本地选择文件。

  • 命令行通过java运行class文件,提示:找不到或者无法加载主类

    • https://www.cnblogs.com/wangxiaoha/p/6293340.html

    • 当我们运行单个java文件,这个A.java文件里面有包定义,即package zengjin.talk

      当我们编译好A.java后,得到A.class文件。javac -d . 源文件(它会自动创建包目录)

      当当前目录有多个Java文件需要编译或打包编译时,javac -d . *.java指令可以给当前目录下所有Java文件根据程序中是否有包声明进行编译或者打包编译,-d后面的.表示将编译的文件放在当前目录,当然也可以指定其他目录。

      那么如何运行呢?

      因为有包声明,所以设置主类应该加入包路径

      首先将命令行的路径设置到src目录,这个很重要。接着执行以下命令

      java zengjin.talk.A args[0] args[1]…….

      如果命令行不是在src目录下,也就是类路径不是在当前目录下:那么java -cp F:/javaweb2班/20160531 mypack1.java,-cp跟的参数定位到src目录。并且Java命令的参数是“类的完整类名”,而不是“文件名”。

  • javac -d classes src/*.java src/inner/*.java
    由上一篇知道,javac中-d表示”指定存放生成的类文件的位置“,也就是将生成的.class文件放在-d指定的文件夹中。需要指出的是,classes文件夹是手动建立的。
    另外,javac还可以批量编译.java文件,上面的命令表示编译src目录下的所以.java文件、编译src/inner目录下的所有.java文件。这样就可以批量编译.java文件,并将生成的.class文件放在classes文件夹中。这里同样要指出一点,因为package inner的关系,会自动建立inner文件夹,并将所有package inner下的类文件.class放在classes/inner下。

  • jar -cvf Test.jar -C classes/ .

    这个命令将会把classes下的所有文件(包括.class和文件夹等)打包为Test.jar文件。-C 更改为指定的目录并包含其中的文件,如果有任何目录文件, 则对其进行递归处理。它相当于使用 cd 命令转指定目录下。注意后面的”.”的用法,jar可以递归的打包文件夹,”.”表示是当前文件夹。如果执行命令“jar -cvf Test.jar .”,表示将当前目录下的所有文件及文件夹打包。所以上面的命令的意思就是“将classes下的所有文件打包为Test.jar”

  • java -cp Test.jar Main

    通过上面的命令就可以执行Test.jar中的Main.class。其中,cp指定了jar文件的位置。