JDK详解

转载之处:http://freesea.iteye.com/blog/160124


    博客分类: 
  • JDK
JDK Java 应用服务器 C# C++ 
  JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境。它由一个处于操作系统层之上的运行环境还有开发者编译,调试和运行用Java语言写的applet和应用程序所需的工具组成。 

      JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK(Software development kit)。 

      JDK包含的基本组件包括: 

      ·javac – 编译器,将源程序转成字节码 
      ·jar – 打包工具,将相关的类文件打包成一个文件 
      ·javadoc – 文档生成器,从源码注释中提取文档 
      ·jdb – debugger,查错工具 

      JDK中还包括完整的JRE(Java Runtime Environment,Java运行环境),也被称为private runtime。包括了用于产品环境的各种库类,以及给开发员使用的补充库,如国际化的库、IDL库。 

      JDK中还包括各种例子程序,用以展示Java API中的各部分。 

      从初学者角度来看,采用JDK开发Java程序能够很快理解程序中各部分代码之间的关系,有利于理解Java面向对象的设计思想。JDK的另一个显著特点是随着Java (J2EE、J2SE以及J2ME)版本的升级而升级。但它的缺点也是非常明显的就是从事大规模企业级Java应用开发非常困难,不能进行复杂的Java软件开发,也不利于团体协同开发。 

      JDK一般有三种版本: 

      SE(J2SE),standard edition,标准版,是我们通常用的一个版本 
      EE(J2EE),enterpsise edtion,企业版,使用这种JDK开发J2EE应用程序, 
      ME(J2ME),micro edtion,主要用于移动设备、嵌入式设备上的java应用程序 

      Java开发工具(JDK)是许多Java专家最初使用的开发环境。尽管许多编程人员已经使用第三方的开发工具,但JDK仍被当作Java开发的重要工具。 

   JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。其核心Java 

   API是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。Java API包括一些重要的语言结构以及基本图形,网络和文件I/O。一般来说,Java API的非I/O部分对于运行Java的所有平台是相同的,而I/O部分则仅在通用Java环境中实现。 

   作为JDK实用程序,工具库中有七种主要程序。 

   Javac:Java编译器,将Java源代码转换成字节码。 
   Java:Java解释器,直接从类文件执行Java应用程序字节代码。 
   appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。 
   Javadoc:根据Java源码及说明语句生成HTML文档。 
   Jdb:Java调试器,可以逐行执行程序,设置断点和检查变量。 
   Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。 
   Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。 

一、JDK文件结构 

      本文档给出 JDK 目录及其所包含的文件的概述。 

      开发文件和目录 

      本节对开发 Java 平台应用程序所要求的文件和目录进行说明。(不要求的目录有:演示程序、Java 源代码和 C 头文件。下一节附加文件和目录将对它们进行论述。) 下图列出的是最重要的目录: 

                 jdk1.2 
        ___________|____________________ 
       |           |                    | 
      bin         lib                  jre 
       |           |          __________|___________ 
   java.exe    tools.jar     |                      | 
   javac.exe   dt.jar       bin                    lib 
   javap.exe            _____|____          ________|________ 
   javah.exe           |          |        |        |        | 
   javadoc.exe     java.exe    classic   rt.jar    ext    
security 
                   java.dll       |      i18n.jar   | 
                   awt.dll     jvm.dll            iiimp.jar    
      假定 JDK 软件安装在 c:\jdk1.2 目录中,下面列出的是那些关键目录及它们之所以重要的原因: 

      c:\jdk1.2 
      JDK 软件安装的根目录。包含版权、许可及 README 文件。还包括: 
      src.jar -- 构成 Java 平台核心 API 的所有类的源文件的归档。 
      c:\jdk1.2\bin 
      Java 开发工具包 (JDK) 中所包含的开发工具的可执行文件。PATH 环境变量应该包含一个指示此目录的项。有关工具的详细信息,参见 JDK 工具。 
      c:\jdk1.2\lib 
      开发工具使用的文件。这些文件包括 tools.jar,它包含支持 JDK 的工具和实用程序的非核心类。还包括 dt.jar,它是 BeanInfo 文件的 DesignTime 归档,BeanInfo 文件用来告诉交互开发环境 (IDE) 如何显示 Java 组件以及如何让开发人员根据应用程序自定义它们。 
      c:\jdk1.2\jre 
      JDK 开发工具所使用的 Java 运行时环境的根目录。运行时环境是 Java 1.2 平台的实现。除了文档外,它与可部署的 JRE 完全相同。 
      c:\jdk1.2\jre\bin 
      Java 平台使用的工具和库的可执行文件及 DLL。可执行文件与 /jdk1.2/bin 中的文件相同。java 启动器工具担当应用程序启动器的角色,它替代了与 1.1 版的 JDK 软件一同发行的旧 jre 工具。不必将该目录放在 PATH 环境变量中。 
      c:\jdk1.2\jre\bin\classic 
      包含经典虚拟机使用的 Windows DLL 文件。经典虚拟机是 Java 虚拟机的语言解释器版本。当新的虚拟机可用时,它们的 DLL 将被安装在 jre/bin 的某个新子目录中。 
      c:\jdk1.2\jre\lib 
      Java 运行时环境使用的代码库、属性设置和资源文件。包括: 
      rt.jar -- 自举类(构成 Java 平台核心 API 的 RunTime 类)。 
      i18n.jar -- 字符转换类及其它与国际化和本地化有关的类。 
      除(下面将要阐述的) ext 子目录以外,还有几个资源子目录不在此处说明。 
      c:\jdk1.2\jre\lib\ext 
      Java 平台扩展的缺省安装目录。例如,这是安装时 JavaHelp jar 文件的安装目录。包括: 
iiimp.jar -- 实现 Internet-Intranet 输入方法协议的类,供从使用国际字符集的设备上接收输入的应用程序来使用。 
      c:\jdk1.2\jre\lib\security 
      包含用于安全管理的文件。这些文件包括安全策略 (java.policy) 和安全属性 (java.security) 文件。

      附加文件和目录 

      本节说明演示程序、Java 源代码和 C 头文件的目录结构。下面是目录结构: 

                   jdk1.2 
      __________ _____|_____ _____________ 
     |          |           |             | 
   src.jar    demo       include     include-old 
             ___|___ 
            |       | 
          applets  jfc 
                    | 
                  Java2D     
  
      以上所显示的附加目录为: 

      c:\jdk1.2\demo 
      含有源代码的程序示例,用于显示如何为 Java 平台编程。 
      c:\jdk1.2\demo\applets 
      可用在网页上的 applet。 
      c:\jdk1.2\demo\jfc 
      使用新 JFC\Swing 组件的示例。 
      c:\jdk1.2\demo\jfc\Java2D 
      使用新 Java 2D 图形的示例。 
      c:\jdk1.2\include 
      C 语言头文件,它支持使用 Java 本地接口 [ web]和 Java 虚拟机调试程序接口 [ web] 的本地代码编程技术。 
      c:\jdk1.2\include-old 
      头文件,支持使用旧接口的本地代码编程技术。提供这些头文件只是为了向后兼容。所有 Java 虚拟机都不推荐、不支持也不提供这些接口。 

(原文地址:http://202.102.240.73/java/javaweb/linuxjava/cjdk1_2-doc-zh/jdk1.2/zh/docs/tooldocs/win32/jdkfiles.html) 

二、JDK1.5新特性介绍 

      “JDK1.5”(开发代号猛虎)的一个重要主题就是通过新增一些特性来简化开发,这些特性包括泛型,for-each 循环,自动装包/拆包,枚举,可变参数, 静态导入 。使用这些特性有助于我们编写更加清晰,精悍,安全的代码。 

  下面我们简单介绍一下这些新特性。 

  1.泛型(Generic) 

  C++通过模板技术可以指定集合的元素类型,而Java在1.5之前一直没有相对应的功能。一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换。猛虎引入了泛型,它允许指定集合里元素的类型,这样你可以得到强类型在编译时刻进行类型检查的好处。 

Collection c = new ArrayList(); 
c.add(new Date()); 

  编译器会给出一个错误: 

add(java.lang.String) in java.util.Collection cannot be applied to (java.util.Date) 

  2.For-Each循环 

  For-Each循环得加入简化了集合的遍历。假设我们要遍历一个集合对其中的元素进行一些处理。典型的代码为: 

void processAll(Collection c){ 
    for(Iterator i=c.iterator(); i.hasNext();){ 
        MyClass myObject = (MyClass)i.next(); 
        myObject.process(); 
    } 


  使用For-Each循环,我们可以把代码改写成: 

void processAll(Collection c){ 
    for (MyClass  myObject :c) 
        myObject.process(); 


  这段代码要比上面清晰许多,并且避免了强制类型转换。 



  3.自动装包/拆包(Autoboxing/unboxing) 

  自动装包/拆包大大方便了基本类型数据和它们包装类地使用。 

  自动装包:基本类型自动转为包装类.(int >> Integer) 

  自动拆包:包装类自动转为基本类型.(Integer >> int) 

  在JDK1.5之前,我们总是对集合不能存放基本类型而耿耿于怀,现在自动转换机制解决了我们的问题。 

int a = 3; 
Collection c = new ArrayList(); 
c.add(a);//自动转换成Integer. 

Integer b = new Integer(2); 
c.add(b + 2); 

  这里Integer先自动转换为int进行加法运算,然后int再次转换为Integer. 

  4.枚举(Enums) 

  JDK1.5加入了一个全新类型的“类”-枚举类型。为此JDK1.5引入了一个新关键字enmu. 我们可以这样来定义一个枚举类型。 
  
public enum Color 

   Red, 
   White, 
   Blue 


  然后可以这样来使用Color myColor = Color.Red. 

  枚举类型还提供了两个有用的静态方法values()和valueOf(). 我们可以很方便地使用它们,例如 

for (Color c : Color.values()) 
            System.out.println(c); 

  5.可变参数(Varargs) 

  可变参数使程序员可以声明一个接受可变数目参数的方法。注意,可变参数必须是函数声明中的最后一个参数。假设我们要写一个简单的方法打印一些对象, 

util.write(obj1); 
util.write(obj1,obj2); 
util.write(obj1,obj2,obj3); 
… 

  在JDK1.5之前,我们可以用重载来实现,但是这样就需要写很多的重载函数,显得不是很有效。如果使用可变参数的话我们只需要一个函数就行了 

public void write(Object... objs) { 
   for (Object obj: objs) 
      System.out.println(obj); 


  在引入可变参数以后,Java的反射包也更加方便使用了。对于c.getMethod("test", new Object[0]).invoke(c.newInstance(), new Object[0])),现在我们可以这样写了c.getMethod("test").invoke(c.newInstance()),这样的代码比原来清楚了很多。  

  6.静态导入(Static Imports) 

  要使用用静态成员(方法和变量)我们必须给出提供这个方法的类。使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名。 

import static java.lang.Math.*; 
……. 
r = sin(PI * 2); //无需再写r = Math.sin(Math.PI); 

  不过,过度使用这个特性也会一定程度上降低代码地可读性。 

  JDK1.5 正式版即将发布,让我们共同期待吧。我们可以去http://java.sun.com/j2se/1.5.0/download.jsp,先下载一个beta爽一把。 

三、JDK的命令详解(来源视点在线) 


rmic 

功能说明: 
  rmic 为远程对象生成 stub 和 skeleton。 

语法: 
  rmic [ options ] package-qualified-class-name(s) 

补充说明: 
  rmic 编译器根据编译后的 Java 类(含有远程对象实现)名,为远程对象生成 stub 和 skeleton(远程对象是指实现 java.rmi.Remote 接口的对象)。在 rmic 命令中所给的类必须是经 javac 命令成功编译且是完全包限定的类。 

命令选项 
  -classpath[路径] 指定 rmic 用于查询类的路径。如果设置了该选项,它将覆盖缺省值或 CLASSPATH 环境变量。目录用冒号分隔。 


  -d[目录] 指定类层次的根目录。此选项可用来指定 stub 和 skeleton 文件的目标目录。 


  -depend 使编译器考虑重新编译从其它类引用的类。 一般来说,它只重新编译从源代码引用的遗漏或过期的类。 

  -g 允许生成调试表格。调试表格含有行号和局部变量的有关信息,即 Java 调试工具所使用的信息。缺省情况下,只生成行号。 

  -J 与 -D 选项联用,它将紧跟其后的选项( -J 与 -D 之间无空格)传给 java 解释器。 

  -keepgenerated 为 stub 和 skeleton 文件保留所生成的 .java 源文件,并将这些源文件写到与 .class 文件相同的目录中,如果要指定目录,则使用 -d 选项。 

  -nowarn 关闭警告。如果使用该选项,则编译器不输出任何警告信息。 

  -show 显示 rmic 编译器的 GUI(图形用户界面)。输入一个或多个包限定类名(以空格分隔),并按回车键或“显示”按钮,创建 stub 和 skeleton。 

  -vcompat (缺省值)创建与 JDK 1.1 和 1.2 stub 协议版本都兼容的 stub 和 skeleton。 

  -verbose 使编译器和链接器输出关于正在编译哪些类和正在加载哪些类文件的信息。 

  -v1.1 创建 JDK 1.1 stub 协议版本的 stub 和 skeleton。 

  -v1.2 只创建 JDK 1.2 stub 协议版本的 stub。 


rmid 

功能说明: 
  rmid 启动激活系统守护进程,以便能够在 Java 虚拟机上注册和激活对象。 

语法: 
  rmid [-port port] [-log dir] 

补充说明: 
  rmid 工具启动激活系统守护进程。必须先启动激活系统守护进程,才能向激活系统注册可被激活的对象或在 Java 虚拟机上激活可被激活的对象。 

命令选项 
  -C<某些命令行选项> 指定一个选项,在创建每个 rmid 的子守护进程(激活组)时,该选项以命令行参数的形式传给该子守护进程。 

  -log[目录] 指定目录的名称,激活系统守护进程在该目录中写入其数据库及相关信息。缺省状态下,将在执行 rmid 命令的目录中创建一个 log 目录。 

  -port[端口] 指定 rmid 的注册服务程序所使用的端口。激活系统守护进程将 ActivationSystem 与该注册服务程序中的名称java.rmi.activation.ActivationSystem 捆绑在一起。 

  -stop 停止 -port 选项所指定端口上的当前 rmid 调用。若未指定端口,则将停止在端口 1098 上运行的 rmid。 


rmiregistry 

功能说明: 
  rmiregistry 命令可在当前主机的指定端口上启动远程对象注册服务程序。 


语法: 
  rmiregistry [port] 

补充说明: 
  rmiregistry 命令在当前主机的指定 port 上创建并启动远程对象注册服务程序。如果省略 port,则注册服务程序将在 1099 端口上启动。rmiregistry 命令不产生任何输出而且一般在后台运行。远程对象注册服务程序是自举命名服务。主机上的 RMI 服务器将利用它将远程对象绑定到名字上。客户机即可查询远程对象并进行远程方法调用。注册服务程序一般用于定位应用程序需调用其方法的第一个远程对象。该对象反过来对各应用程序提供相应的支持,用于查找其它对象。 

  java.rmi.registry.LocateRegistry 类的方法可用于在某台主机或主机和端口上获取注册服务程序操作。java.rmi.Naming 类的基于 URL 的方法将对注册服务程序进行操作,并可用于查询远程对象、将简单(字符串)名称绑定到远程对象、将新名称重新绑定到远程对象(覆盖旧绑定)、取消远程对象的绑定以及列出绑定在注册服务程序上的 URL。 


serialver 

功能说明: 
  serialver 命令返回 serialVersionUID。 

语法: 
  serialver [ 命令选项 ] 

补充说明: 
  serialver 以适于复制到演变类的形式返回一个或多个类的 serialVersionUID。不带参数调用时,它输出用法行。 

命令选项 
  -show 显示一个简单的用户界面。输入完整的类名并按回车键或“显示”按钮可显示 serialVersionUID。 


jarsigner 

功能说明: 
  为 Java 归档 (JAR) 文件产生签名,并校验已签名的 JAR 文件的签名。 

语法: 
  jarsigner [ 命令选项 ] jar-file alias 
  jarsigner -verify [ 命令选项 ] jar-file 

补充说明: 
  jarsigner 工具用于两个目的: 
  1:为 Java 归档 (JAR) 文件签名 
  2:校验已签名的 JAR 文件的签名和完整性 

命令选项 
  -keystore[url] 指定密钥仓库的 URL。缺省值是用户的宿主目录中的 .keystore 文件,它由系统属性“user.home”决定。 

  -storetype[storetype] 指定要被实例化的密钥仓库类型。默认的密钥仓库类型是安全属性文件中 "keystore.type" 属性值所指定的那个类型,由 java.security.KeyStore 中的静态方法 getDefaultType 返回。 

  -storepass[password] 指定访问密钥仓库所需的口令。这仅在签名(不是校验)JAR 文件时需要。在这种情况下,如果命令行中没有提供 -storepass 选项,用户将被提示输入口令。 

  -keypass[password] 指定用于保护密钥仓库项(由命令行中指定的别名标出)的私钥的口令。使用 jarsigner 为 JAR 文件签名时需要该口令。如果命令行中没有提供口令,且所需的口令与密钥仓库的口令不同,则将提示用户输入它。 

  -sigfile[file] 指定用于生成 .SF 和 .DSA 文件的基本文件名。 

  -signedjar[file] 指定用于已签名的 JAR 文件的名称。 

  -verify 如果它出现在命令行中,则指定的 JAR 文件将被校验,而不是签名。如果校验成功,将显示“jar verified”。如果试图校验未签名的 JAR 文件,或校验被不支持的算法(例如未安装 RSA 提供者时使用的 RSA)签名的 JAR 文件,则将有如下显示: "jar is unsigned. (signatures missing or not parsable)" 。 

  -certs 如果它与 -verify 和 -verbose 选项一起出现在命令行中,则输出将包括 JAR 文件的每个签名人的证书信息。 

  -verbose 如果它出现在命令行中,则代表“verbose”模式,它使 jarsigner 在 JAR 签名或校验过程中输出额外信息。 

  -internalsf 过去,JAR 文件被签名时产生的 .DSA(签名块)文件包含一个同时产生的 .SF 文件(签名文件)的完整编码副本。这种做法已被更改。为了减小输出 JAR 文件的整个大小,缺省情况下 .DSA 文件不再包含 .SF 文件的副本。但是如果 -internalsf 出现在命令行中,将采用旧的做法。该选项主要在测试时有用;实际上不应使用它,因为这样将消除有用的优化。 

  -sectionsonly 如果它出现在命令行中,则 JAR 文件被签名时生成的 .SF 文件(签名文件)将不包括含有整个清单文件的散列的头。它仅包含 与 JAR 中每个单独的源文件相关的信息和散列。该选项主要在测试时有用;实际上不应使用它,因为这样将消除有用的优化。 

  -J[javaoption] 将指定的 javaoption 串直接传递到 Java 解释器。((jarsigner 实际上是解释器的一个 “wrapper”)。该选项不应含有任何空格。它有助于调整执行环境或内存使用。要获得可用的解释器选项的清单,可在命令行键入 java -h 或 java -X。 

keytool 

功能说明: 
  管理由私钥和认证相关公钥的 X.509 证书链组成的密钥仓库(数据库)。还管理来自可信任实体的证书。 


语法: 
  keytool [ 命令 ] 

补充说明: 
  keytool 是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。它还允许用户储存他们的通信对等者的公钥(以证书形式)。 


native2ascii 

功能说明: 
  将含有本地编码字符(既非 Latin1 又非 Unicode 字符)的文件转换为 Unicode 编码字符的文件。 

语法: 
  native2ascii [options] [inputfile [outputfile]] 

补充说明: 
  Java 编译器和其它 Java 工具只能处理含有 Latin-1 和/或 Unicode 编码(udddd 记号)字符的文件。native2ascii 将含有其它字符编码的文件转换成含 Latin-1 和/或 Unicode 编码字符的文件。若省略 outputfile,则使用标准输出设备输出。此外,如果也省略 inputfile,则使用标准输入设备输入。 

命令选项 
  -reverse 执行相反的操作:将含 Latin-1 和/或 Unicode 编码字符的文件转换成含本地编码字符的文件。 

  -encoding[encoding_name] 指定转换过程使用的编码名称。缺省的编码从系统属性 file.encoding 中得到。 


appletviewer 

功能说明: 
  Java applet 浏览器。appletviewer 命令可在脱离万维网浏览器环境的情况下运行 applet。 

语法: 
  appletviewer [ threads flag ] [ 命令选项 ] urls ... 

补充说明: 
  appletviewer 命令连接到 url 所指向的文档或资源上,并在其自身的窗口中显示文档引用的每个 applet。注意:如果 url 所指向的文档不引用任何带有 OBJECT、EMBED 或 APPLET 标记的 applet,那么 appletviewer 就不做任何事情。 

命令选项 
  -debug 在 Java 调试器 jdb 中启动 appletviewer,使您可以调试文档中的 applet。 

  -encoding[编码名称] 指定输入 HTML 文件的编码名称。 

  -J[javaoption] 将 javaoption 字符串作为单个参数传给运行 appletviewer 的 Java 解释器。参数不能含有空格。由多重参数组成的字符串,其中的每个参数都必须以前缀 -J 开头,该前缀以后将被除去。这在调整编译器的执行环境或内存使用时将很有用。 


extcheck 

功能说明: 
  extcheck 检测目标 jar 文件与当前安装方式扩展 jar 文件间的版本冲突。 

语法: 
  extcheck [ -verbose ] targetfile.jar 

补充说明: 
  extcheck 实用程序检查指定 Jar 文件的标题和版本与 JDK TM 软件中所安装的扩展是否有冲突。在安装某个扩展前,可以用该实用程序查看是否已安装了该扩展的相同版本或更高的版本。 

  extcheck 实用程序将 targetfile.jar 文件清单的 specification-title 和 specification-version 头与当前安装在扩展目录下所有 Jar 文件的相对应的头进行比较(缺省扩展目录为 jre/lib/ext)。extcheck 实用程序比较版本号的方式与 java.lang.Package.isCompatibleWith 方法相同。若未检测到冲突,则返回代码为 0。如果扩展目录中任何一个 jar 文件的清单有相同的 specification-title 和相同的或更新的 specification-version 号,则返回非零错误代码。如果 targetfile.jar 的清单中没有 specification-title 或 specification-version 属性,则同样返回非零错误代码。 

命令选项 
  -verbose 对扩展目录中的 Jar 文件进行检查时,列出文件。此外,还报告目标 jar 文件的清单属性及所有冲突的 jar 文件。 


jar 

功能说明: 
  Java归档工具 


语法: 
  jar [ 命令选项 ] [manifest] destination input-file [input-files] 

补充说明: 
  jar工具是个java应用程序,可将多个文件合并为单个JAR归档文件。jar是个多用途的存档及压缩工具,它基于ZIP和ZLIB压缩格式。然而,设计jar的主要目的是便于将java applet或应用程序打包成单个归档文件。将applet或应用程序的组件(.class 文件、图像和声音)合并成单个归档文件时,可以用java代理(如浏览器)在一次HTTP事务处理过程中对它们进行下载,而不是对每个组件都要求一个新连接。这大大缩短了下载时间。jar还能压缩文件,从而进一步提高了下载速度。此外,它允许applet的作者对文件中的各个项进行签名,因而可认证其来源。jar工具的语法基本上与tar命令的语法相同。 

命令选项 
  -c 在标准输出上创建新归档或空归档。 

  -t 在标准输出上列出内容表。 

  -x[file] 从标准输入提取所有文件,或只提取指定的文件。如果省略了file,则提取所有文件;否则只提取指定文件。 

  -f 第二个参数指定要处理的jar文件。在-c(创建)情形中,第二个参数指的是要创建的jar文件的名称(不是在标准输出上)。在-t(表(或-x(抽取)这两种情形中,第二个参数指定要列出或抽取的jar文件。 

  -v 在标准错误输出设备上生成长格式的输出结果。 

  -m 包括指定的现有清单文件中的清单信息。用法举例:“jar cmf myManifestFile myJarFile *.class” 

  -0 只储存,不进行 ZIP 压缩。 

  -M 不创建项目的清单文件。 

  -u 通过添加文件或更改清单来更新现有的 JAR 文件。例如:“jar -uf foo.jar foo.class”将文件 foo.class 添加到现有的JAR文件foo.jar中,而“jar umf manifest foo.jar”则用manifest中的信息更新foo.jar的清单。 

  -C 在执行 jar 命令期间更改目录。例如:“jar -uf foo.jar -C classes *”将classes目录内的所有文件加到foo.jar中,但不添加类目录本身。 

程序示例 
  1:将当前目录下所有CLASS文件打包成新的JAR文件: 
  jar cf file.jar *.class 

  2:显示一个JAR文件中的文件列表 
  jar tf file.jar 

  3:将当前目录下的所有文件增加到一个已经存在的JAR文件中 
  jar cvf file.jar * 


javadoc 

功能说明 
  Java API文档生成器从Java源文件生成API文档HTML页。 

语法: 
  javadoc [ 命令选项 ] [ 包名 ] [ 源文件名 ] [ @files ] 
  其中[ 包名 ]为用空格分隔的一系列包的名字,包名不允许使用通配符,如(*)。[ 源文件名 ]为用空格分隔的一系列的源文件名,源文件名可包括路径和通配符,如(*)。[ @files ]是以任何次序包含包名和源文件的一个或多个文件。 

补充说明 
  Javadoc解析Java源文件中的声明和文档注释,并产生相应的HTML页缺省),描述公有类、保护类、内部类、接口、构造函数、方法和域。 

  在实现时,Javadoc要求且依赖于java编译器完成其工作。Javadoc调用部分javac编译声明部分,忽略成员实现。它建立类的内容丰富的内部表示,包括类层次和“使用”关系,然后从中生成HTML。Javadoc还从源代码的文档注释中获得用户提供的文档。 

  当Javadoc建立其内部文档结构时,它将加载所有引用的类。由于这一点,Javadoc必须能查找到所有引用的类,包括引导类、扩展类和用户类。 



命令选项 
  -overview i>path/filename 指定javadoc应该从path/filename所指定的“源”文件中获取概述文档,并将它放到概述页中(overview-summary.html)。其中path/filename 是相对于-sourcepath的相对路径名。 

  -public 只显示公有类及成员。 

  -protected 只显示受保护的和公有的类及成员。这是缺省状态。 

  -package 只显示包、受保护的和公有的类及成员。 

  -private 显示所有类和成员。 

  -help 显示联机帮助,它将列出这些javadoc和doclet命令行选项。 

  -doclet class 指定启动用于生成文档的docle 的类文件。该doclet定义了输出的内容和格式。如果未使用-doclet选项,则javadoc使用标准doclet生成缺省HTML格式。该类必须包含start(Root)法。该启动类的路径由 -docletpath选项定义。 

  -docletpath classpathlist 指定doclet类文件的路径,该类文件用-doclet选项指定。如果doclet已位于搜索路径中,则没有必要使用该选项。 

  -1.1 生成具有用Javadoc 1.1生成的文档的外观和功能的文档。也就是说,页的背景为灰色,用图像做页眉,使用bullet列表而不是表格,具有单层目的目录结构,不包含继承 API,不使?*** TML框架,并且不支持内部类。该选项还自动将索引分割成每个字母一个文件。如果想要这种外观,则该选项比javadoc 1.1优越之处等于修正了一些错误。 

  -sourcepath sourcepathlist 
  当将包名传递到javadoc命令中时,指定定位源文件(.java)的搜索路径。注意只有当用 javadoc命令指定包名时才能使用sourcepath选项 -- 它将不会查找传递到javadoc命令中的.java文件。如果省略-sourcepath,则javadoc使用类路径查找源文件。 

  -classpath classpathlist 指定javadoc将在其中查找引用类的路径 -- 引用类是指带文档的类加上它们引用的任何类。Javadoc将搜索指定路径的所有子目录。classpathlist可以包括多个路径,彼此用逗号分隔。 

  -bootclasspath classpathlist 指定自举类所在路径。它们名义上是Java平台类。这个bootclasspath是Javadoc将用来查找源文件和类文件的搜索路径的一部分。在 classpathlist中用冒号(:)分隔目录。 

  -extdirs dirlist 指定扩展类所在的目录。它们是任何使用Java扩展机制的类。这个 extdirs是Javadoc将用来查找源文件和在文件的搜索路径的一部分。在dirlist中用冒号(:)分隔目录。 

  -verbose 在javadoc运行时提供更详细的信息。不使用verbose选项时,将显示加载源文件、生成文档(每个源文件一条信息)和排序的信息。verbose选项导致打印额外的信息,指定解析每个java源文件的毫秒数。 

  -locale language_country_variant 指定javadoc在生成文档时使用的环境。 

  -encoding name 指定源文件编码名,例如EUCJIS/SJIS。如果未指定该选项,则使用平台缺省转换器。 

  -J[flag] 将flag直接传递给运行javadoc的运行时系统java。注意在J和flag之间不能有空格。 
标准 Doclet 提供的选项 

  -d directory 指定javadoc保存生成的HTML件的目的目录。省略该选项将导致把文件保存到当前目录中。其中directory可以是绝对路径或相对当前工作目录的相对路径。 

  -use 对每个带文档类和包包括一个“用法”页。该页描述使用给定类或包的任何 API 的包、类、方法、构造函数和域。对于给定类 C,使用类 C 的任何东西将包括 C 的子类、声明为 C 的域、返回 C 的方法以及具有 C 类型参数的方法和构造函数。 

  -version 在生成文档中包括 @version 文本。缺省地将省略该文本。 

  -author 在生成文档中包括 @author 文本。 

  -splitindex 将索引文件按字母分割成多个文件,每个字母一个文件,再加上一个包含所有以非字母字符开头的索引项的文件。 

  -windowtitle[title] 指定放入 HTML 



四、JDK安装手册(转载http://www.funbsd.net) 

·Linux 

SUN的java网站提供windows,linux,solaris三个平台编译好的jdk包,下载解压即可使用。 

网址:http://java.sun.com/downloads/ 

cd /usr/local 
sh /home/pkg/jdk-1_5_0_01-linux-i586.bin 
mv j2sdk1.5.0_01 java 

chown -R root:root java 
chmod -R 755 java  


设置环境变量(/etc/profile): 

export JAVA_HOME=/usr/local/java 
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib 
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH 


使环境变量生效,并进行测试: 

source /etc/profile 
java -version  


·FreeBSD 

这个编译好的jdk包需要FreeBSD4.x兼容包,你也可以自己从ports安装jdk: 

网址:http://www.freebsd.org/java/ 

mount /cdrom 
cd /cdrom/compat4x/ 
./install.sh 

pkg_add -r ftp://ftp.freebsdchina.org/pub/china_ports/jdk-1.4.2p7.tbz 
mv /usr/local/jdk1.4.2 /usr/local/java 


设置环境变量(~/.cshrc): 

setenv JAVA_HOME /usr/local/java 
setenv CLASSPATH $JAVA_HOME/lib:$JAVA_HOME/jre/lib 
setenv PATH $JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH 


使环境变量生效,并进行测试: 

source ~/.cshrc 
java -version


    博客分类: 
  • JDK
JDK Java 应用服务器 C# C++ 
  JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境。它由一个处于操作系统层之上的运行环境还有开发者编译,调试和运行用Java语言写的applet和应用程序所需的工具组成。 

      JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK(Software development kit)。 

      JDK包含的基本组件包括: 

      ·javac – 编译器,将源程序转成字节码 
      ·jar – 打包工具,将相关的类文件打包成一个文件 
      ·javadoc – 文档生成器,从源码注释中提取文档 
      ·jdb – debugger,查错工具 

      JDK中还包括完整的JRE(Java Runtime Environment,Java运行环境),也被称为private runtime。包括了用于产品环境的各种库类,以及给开发员使用的补充库,如国际化的库、IDL库。 

      JDK中还包括各种例子程序,用以展示Java API中的各部分。 

      从初学者角度来看,采用JDK开发Java程序能够很快理解程序中各部分代码之间的关系,有利于理解Java面向对象的设计思想。JDK的另一个显著特点是随着Java (J2EE、J2SE以及J2ME)版本的升级而升级。但它的缺点也是非常明显的就是从事大规模企业级Java应用开发非常困难,不能进行复杂的Java软件开发,也不利于团体协同开发。 

      JDK一般有三种版本: 

      SE(J2SE),standard edition,标准版,是我们通常用的一个版本 
      EE(J2EE),enterpsise edtion,企业版,使用这种JDK开发J2EE应用程序, 
      ME(J2ME),micro edtion,主要用于移动设备、嵌入式设备上的java应用程序 

      Java开发工具(JDK)是许多Java专家最初使用的开发环境。尽管许多编程人员已经使用第三方的开发工具,但JDK仍被当作Java开发的重要工具。 

   JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。其核心Java 

   API是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。Java API包括一些重要的语言结构以及基本图形,网络和文件I/O。一般来说,Java API的非I/O部分对于运行Java的所有平台是相同的,而I/O部分则仅在通用Java环境中实现。 

   作为JDK实用程序,工具库中有七种主要程序。 

   Javac:Java编译器,将Java源代码转换成字节码。 
   Java:Java解释器,直接从类文件执行Java应用程序字节代码。 
   appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。 
   Javadoc:根据Java源码及说明语句生成HTML文档。 
   Jdb:Java调试器,可以逐行执行程序,设置断点和检查变量。 
   Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。 
   Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。 

一、JDK文件结构 

      本文档给出 JDK 目录及其所包含的文件的概述。 

      开发文件和目录 

      本节对开发 Java 平台应用程序所要求的文件和目录进行说明。(不要求的目录有:演示程序、Java 源代码和 C 头文件。下一节附加文件和目录将对它们进行论述。) 下图列出的是最重要的目录: 

                 jdk1.2 
        ___________|____________________ 
       |           |                    | 
      bin         lib                  jre 
       |           |          __________|___________ 
   java.exe    tools.jar     |                      | 
   javac.exe   dt.jar       bin                    lib 
   javap.exe            _____|____          ________|________ 
   javah.exe           |          |        |        |        | 
   javadoc.exe     java.exe    classic   rt.jar    ext    
security 
                   java.dll       |      i18n.jar   | 
                   awt.dll     jvm.dll            iiimp.jar    
      假定 JDK 软件安装在 c:\jdk1.2 目录中,下面列出的是那些关键目录及它们之所以重要的原因: 

      c:\jdk1.2 
      JDK 软件安装的根目录。包含版权、许可及 README 文件。还包括: 
      src.jar -- 构成 Java 平台核心 API 的所有类的源文件的归档。 
      c:\jdk1.2\bin 
      Java 开发工具包 (JDK) 中所包含的开发工具的可执行文件。PATH 环境变量应该包含一个指示此目录的项。有关工具的详细信息,参见 JDK 工具。 
      c:\jdk1.2\lib 
      开发工具使用的文件。这些文件包括 tools.jar,它包含支持 JDK 的工具和实用程序的非核心类。还包括 dt.jar,它是 BeanInfo 文件的 DesignTime 归档,BeanInfo 文件用来告诉交互开发环境 (IDE) 如何显示 Java 组件以及如何让开发人员根据应用程序自定义它们。 
      c:\jdk1.2\jre 
      JDK 开发工具所使用的 Java 运行时环境的根目录。运行时环境是 Java 1.2 平台的实现。除了文档外,它与可部署的 JRE 完全相同。 
      c:\jdk1.2\jre\bin 
      Java 平台使用的工具和库的可执行文件及 DLL。可执行文件与 /jdk1.2/bin 中的文件相同。java 启动器工具担当应用程序启动器的角色,它替代了与 1.1 版的 JDK 软件一同发行的旧 jre 工具。不必将该目录放在 PATH 环境变量中。 
      c:\jdk1.2\jre\bin\classic 
      包含经典虚拟机使用的 Windows DLL 文件。经典虚拟机是 Java 虚拟机的语言解释器版本。当新的虚拟机可用时,它们的 DLL 将被安装在 jre/bin 的某个新子目录中。 
      c:\jdk1.2\jre\lib 
      Java 运行时环境使用的代码库、属性设置和资源文件。包括: 
      rt.jar -- 自举类(构成 Java 平台核心 API 的 RunTime 类)。 
      i18n.jar -- 字符转换类及其它与国际化和本地化有关的类。 
      除(下面将要阐述的) ext 子目录以外,还有几个资源子目录不在此处说明。 
      c:\jdk1.2\jre\lib\ext 
      Java 平台扩展的缺省安装目录。例如,这是安装时 JavaHelp jar 文件的安装目录。包括: 
iiimp.jar -- 实现 Internet-Intranet 输入方法协议的类,供从使用国际字符集的设备上接收输入的应用程序来使用。 
      c:\jdk1.2\jre\lib\security 
      包含用于安全管理的文件。这些文件包括安全策略 (java.policy) 和安全属性 (java.security) 文件。

      附加文件和目录 

      本节说明演示程序、Java 源代码和 C 头文件的目录结构。下面是目录结构: 

                   jdk1.2 
      __________ _____|_____ _____________ 
     |          |           |             | 
   src.jar    demo       include     include-old 
             ___|___ 
            |       | 
          applets  jfc 
                    | 
                  Java2D     
  
      以上所显示的附加目录为: 

      c:\jdk1.2\demo 
      含有源代码的程序示例,用于显示如何为 Java 平台编程。 
      c:\jdk1.2\demo\applets 
      可用在网页上的 applet。 
      c:\jdk1.2\demo\jfc 
      使用新 JFC\Swing 组件的示例。 
      c:\jdk1.2\demo\jfc\Java2D 
      使用新 Java 2D 图形的示例。 
      c:\jdk1.2\include 
      C 语言头文件,它支持使用 Java 本地接口 [ web]和 Java 虚拟机调试程序接口 [ web] 的本地代码编程技术。 
      c:\jdk1.2\include-old 
      头文件,支持使用旧接口的本地代码编程技术。提供这些头文件只是为了向后兼容。所有 Java 虚拟机都不推荐、不支持也不提供这些接口。 

(原文地址:http://202.102.240.73/java/javaweb/linuxjava/cjdk1_2-doc-zh/jdk1.2/zh/docs/tooldocs/win32/jdkfiles.html) 

二、JDK1.5新特性介绍 

      “JDK1.5”(开发代号猛虎)的一个重要主题就是通过新增一些特性来简化开发,这些特性包括泛型,for-each 循环,自动装包/拆包,枚举,可变参数, 静态导入 。使用这些特性有助于我们编写更加清晰,精悍,安全的代码。 

  下面我们简单介绍一下这些新特性。 

  1.泛型(Generic) 

  C++通过模板技术可以指定集合的元素类型,而Java在1.5之前一直没有相对应的功能。一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换。猛虎引入了泛型,它允许指定集合里元素的类型,这样你可以得到强类型在编译时刻进行类型检查的好处。 

Collection c = new ArrayList(); 
c.add(new Date()); 

  编译器会给出一个错误: 

add(java.lang.String) in java.util.Collection cannot be applied to (java.util.Date) 

  2.For-Each循环 

  For-Each循环得加入简化了集合的遍历。假设我们要遍历一个集合对其中的元素进行一些处理。典型的代码为: 

void processAll(Collection c){ 
    for(Iterator i=c.iterator(); i.hasNext();){ 
        MyClass myObject = (MyClass)i.next(); 
        myObject.process(); 
    } 


  使用For-Each循环,我们可以把代码改写成: 

void processAll(Collection c){ 
    for (MyClass  myObject :c) 
        myObject.process(); 


  这段代码要比上面清晰许多,并且避免了强制类型转换。 



  3.自动装包/拆包(Autoboxing/unboxing) 

  自动装包/拆包大大方便了基本类型数据和它们包装类地使用。 

  自动装包:基本类型自动转为包装类.(int >> Integer) 

  自动拆包:包装类自动转为基本类型.(Integer >> int) 

  在JDK1.5之前,我们总是对集合不能存放基本类型而耿耿于怀,现在自动转换机制解决了我们的问题。 

int a = 3; 
Collection c = new ArrayList(); 
c.add(a);//自动转换成Integer. 

Integer b = new Integer(2); 
c.add(b + 2); 

  这里Integer先自动转换为int进行加法运算,然后int再次转换为Integer. 

  4.枚举(Enums) 

  JDK1.5加入了一个全新类型的“类”-枚举类型。为此JDK1.5引入了一个新关键字enmu. 我们可以这样来定义一个枚举类型。 
  
public enum Color 

   Red, 
   White, 
   Blue 


  然后可以这样来使用Color myColor = Color.Red. 

  枚举类型还提供了两个有用的静态方法values()和valueOf(). 我们可以很方便地使用它们,例如 

for (Color c : Color.values()) 
            System.out.println(c); 

  5.可变参数(Varargs) 

  可变参数使程序员可以声明一个接受可变数目参数的方法。注意,可变参数必须是函数声明中的最后一个参数。假设我们要写一个简单的方法打印一些对象, 

util.write(obj1); 
util.write(obj1,obj2); 
util.write(obj1,obj2,obj3); 
… 

  在JDK1.5之前,我们可以用重载来实现,但是这样就需要写很多的重载函数,显得不是很有效。如果使用可变参数的话我们只需要一个函数就行了 

public void write(Object... objs) { 
   for (Object obj: objs) 
      System.out.println(obj); 


  在引入可变参数以后,Java的反射包也更加方便使用了。对于c.getMethod("test", new Object[0]).invoke(c.newInstance(), new Object[0])),现在我们可以这样写了c.getMethod("test").invoke(c.newInstance()),这样的代码比原来清楚了很多。  

  6.静态导入(Static Imports) 

  要使用用静态成员(方法和变量)我们必须给出提供这个方法的类。使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名。 

import static java.lang.Math.*; 
……. 
r = sin(PI * 2); //无需再写r = Math.sin(Math.PI); 

  不过,过度使用这个特性也会一定程度上降低代码地可读性。 

  JDK1.5 正式版即将发布,让我们共同期待吧。我们可以去http://java.sun.com/j2se/1.5.0/download.jsp,先下载一个beta爽一把。 

三、JDK的命令详解(来源视点在线) 


rmic 

功能说明: 
  rmic 为远程对象生成 stub 和 skeleton。 

语法: 
  rmic [ options ] package-qualified-class-name(s) 

补充说明: 
  rmic 编译器根据编译后的 Java 类(含有远程对象实现)名,为远程对象生成 stub 和 skeleton(远程对象是指实现 java.rmi.Remote 接口的对象)。在 rmic 命令中所给的类必须是经 javac 命令成功编译且是完全包限定的类。 

命令选项 
  -classpath[路径] 指定 rmic 用于查询类的路径。如果设置了该选项,它将覆盖缺省值或 CLASSPATH 环境变量。目录用冒号分隔。 


  -d[目录] 指定类层次的根目录。此选项可用来指定 stub 和 skeleton 文件的目标目录。 


  -depend 使编译器考虑重新编译从其它类引用的类。 一般来说,它只重新编译从源代码引用的遗漏或过期的类。 

  -g 允许生成调试表格。调试表格含有行号和局部变量的有关信息,即 Java 调试工具所使用的信息。缺省情况下,只生成行号。 

  -J 与 -D 选项联用,它将紧跟其后的选项( -J 与 -D 之间无空格)传给 java 解释器。 

  -keepgenerated 为 stub 和 skeleton 文件保留所生成的 .java 源文件,并将这些源文件写到与 .class 文件相同的目录中,如果要指定目录,则使用 -d 选项。 

  -nowarn 关闭警告。如果使用该选项,则编译器不输出任何警告信息。 

  -show 显示 rmic 编译器的 GUI(图形用户界面)。输入一个或多个包限定类名(以空格分隔),并按回车键或“显示”按钮,创建 stub 和 skeleton。 

  -vcompat (缺省值)创建与 JDK 1.1 和 1.2 stub 协议版本都兼容的 stub 和 skeleton。 

  -verbose 使编译器和链接器输出关于正在编译哪些类和正在加载哪些类文件的信息。 

  -v1.1 创建 JDK 1.1 stub 协议版本的 stub 和 skeleton。 

  -v1.2 只创建 JDK 1.2 stub 协议版本的 stub。 


rmid 

功能说明: 
  rmid 启动激活系统守护进程,以便能够在 Java 虚拟机上注册和激活对象。 

语法: 
  rmid [-port port] [-log dir] 

补充说明: 
  rmid 工具启动激活系统守护进程。必须先启动激活系统守护进程,才能向激活系统注册可被激活的对象或在 Java 虚拟机上激活可被激活的对象。 

命令选项 
  -C<某些命令行选项> 指定一个选项,在创建每个 rmid 的子守护进程(激活组)时,该选项以命令行参数的形式传给该子守护进程。 

  -log[目录] 指定目录的名称,激活系统守护进程在该目录中写入其数据库及相关信息。缺省状态下,将在执行 rmid 命令的目录中创建一个 log 目录。 

  -port[端口] 指定 rmid 的注册服务程序所使用的端口。激活系统守护进程将 ActivationSystem 与该注册服务程序中的名称java.rmi.activation.ActivationSystem 捆绑在一起。 

  -stop 停止 -port 选项所指定端口上的当前 rmid 调用。若未指定端口,则将停止在端口 1098 上运行的 rmid。 


rmiregistry 

功能说明: 
  rmiregistry 命令可在当前主机的指定端口上启动远程对象注册服务程序。 


语法: 
  rmiregistry [port] 

补充说明: 
  rmiregistry 命令在当前主机的指定 port 上创建并启动远程对象注册服务程序。如果省略 port,则注册服务程序将在 1099 端口上启动。rmiregistry 命令不产生任何输出而且一般在后台运行。远程对象注册服务程序是自举命名服务。主机上的 RMI 服务器将利用它将远程对象绑定到名字上。客户机即可查询远程对象并进行远程方法调用。注册服务程序一般用于定位应用程序需调用其方法的第一个远程对象。该对象反过来对各应用程序提供相应的支持,用于查找其它对象。 

  java.rmi.registry.LocateRegistry 类的方法可用于在某台主机或主机和端口上获取注册服务程序操作。java.rmi.Naming 类的基于 URL 的方法将对注册服务程序进行操作,并可用于查询远程对象、将简单(字符串)名称绑定到远程对象、将新名称重新绑定到远程对象(覆盖旧绑定)、取消远程对象的绑定以及列出绑定在注册服务程序上的 URL。 


serialver 

功能说明: 
  serialver 命令返回 serialVersionUID。 

语法: 
  serialver [ 命令选项 ] 

补充说明: 
  serialver 以适于复制到演变类的形式返回一个或多个类的 serialVersionUID。不带参数调用时,它输出用法行。 

命令选项 
  -show 显示一个简单的用户界面。输入完整的类名并按回车键或“显示”按钮可显示 serialVersionUID。 


jarsigner 

功能说明: 
  为 Java 归档 (JAR) 文件产生签名,并校验已签名的 JAR 文件的签名。 

语法: 
  jarsigner [ 命令选项 ] jar-file alias 
  jarsigner -verify [ 命令选项 ] jar-file 

补充说明: 
  jarsigner 工具用于两个目的: 
  1:为 Java 归档 (JAR) 文件签名 
  2:校验已签名的 JAR 文件的签名和完整性 

命令选项 
  -keystore[url] 指定密钥仓库的 URL。缺省值是用户的宿主目录中的 .keystore 文件,它由系统属性“user.home”决定。 

  -storetype[storetype] 指定要被实例化的密钥仓库类型。默认的密钥仓库类型是安全属性文件中 "keystore.type" 属性值所指定的那个类型,由 java.security.KeyStore 中的静态方法 getDefaultType 返回。 

  -storepass[password] 指定访问密钥仓库所需的口令。这仅在签名(不是校验)JAR 文件时需要。在这种情况下,如果命令行中没有提供 -storepass 选项,用户将被提示输入口令。 

  -keypass[password] 指定用于保护密钥仓库项(由命令行中指定的别名标出)的私钥的口令。使用 jarsigner 为 JAR 文件签名时需要该口令。如果命令行中没有提供口令,且所需的口令与密钥仓库的口令不同,则将提示用户输入它。 

  -sigfile[file] 指定用于生成 .SF 和 .DSA 文件的基本文件名。 

  -signedjar[file] 指定用于已签名的 JAR 文件的名称。 

  -verify 如果它出现在命令行中,则指定的 JAR 文件将被校验,而不是签名。如果校验成功,将显示“jar verified”。如果试图校验未签名的 JAR 文件,或校验被不支持的算法(例如未安装 RSA 提供者时使用的 RSA)签名的 JAR 文件,则将有如下显示: "jar is unsigned. (signatures missing or not parsable)" 。 

  -certs 如果它与 -verify 和 -verbose 选项一起出现在命令行中,则输出将包括 JAR 文件的每个签名人的证书信息。 

  -verbose 如果它出现在命令行中,则代表“verbose”模式,它使 jarsigner 在 JAR 签名或校验过程中输出额外信息。 

  -internalsf 过去,JAR 文件被签名时产生的 .DSA(签名块)文件包含一个同时产生的 .SF 文件(签名文件)的完整编码副本。这种做法已被更改。为了减小输出 JAR 文件的整个大小,缺省情况下 .DSA 文件不再包含 .SF 文件的副本。但是如果 -internalsf 出现在命令行中,将采用旧的做法。该选项主要在测试时有用;实际上不应使用它,因为这样将消除有用的优化。 

  -sectionsonly 如果它出现在命令行中,则 JAR 文件被签名时生成的 .SF 文件(签名文件)将不包括含有整个清单文件的散列的头。它仅包含 与 JAR 中每个单独的源文件相关的信息和散列。该选项主要在测试时有用;实际上不应使用它,因为这样将消除有用的优化。 

  -J[javaoption] 将指定的 javaoption 串直接传递到 Java 解释器。((jarsigner 实际上是解释器的一个 “wrapper”)。该选项不应含有任何空格。它有助于调整执行环境或内存使用。要获得可用的解释器选项的清单,可在命令行键入 java -h 或 java -X。 

keytool 

功能说明: 
  管理由私钥和认证相关公钥的 X.509 证书链组成的密钥仓库(数据库)。还管理来自可信任实体的证书。 


语法: 
  keytool [ 命令 ] 

补充说明: 
  keytool 是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。它还允许用户储存他们的通信对等者的公钥(以证书形式)。 


native2ascii 

功能说明: 
  将含有本地编码字符(既非 Latin1 又非 Unicode 字符)的文件转换为 Unicode 编码字符的文件。 

语法: 
  native2ascii [options] [inputfile [outputfile]] 

补充说明: 
  Java 编译器和其它 Java 工具只能处理含有 Latin-1 和/或 Unicode 编码(udddd 记号)字符的文件。native2ascii 将含有其它字符编码的文件转换成含 Latin-1 和/或 Unicode 编码字符的文件。若省略 outputfile,则使用标准输出设备输出。此外,如果也省略 inputfile,则使用标准输入设备输入。 

命令选项 
  -reverse 执行相反的操作:将含 Latin-1 和/或 Unicode 编码字符的文件转换成含本地编码字符的文件。 

  -encoding[encoding_name] 指定转换过程使用的编码名称。缺省的编码从系统属性 file.encoding 中得到。 


appletviewer 

功能说明: 
  Java applet 浏览器。appletviewer 命令可在脱离万维网浏览器环境的情况下运行 applet。 

语法: 
  appletviewer [ threads flag ] [ 命令选项 ] urls ... 

补充说明: 
  appletviewer 命令连接到 url 所指向的文档或资源上,并在其自身的窗口中显示文档引用的每个 applet。注意:如果 url 所指向的文档不引用任何带有 OBJECT、EMBED 或 APPLET 标记的 applet,那么 appletviewer 就不做任何事情。 

命令选项 
  -debug 在 Java 调试器 jdb 中启动 appletviewer,使您可以调试文档中的 applet。 

  -encoding[编码名称] 指定输入 HTML 文件的编码名称。 

  -J[javaoption] 将 javaoption 字符串作为单个参数传给运行 appletviewer 的 Java 解释器。参数不能含有空格。由多重参数组成的字符串,其中的每个参数都必须以前缀 -J 开头,该前缀以后将被除去。这在调整编译器的执行环境或内存使用时将很有用。 


extcheck 

功能说明: 
  extcheck 检测目标 jar 文件与当前安装方式扩展 jar 文件间的版本冲突。 

语法: 
  extcheck [ -verbose ] targetfile.jar 

补充说明: 
  extcheck 实用程序检查指定 Jar 文件的标题和版本与 JDK TM 软件中所安装的扩展是否有冲突。在安装某个扩展前,可以用该实用程序查看是否已安装了该扩展的相同版本或更高的版本。 

  extcheck 实用程序将 targetfile.jar 文件清单的 specification-title 和 specification-version 头与当前安装在扩展目录下所有 Jar 文件的相对应的头进行比较(缺省扩展目录为 jre/lib/ext)。extcheck 实用程序比较版本号的方式与 java.lang.Package.isCompatibleWith 方法相同。若未检测到冲突,则返回代码为 0。如果扩展目录中任何一个 jar 文件的清单有相同的 specification-title 和相同的或更新的 specification-version 号,则返回非零错误代码。如果 targetfile.jar 的清单中没有 specification-title 或 specification-version 属性,则同样返回非零错误代码。 

命令选项 
  -verbose 对扩展目录中的 Jar 文件进行检查时,列出文件。此外,还报告目标 jar 文件的清单属性及所有冲突的 jar 文件。 


jar 

功能说明: 
  Java归档工具 


语法: 
  jar [ 命令选项 ] [manifest] destination input-file [input-files] 

补充说明: 
  jar工具是个java应用程序,可将多个文件合并为单个JAR归档文件。jar是个多用途的存档及压缩工具,它基于ZIP和ZLIB压缩格式。然而,设计jar的主要目的是便于将java applet或应用程序打包成单个归档文件。将applet或应用程序的组件(.class 文件、图像和声音)合并成单个归档文件时,可以用java代理(如浏览器)在一次HTTP事务处理过程中对它们进行下载,而不是对每个组件都要求一个新连接。这大大缩短了下载时间。jar还能压缩文件,从而进一步提高了下载速度。此外,它允许applet的作者对文件中的各个项进行签名,因而可认证其来源。jar工具的语法基本上与tar命令的语法相同。 

命令选项 
  -c 在标准输出上创建新归档或空归档。 

  -t 在标准输出上列出内容表。 

  -x[file] 从标准输入提取所有文件,或只提取指定的文件。如果省略了file,则提取所有文件;否则只提取指定文件。 

  -f 第二个参数指定要处理的jar文件。在-c(创建)情形中,第二个参数指的是要创建的jar文件的名称(不是在标准输出上)。在-t(表(或-x(抽取)这两种情形中,第二个参数指定要列出或抽取的jar文件。 

  -v 在标准错误输出设备上生成长格式的输出结果。 

  -m 包括指定的现有清单文件中的清单信息。用法举例:“jar cmf myManifestFile myJarFile *.class” 

  -0 只储存,不进行 ZIP 压缩。 

  -M 不创建项目的清单文件。 

  -u 通过添加文件或更改清单来更新现有的 JAR 文件。例如:“jar -uf foo.jar foo.class”将文件 foo.class 添加到现有的JAR文件foo.jar中,而“jar umf manifest foo.jar”则用manifest中的信息更新foo.jar的清单。 

  -C 在执行 jar 命令期间更改目录。例如:“jar -uf foo.jar -C classes *”将classes目录内的所有文件加到foo.jar中,但不添加类目录本身。 

程序示例 
  1:将当前目录下所有CLASS文件打包成新的JAR文件: 
  jar cf file.jar *.class 

  2:显示一个JAR文件中的文件列表 
  jar tf file.jar 

  3:将当前目录下的所有文件增加到一个已经存在的JAR文件中 
  jar cvf file.jar * 


javadoc 

功能说明 
  Java API文档生成器从Java源文件生成API文档HTML页。 

语法: 
  javadoc [ 命令选项 ] [ 包名 ] [ 源文件名 ] [ @files ] 
  其中[ 包名 ]为用空格分隔的一系列包的名字,包名不允许使用通配符,如(*)。[ 源文件名 ]为用空格分隔的一系列的源文件名,源文件名可包括路径和通配符,如(*)。[ @files ]是以任何次序包含包名和源文件的一个或多个文件。 

补充说明 
  Javadoc解析Java源文件中的声明和文档注释,并产生相应的HTML页缺省),描述公有类、保护类、内部类、接口、构造函数、方法和域。 

  在实现时,Javadoc要求且依赖于java编译器完成其工作。Javadoc调用部分javac编译声明部分,忽略成员实现。它建立类的内容丰富的内部表示,包括类层次和“使用”关系,然后从中生成HTML。Javadoc还从源代码的文档注释中获得用户提供的文档。 

  当Javadoc建立其内部文档结构时,它将加载所有引用的类。由于这一点,Javadoc必须能查找到所有引用的类,包括引导类、扩展类和用户类。 



命令选项 
  -overview i>path/filename 指定javadoc应该从path/filename所指定的“源”文件中获取概述文档,并将它放到概述页中(overview-summary.html)。其中path/filename 是相对于-sourcepath的相对路径名。 

  -public 只显示公有类及成员。 

  -protected 只显示受保护的和公有的类及成员。这是缺省状态。 

  -package 只显示包、受保护的和公有的类及成员。 

  -private 显示所有类和成员。 

  -help 显示联机帮助,它将列出这些javadoc和doclet命令行选项。 

  -doclet class 指定启动用于生成文档的docle 的类文件。该doclet定义了输出的内容和格式。如果未使用-doclet选项,则javadoc使用标准doclet生成缺省HTML格式。该类必须包含start(Root)法。该启动类的路径由 -docletpath选项定义。 

  -docletpath classpathlist 指定doclet类文件的路径,该类文件用-doclet选项指定。如果doclet已位于搜索路径中,则没有必要使用该选项。 

  -1.1 生成具有用Javadoc 1.1生成的文档的外观和功能的文档。也就是说,页的背景为灰色,用图像做页眉,使用bullet列表而不是表格,具有单层目的目录结构,不包含继承 API,不使?*** TML框架,并且不支持内部类。该选项还自动将索引分割成每个字母一个文件。如果想要这种外观,则该选项比javadoc 1.1优越之处等于修正了一些错误。 

  -sourcepath sourcepathlist 
  当将包名传递到javadoc命令中时,指定定位源文件(.java)的搜索路径。注意只有当用 javadoc命令指定包名时才能使用sourcepath选项 -- 它将不会查找传递到javadoc命令中的.java文件。如果省略-sourcepath,则javadoc使用类路径查找源文件。 

  -classpath classpathlist 指定javadoc将在其中查找引用类的路径 -- 引用类是指带文档的类加上它们引用的任何类。Javadoc将搜索指定路径的所有子目录。classpathlist可以包括多个路径,彼此用逗号分隔。 

  -bootclasspath classpathlist 指定自举类所在路径。它们名义上是Java平台类。这个bootclasspath是Javadoc将用来查找源文件和类文件的搜索路径的一部分。在 classpathlist中用冒号(:)分隔目录。 

  -extdirs dirlist 指定扩展类所在的目录。它们是任何使用Java扩展机制的类。这个 extdirs是Javadoc将用来查找源文件和在文件的搜索路径的一部分。在dirlist中用冒号(:)分隔目录。 

  -verbose 在javadoc运行时提供更详细的信息。不使用verbose选项时,将显示加载源文件、生成文档(每个源文件一条信息)和排序的信息。verbose选项导致打印额外的信息,指定解析每个java源文件的毫秒数。 

  -locale language_country_variant 指定javadoc在生成文档时使用的环境。 

  -encoding name 指定源文件编码名,例如EUCJIS/SJIS。如果未指定该选项,则使用平台缺省转换器。 

  -J[flag] 将flag直接传递给运行javadoc的运行时系统java。注意在J和flag之间不能有空格。 
标准 Doclet 提供的选项 

  -d directory 指定javadoc保存生成的HTML件的目的目录。省略该选项将导致把文件保存到当前目录中。其中directory可以是绝对路径或相对当前工作目录的相对路径。 

  -use 对每个带文档类和包包括一个“用法”页。该页描述使用给定类或包的任何 API 的包、类、方法、构造函数和域。对于给定类 C,使用类 C 的任何东西将包括 C 的子类、声明为 C 的域、返回 C 的方法以及具有 C 类型参数的方法和构造函数。 

  -version 在生成文档中包括 @version 文本。缺省地将省略该文本。 

  -author 在生成文档中包括 @author 文本。 

  -splitindex 将索引文件按字母分割成多个文件,每个字母一个文件,再加上一个包含所有以非字母字符开头的索引项的文件。 

  -windowtitle[title] 指定放入 HTML 



四、JDK安装手册(转载http://www.funbsd.net) 

·Linux 

SUN的java网站提供windows,linux,solaris三个平台编译好的jdk包,下载解压即可使用。 

网址:http://java.sun.com/downloads/ 

cd /usr/local 
sh /home/pkg/jdk-1_5_0_01-linux-i586.bin 
mv j2sdk1.5.0_01 java 

chown -R root:root java 
chmod -R 755 java  


设置环境变量(/etc/profile): 

export JAVA_HOME=/usr/local/java 
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib 
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH 


使环境变量生效,并进行测试: 

source /etc/profile 
java -version  


·FreeBSD 

这个编译好的jdk包需要FreeBSD4.x兼容包,你也可以自己从ports安装jdk: 

网址:http://www.freebsd.org/java/ 

mount /cdrom 
cd /cdrom/compat4x/ 
./install.sh 

pkg_add -r ftp://ftp.freebsdchina.org/pub/china_ports/jdk-1.4.2p7.tbz 
mv /usr/local/jdk1.4.2 /usr/local/java 


设置环境变量(~/.cshrc): 

setenv JAVA_HOME /usr/local/java 
setenv CLASSPATH $JAVA_HOME/lib:$JAVA_HOME/jre/lib 
setenv PATH $JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH 


使环境变量生效,并进行测试: 

source ~/.cshrc 
java -version

你可能感兴趣的:(JDK详解)