java 学习笔记

1、java 的工作方式、包、jar 存档文件和部署

  • 最简单的,源代码—>编译器—>输出—>java 虚拟机(JVM)。
javac Party.java
java Party
  • 将源代码和类文件分离,源代码(.java)存储在source目录下,输出(.class)产生在 classes 目录。
cd MyProject/source
javac -d ../classes *.java
cd MyProject/classes
java MyApp
  • 将程序包进 JAR,JAR 就是 JavaARchive,这种文件是个 pkzip 格式的文件,它能把一组类文件包装起来,交付时只需要一个 JAR 文件。可执行的 JAR 代表用户不需把文件抽出来就能运行。程序可以在类文件保存在 JAR 的情况下执行。秘诀在于创建出 manifest 文件,它会带有 JAR 的信息,告诉 Java 虚拟机哪个类含有 main() 这个方法。
cd MyProject/classes
jar -cvmf manifest.txt apptest.jar *.class
jar -cvmf manifest.txt apptest.jar MyApp.class

其中 manifest.txt 文件放在 classes 目录,内容如下:

Main-Class: MyApp

Java 虚拟机能够从 JAR 中载入类,并调用该类的 main() 方法。事实上,整个应用程序都可以包在 JAR 中。一旦 main() 方法开始执行,Java 虚拟机就不会在乎类是从哪来的,只要能够找到就行。其中一个来源就是 classpath 指定位置的所有 JAR 文件。如果看到某个 JAR,则 Java 虚拟机就会在需要类的时候查询此 JAR。

根据操作系统如何动态设定,有可能直接双击 JAR 就可以开始执行,Windows 与 Mac OS X大致是这样。可以通过点选 JAR 并要求 OS 以“Open with...”这一类的方式来打开。

  • 把类包进包中

把类包进包中可以减少与其他类产生命名冲突的机会。Sun 建议包命名加上你所取得的域名称。

首先要在类中加入包指令

package com.headfirstjava;

import javax.swing.*;

public class PackageExercise {
      //
}

然后设定相应对的目录结构,只是把包命令加入源文件是不够的,类不会真的被加入包中,除非类也在相对应的目录结构中。如果类名称是 com.headfirstjava.PackageExercise ,则你必须把 PackageExercise 源文件放在 headfirstjava 的目录下,此目录又在 com 目录下。

加上 -d (directory) 选项来编译,如编译 com.headfirstjava 这个包的所有 .java 文件。加上 -d 的编译操作会让编译器在遇到 classes 目录结构尚未建立时主动做出来。

cd MyProject/source
javac -d ../classes com/headfirstjava/*.java

执行程序,必须指定完整的名称,Java 虚拟机会看得懂并找寻当前目录下的 com 目录,其下应该有 headfirstjava 目录,那里应该能找到 class,class 在其他位置都无法运行。

cd MyProject/classes
java com.headfirstjava.PackageExercise
  • 以包创建可执行的 JAR

首先确定所有的类文件都放在 class 目录下正确对应的包结构中,然后创建 mainfest.txt 文件来描述哪个类带有 main(),以及确认有使用完整的类名称。在 mainfest.txt 文件写入下面一行,然后把 mainfest.txt 放在 classes 目录下。

Main-Class: com.headfirstjava.PackageExercise

执行 jar 工具来创建带有目录结构与 mainfest 的 JAR 文件,只要从 com 开始就行,其下整个包的类都会被包进去 JAR。

2、

参考资料:

1. Kathy Sierra / Bert Bates. 《Head First Java》

原文地址:https://www.cnblogs.com/NaughtyBaby/p/4638322.html