java verbose是什么 关于java的基础问题
大家好,今天小编来为大家解答java verbose是什么这个问题,关于java的基础问题很多人还不知道,现在让我们一起来看看吧!
Java安装后JDK/bin目录下的许多exe文件有什么用途。
javac:Java编译器,将Java源代码换成字节代
java:Java解释器,直接从类文件执行Java应用程序代码
appletviewer(小程序浏览器):一种执行HTML文件上的Java小程序类的Java浏览器
javadoc:根据Java源代码及其说明语句生成的HTML文档
jdb:Java调试器,可以逐行地执行程序、设置断点和检查变量
javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件
Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义
jar:多用途的存档及压缩工具,是个java应用程序,可将多个文件合并为单个JAR归档文件。
htmlConverter——命令转换工具。
native2ascii——将含有不是Unicode或Latinl字符的的文件转换为Unicode编码字符的文件。
serialver——返回serialverUID。语法:serialver [show]命令选项show是用来显示一个简单的界面。输入完整的类名按Enter键或"显示"按钮,可显示serialverUID。
补充详细:
javac.exe
用法:javac<选项><源文件>
可能的选项包括:
-g生成所有调试信息
-g:none生成无调试信息
-g:{lines,vars,source}生成只有部分调试信息
-O优化;可能妨碍调试或者增大类文件
-nowarn生成无警告
-verbose输出关于编译器正在做的信息
-deprecation输出使用了不鼓励使用的API的源程序位置
-classpath<路径>指定用户类文件的位置
-sourcepath<路径>指定输入源文件的位置
-bootclasspath<路径>覆盖自举类文件的位置
-extdirs<目录(多个)>覆盖安装的扩展类的位置
-d<目录>指定输出类文件的位置
-encoding<编码>指定源文件中所用的字符集编码
-target<版本>生成指定虚拟机版本的类文件
-help Print a synopsis of standard options
appletviewer.exe
用法:appletviewer<options> url
其中,<options>包括:
-debug在 Java调试器中启动 applet小程序查看器
-encoding<encoding>指定由 HTML文件使用的字符编码
-J<runtime flag>向 Java解释器传递参数
-J选项不是标准选项,如有更改,不另行通知。
====================
jar.exe
用法:jar{ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C目录]文件名...
选项:
-c创建新的存档
-t列出存档内容的列表
-x展开存档中的命名的(或所有的〕文件
-u更新已存在的存档
-v生成详细输出到标准输出上
-f指定存档文件名
-m包含来自标明文件的标明信息
-0只存储方式;未用ZIP压缩格式
-M不产生所有项的清单(manifest〕文件
-i为指定的jar文件产生索引信息
-C改变到指定的目录,并且包含下列文件:
如果一个文件名是一个目录,它将被递归处理。
清单(manifest〕文件名和存档文件名都需要被指定,按'm'和'f'标志指定的相同顺序。
示例1:将两个class文件存档到一个名为'classes.jar'的存档文件中:
jar cvf classes.jar Foo.class Bar.class
示例2:用一个存在的清单(manifest)文件'mymanifest'将 foo/目录下的所有
文件存档到一个名为'classes.jar'的存档文件中:
jar cvfm classes.jar mymanifest-C foo/.
javadoc.exe
用法:javadoc [options] [packagenames] [sourcefiles] [classnames] [@files]
-overview<file>读取 HTML格式的概述文档
-public仅显示 public类和成员
-protected显示 protected/public类和成员(缺省)
-package显示 package/protected/public类和成员
-private显示所有类和成员
-help显示命令行选项
-doclet<class>通过候选 doclet生成输出
-docletpath<path>指定 doclet类文件的查找位置
-sourcepath<pathlist>指定源文件的查找位置
-classpath<pathlist>指定用户类文件的查找位置
-exclude<pkglist> Specify a list of packages to exclude
-subpackages<subpkglist> Specify subpackages to recursively load
-breakiterator Compute 1st sentence with BreakIterator
-bootclasspath<pathlist>覆盖自举类加载器所加载的类文件的位置
-source<release> Provide source compatibility with specified release
-extdirs<dirlist>覆盖已安装的扩展的位置
-verbose有关 Javadoc所做工作的输出信息
-locale<name>所用的 Locale,例如 en_US或 en_US_WIN
-encoding<name>源文件编码名称
-J<flag>将<flag>直接传给运行时系统
由标准 doclet提供:
-d<directory>输出文件的目标目录
-use创建类和包的用法页
-version包含@version段
-author包含@author段
-docfilessubdirs Recursively copy doc-file subdirectories
-splitindex将索引分为每个字母对应一个文件
-windowtitle<text>文档的浏览器窗口标题
-doctitle<html-code>包含包索引页(首页)的标题
-header<html-code>包含每一页的页眉文本
-footer<html-code>包含每一页的页脚文本
-bottom<html-code>包含每一页的页底文本
-link<url> Create links to javadoc output at<url>
-linkoffline<url><url2> Link to docs at<url> using package list at<url2>
-excludedocfilessubdir<name1>:.. Exclude any doc-files subdirectories with given name.
-group<name><p1>:<p2>.. Group specified packages together in overview page
-nocomment Supress description and tags, generate only declarations.
-nodeprecated不包含@deprecated信息
-noqualifier<name1>:<name2>:... Exclude the list of qualifiers from the output.
-nosince Do not include@since information
-nodeprecatedlist不生成不鼓励使用的列表
-notree不生成类层次
-noindex不生成索引
-nohelp不生成帮助链接
-nonavbar不生成导航栏
-quiet Do not display status messages to screen
-serialwarn Generate warning about@serial tag
-tag<name>:<locations>:<header> Specify single argument custom tags
-taglet The fully qualified name of Taglet to register
-tagletpath The path to Taglets
-charset<charset> Charset for cross-platform viewing of generated documentation.
-helpfile<file>包含帮助链接功能链接到目标的文件
-linksource Generate source in HTML
-stylesheetfile<path>改变所生成文档的样式的文件
-docencoding<name>输出编码名称
javah.exe
用法:javah [options]<classes>
其中 [options]包括:
-help打印该帮助信息
-classpath<path>类的加载路径
-bootclasspath<path>自举类的加载路径
-d<dir>输出目录
-o<file>输出文件(仅能使用-d或-o之一)
-jni生成 JNI风格的头文件(缺省)
-old生成 JDK1.0风格的头文件
-stubs生成 stubs文件
-version打印版本信息
-verbose输出有关本命令所做工作的信息
-force始终写输出文件
指定<classes>时必须使用全名(例如 java.lang.Object)。
javaw.exe
====================
HtmlConverter.exe
用法:HtmlConverter [-option1 value1 [-option2 value2 [...]]] [-simulate] [filespecs]
其中,选项包括:
-source:获取源文件的路径。缺省值:<userdir>
-dest:写入已转换文件的路径。缺省值:<userdir>
-backup:写备份文件的路径。缺省值:<dirname>_BAK
-f:强制覆写备份文件。
-subdirs:应处理子目录中的文件。
-template:模板文件的路径。如果不确定,请使用缺省值。
-log:写日志的路径。如果没有提供,则不会写入任何日志。
-progress:转换时显示进度。缺省值: true
-simulate:在没有进行转换时显示特定于转换的信息。
-latest:使用最新的 JRE支持发行版 mimetype。
-gui:显示转换程序的图形用户界面。
filespecs:用空格分开的文件说明列表。缺省值:"*.html*.htm"(需要引号)
orbd.exe
用法:orbd<选项>
其中,<选项>包括:
-port启动 ORBD的激活端口,缺省值为 1049(可选)
-defaultdb ORBD文件的目录,缺省值为"./orb.db"(可选)
-serverid ORBD的服务器标识符,缺省值为 1(可选)
-ORBInitialPort初始端口(必需)
-ORBInitialHost初始主机名称(必需)
====================
policytool.exe
用法:policytool [选项]
[-file<file>]规则文件位置
====================
rmic.exe
用法:rmic<选项><类名>
其中<选项>包括:
-keep不删除中间生成的源文件
-keepgenerated(同"-keep")
-v1.1为 1.1 stub协议版本创建 stubs/skeleton
-vcompat(缺省)创建与 1.1和
1.2 stub协议版本兼容的 stubs/skeleton
-v1.2仅为 1.2 stub协议版本创建 stubs
-iiop为 IIOP创建 stubs。当使用该选项时,<选项>还应包括:
-always总创建 stubs(即使在它们同时出现时〕
-alwaysgenerate(同"-always")
-nolocalstubs不创建为同一进程优化的 stubs
-idl创建 IDL。当使用该选项时,<选项>还应包括:
-noValueMethods不生成值类型的方法
-always总创建 IDL(即使在它们同时出现时〕
-alwaysgenerate(同"-always")
-g一般调试信息
-depend以递归方式重编译过期的文件
-nowarn不警告
-nowrite不将编译过的类写入到文件系统
-verbose输出有关编译器所做工作的信息
-classpath<path>指定输入源和类文件的查找位置
-sourcepath<path>指定用户源文件的查找位置
-bootclasspath<path>覆盖自举类文件的位置
-extdirs<path>覆盖安装扩展类的位置
-d<directory>指定所生成类文件的放置位置
-J<runtime flag>将参数传给 java解释程序
====================
rmid.exe
用法:rmid<option>
其中,<option>包括:
-port<option>指定供 rmid使用的端口
-log<directory>指定 rmid将日志写入的目录
-stop停止当前的 rmid调用(对指定端口)
-C<runtime标记>向每个子进程传递参数(激活组)
-J<runtime标记>向 java解释程序传递参数
====================
rmiregistry.exe
用法: rmiregistry<选项><端口>
其中,<选项>包括:
-J<runtime标记>将参数传递到 java解释程序
====================
serialver.exe
用法:serialver [-classpath classpath] [-show] [classname...]
====================
servertool.exe
欢迎使用 Java IDL服务器工具
请在提示处输入命令
servertool> help
可用命令:
-------------------
register-注册一个可激活的服务器
unregister-取消服务器注册
getserverid-返回应用程序名称的服务器标识符
list-列举所有已注册服务器
listappnames-列举当前定义的应用程序名称
listactive-列举当前活动的服务器
locate-将已注册服务器定位在特定类型的端口
locateperorb-为已注册服务器的特定对象请求代理程序定位端口。
orblist-对象请求代理程序(orb)名称及其映射列表
shutdown-关闭一个已注册服务器
startup-启动一个已注册服务器
help-取得帮助
quit-退出此工具
====================
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 ]
其中[包名 ]为用空格分隔的一系列包的名字,包名不允许使用通配符,如(*)。[源文件名 ]为用空格分
javac是什么
javac是Java编译器,负责将Java源代码转换成字节码文件。
javac可以隐式编译一些没有在命令行中提及的源文件。用-verbose选项可跟踪自动编译。当编译源文件时,编译器常常需要它还没有识别出的类型的有关信息。
javac的特点
javac具有简单性、面向对象、分布性、解释性、可靠、安全、平台无关、可移植性、高性能、多线程、动态性等特点。提供了异常处理机制,程序员可以把错误代码放在一起,这样可以简化错误处理任务,便于恢复。不支持指针,杜绝了内存的非法访问。
关于java的基础问题
就能够完全掌握。需要有一个循序渐进的阅读过程。我推荐Oreilly出版的Java系列书籍。
在这里我只想补充一点看法,很多人学习Java是从《Thinking in Java》这本书入手的,但是我认为这本书是不适合初学者的。我认为正确的使用这本书的方法应该是作为辅助的读物。《Thinking in Java》并不是在完整的介绍Java的整个体系,而是一种跳跃式的写作方法,是一种类似tips的方法来对Java很多知识点进行了深入的分析和解释。
对于初学者来说,最好是找一本Java入门的书籍,但是比较完整的循序的介绍Java的语法,面向对象的特性,核心类库等等,在看这本书的同时,可以同步来看《Thinking in Java》,来加深对Java的理解和原理的运用,同时又可以完整的了解Java的整个体系。
对于Java的入门书籍,蔡学镛推荐的是Oreilly的《Exploring Java, 2nd Edition》或者《Java in a Nutshell,2nd Edition(针对C++背景)》,我并没有看过这两本书。其实我觉得电子工业出版社的《Java 2编程详解》或者《Java 2从入门到精通》就很不错。
在所有的Java书籍当中,其实最最有用的,并不是O'reilly的 Java Serials,真正最最有用处是JDK的Documentation!几乎你想获得的所有的知识在Documentation里面全部都有,其中最主要的部分当然是Java基础类库的API文档,是按照package来组织的,对于每一个class都有详细的解释,它的继承关系,是否实现了某个接口,通常用在哪些场合,还可以查到它所有的public的属性和方法,每个属性的解释,意义,每个方法的用途,调用的参数,参数的意义,返回值的类型,以及方法可能抛出的异常等等。可以这样来说,所有关于Java编程方面的书籍其实都不过是在用比较通俗易懂的语言,和良好的组织方式来介绍Documentation里面的某个package里面包含的一些类的用法而已。所以万变不离其宗,如果你有足够的能力来直接通过Documentation来学习Java的类库,那么基本上就不需要看其他的书籍了。除此之外,Documentation也是编程必备的手册,我的桌面上有三个Documentation的快捷方式,分别是J2SDK1.4.1的Documentation,Servlet2.3的Documentation和J2SDKEE1.3.1的Documentation。有了这个三个Documentation,什么其他的书籍都不需要了。
对于Java Web编程来说,最核心的是要熟悉和掌握HTTP协议,这个就和Java无关了,在熟悉HTTP协议之后,就需要熟悉Java的实现HTTP协议的类库,也就是Servlet API,所以最重要的东西就是Servlet API。当然对于初学者而言,直接通过Servlet API来学习Web编程有很大的难度,我推荐O'reilly的《Java Server Pages》这本书来学习Web编程。
EJB的书籍当中,《Enterprise JavaBeans, 2nd Edition》是一本很不错的书, EJB的学习门槛是比较高,入门很难,但是这本书完全降低了学习的难度,特别重要的一点是,EJB的学习需要结合一种App Server的具体实现,所以在学习EJB的同时,必须同步的学习某种App Server,而这本书相关的出了三本书,分别是Weblogic6.1,Websphere4.0和JBoss3.0上面部署书中例子的实做。真是既有理论,又有实践。在学习EJB的同时,可以边看边做,EJB的学习会变得很轻松。
但是这本书也有一个问题,就是版本比较旧,主要讲EJB1.1规范和部分EJB2.0的规范。而Ed Roman写的《Mastering EJB 2.0》这本书完全是根据EJB2.0规范写的,深入浅出,覆盖了EJB编程的各个方面,并且还有很多编程经验tips,也是学习EJB非常推荐的书籍之一。
如果是结合Weblogic来学习J2EE的话,《J2EE应用与BEA Weblogic Server》绝对是首选读物,虽然是讲述的Weblogic6.0,仍然值得购买,这本书是BEA官方推荐的教材,作者也是BEA公司的工程师。现在中文版已经随处可见了。这本书结合Weblogic介绍了J2EE各个方面的技术在Weblogic平台上的开发和部署,实践指导意义非常强。
在掌握了Java平台基础知识和J2EE方面的知识以后,更进一步的是学习如何运用OO的方法进行软件的设计,那么就一定要学习“设计模式”。Sun公司出版了一本《J2EE核心模式》,是每个开发Java企业平台软件的架构师必备的书籍。这本书全面的介绍了J2EE体系架构的各种设计模式,是设计师的必读书籍。
Java Learning Path(三)过程篇
每个人的学习方法是不同的,一个人的方法不见得适合另一个人,我只能是谈自己的学习方法。因为我学习Java是完全自学的,从来没有问过别人,所以学习的过程基本上完全是自己摸索出来的。我也不知道这种方法是否是比较好的方法,只能给大家提供一点参考了。
学习Java的第一步是安装好JDK,写一个Hello World,其实JDK的学习没有那么简单,关于JDK有两个问题是很容易一直困扰Java程序员的地方:一个是CLASSPATH的问题,其实从原理上来说,是要搞清楚JRE的ClassLoader是如何加载Class的;另一个问题是package和import问题,如何来寻找类的路径问题。把这两个问题摸索清楚了,就扫除了学习Java和使用JDK的最大障碍。推荐看一下王森的《Java深度历险》,对这两个问题进行了深入的探讨。
第二步是学习Java的语法。Java的语法是类C++的,基本上主流的编程语言不是类C,就是类C++的,没有什么新东西,所以语法的学习,大概就是半天的时间足够了。唯一需要注意的是有几个不容易搞清楚的关键字的用法,public,protected,private,static,什么时候用,为什么要用,怎么用,这可能需要有人来指点一下,我当初是完全自己琢磨出来的,花了很久的时间。不过后来我看到《Thinking in Java》这本书上面是讲了这些概念的。
第三步是学习Java的面向对象的编程语言的特性的地方。比如继承,构造器,抽象类,接口,方法的多态,重载,覆盖,Java的异常处理机制。对于一个没有面向对象语言背景的人来说,我觉得这个过程需要花很长很长时间,因为学习Java之前没有C++的经验,只有C的经验,我是大概花了一个月左右吧,才彻底把这些概念都搞清楚,把书上面的例子反复的揣摩,修改,尝试,把那几章内容反复的看过来,看过去,看了不下5遍,才彻底领悟了。不过我想如果有C++经验的话,应该一两天时间足够了。那么在这个过程中,可以多看看《Thinking in Java》这本书,对面向对象的讲解非常透彻。可惜的是我学习的时候,并没有看到这本书,所以自己花了大量的时间,通过自己的尝试和揣摩来学会的。
第四步就是开始熟悉Java的类库。Java的基础类库其实就是JDK安装目录下面jre\lib\rt.jar这个包。学习基础类库就是学习rt.jar。基础类库里面的类非常非常多。据说有3000多个,我没有统计过。但是真正对于我们来说最核心的只有4个,分别是
java.lang.*;
java.io.*;
java.util.*;
java.sql.*;
这四个包的学习,每个包的学习都可以写成一本厚厚的教材,而O'reilly也确实是这样做的。我觉得如果时间比较紧,是不可能通过读四本书来学习。我觉得比较好的学习方法是这样的:
首先要通读整个package的框架,了解整个package的class,interface,exception的构成,最好是能够找到介绍整个包框架的文章。这些专门介绍包的书籍的前几章应该就是这些总体的框架内容介绍。
对包整体框架的把握并不是要熟悉每个类的用法,记住它有哪些属性,方法。想记也记不住的。而是要知道包有哪些方面的类构成的,这些类的用途是什么,最核心的几个类分别是完成什么功能的。我在给人培训的时候一般是一次课讲一个包,所以不可能详细的介绍每个类的用法,但是我反复强调,我给你们讲这些包的不是要告诉你们类的方法是怎么调用的,也不要求你们记住类的方法调用,而是要你们了解,Java给我们提供了哪些类,每个类是用在什么场合,当我遇到问题的时候,我知道哪个类,或者哪几个类的组合可以解决我的问题,That'all!,当我们具体写程序的时候,只要你知道该用哪个类来完成你的工作就足够了。编码的时候,具体的方法调用,是边写代码,边查Documentation,所有的东西都在Documentation里面,不要求你一定记住,实际你也记不住3000多个类的总共将近10万个方法调用。所以对每个包的总体框架的把握就变得极为重要。
第五步,通过上面的学习,如果学的比较扎实的话,就打好了Java的基础了,剩下要做的工作是扫清Documentation里面除了上面4个包之外的其他一些比较有用处的类。相信进展到这一步,Java的自学能力已经被培养出来了,可以到了直接学习Documentation的水平了。除了要做GUI编程之外,JDK里面其他会有用处的包是这些:
java.text.*;
java.net.*;
javax.naming.*;
这些包里面真正用的比较多的类其实很少,只有几个,所以不需要花很多时间。
第六步,Java Web编程
Web编程的核心是HTTP协议,HTTP协议和Java无关,如果不熟悉HTTP协议的话,虽然也可以学好Servlet/JSP编程,但是达不到举一反三,一通百通的境界。所以HTTP协议的学习是必备的。如果熟悉了HTTP协议的话,又有了Java编程的良好的基础,学习Servlet/JSP简直易如反掌,我学习Servlet/JSP就用了不到一周的时间,然后就开始用JSP来做项目了。
在Servlet/JSP的学习中,重头仍然是Servlet Documentation。Servlet API最常用的类很少,花比较少的时间就可以掌握了。把这些类都看一遍,多写几个例子试试。Servlet/JSP编程本质就是在反复调用这些类来通过HTTP协议在Web Server和Brower之间交谈。另外对JSP,还需要熟悉几个常用JSP的标记,具体的写法记不住的话,临时查就是了。
此外Java Web编程学习的重点要放在Web Application的设计模式上,如何进行业务逻辑的分析,并且进行合理的设计,按照MVC设计模式的要求,运用Servlet和JSP分别完成不同的逻辑层,掌握如何在Servlet和JSP之间进行流程的控制和数据的共享,以及Web Application应该如何配置和部署。
第七步,J2EE编程
以上的学习过程如果是比较顺利的话,进行到这一步,难度又陡然提高。因为上面的知识内容都是只涉及一个方面,而像EJB,JMS,JTA等核心的J2EE规范往往是几种Java技术的综合运用的结晶,所以掌握起来难度比较大。
首先一定要学习好JNDI,JNDI是App Server定位服务器资源(EJB组件,Datasouce,JMS)查找方法,如果对JNDI不熟悉的话,EJB,JMS这些东西几乎学不下去。JNDI其实就是javax.naming.*这个包,运用起来很简单。难点在于服务器资源文件的配置。对于服务器资源文件的配置,就需要看看专门的文档规范了,比如web.xml的写法,ejb-jar.xml的写法等等。针对每种不同的App Server,还有自己的服务资源配置文件,也是需要熟悉的。
然后可以学习JTA,主要是要理解JTA对于事务的控制的方法,以及该在什么场合使用JTA。这里可以简单的举个例子,我们知道一般情况可以对于一个数据库连接进行事务控制(conn.setAutoCommit(false),....,conn.commit()),做为一个原子操作,但是假设我的业务需求是要把对两个不同数据库的操作做为一个原子操作,你能做的到吗?这时候只能用JTA了。假设操作过程是先往A数据库插一条记录,然后删除B数据库另一个记录,我们自己写代码是控制不了把整个操作做为一个原子操作的。用JTA的话,由App Server来完成控制。
在学习EJB之前要学习对象序列化和RMI,RMI是EJB的基础。接着学习JMS和EJB,对于EJB来说,最关键是要理解EJB是如何通过RMI来实现对远端对象的调用的,以及在什么情况下要用到EJB。
在学习完EJB,JMS这些东西之后,你可能会意识到要急不可待学习两个领域的知识,一个是UML,另一个是Design Pattern。Java企业软件的设计非常重视框架(Framework)的设计,一个好的软件框架是软件开发成功的必要条件。在这个时候,应该开始把学习的重点放在设计模式和框架的学习上,通过学习和实际的编程经验来掌握EJB的设计模式和J2EE的核心模式。
J2EE规范里面,除了EJB,JMS,JTA,Servlet/JSP,JDBC之外还有很多很多的企业技术,这里不一一进行介绍了。
另外还有一个最新领域Web Services。Web Services也完全没有任何新东西,它像是一种黏合剂,可以把不同的服务统一起来提供一个统一的调用接口,作为使用者来说,我只要获得服务提供者给我的WSDL(对服务的描述),就够了,我完全不知道服务器提供者提供的服务究竟是EJB组件,还是.Net组件,还是什么CORBA组件,还是其他的什么实现,我也不需要知道。Web Services最伟大的地方就在于通过统一的服务提供方式和调用方式,实现了整个Internet服务的共享,是一个非常令人激动的技术领域。Web Services好像目前还没有什么很好的书籍,但是可以通过在网络上面查资料的方式来学习。
Java Learning Path(四)方法篇
Java作为一门编程语言,最好的学习方法就是写代码。当你学习一个类以后,你就可以自己写个简单的例子程序来运行一下,看看有什么结果,然后再多调用几个类的方法,看看运行结果,这样非常直观的把类给学会了,而且记忆非常深刻。然后不应该满足把代码调通,你应该想想看如果我不这样写,换个方式,再试试行不行。记得哪个高人说过学习编程就是个破坏的过程,把书上的例子,自己学习Documentation编写的例子在运行通过以后,不断的尝试着用不同的方法实现,不断的尝试破坏代码的结构,看看它会有什么结果。通过这样的方式,你会很彻底的很精通的掌握Java。
举个例子,我们都编过Hello World
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World");
}
}
很多初学者不是很理解为什么main方法一定要这样来定义public static void main(String[] args),能不能不这样写?包括我刚学习Java的时候也有这样的疑问。想知道答案吗?很简单,你把main改个名字运行一下,看看报什么错误,然后根据出错信息进行分析;把main的public取掉,在试试看,报什么错误;static去掉还能不能运行;不知道main方法是否一定要传一个String[]数组的,把String[]改掉,改成int[],或者String试试看;不知道是否必须写args参数名称的,也可以把args改成别的名字,看看运行结果如何。
我当初学习Java的时候就是这样做的,把Hello World程序反复改了七八次,不断运行,分析运行结果,最后就彻底明白为什么了main方法是这样定义的了。
此外,我对于staic,public,private,Exception,trycatch等等等等一开始都不是很懂,都是把参考书上面的例子运行成功,然后就开始破坏它,不断的根据自己心里面的疑问来重新改写程序,看看能不能运行,运行出来是个什么样子,是否可以得到预期的结果。这样虽然比较费时间,不过一个例子程序这样反复破坏几次之后。我就对这个相关的知识彻底学通了。有时候甚至故意写一些错误的代码来运行,看看能否得到预期的运行错误。这样对于编程的掌握是及其深刻的。
其中特别值得一提的是JDK有一个非常棒的调试功能,-verbose
java–verbose
javac–verbose以及其它很多JDK工具都有这个选项
-verbose可以显示在命令执行的过程中,JVM都依次加载哪里Class,通过这些宝贵的调试信息,可以帮助我们分析出JVM在执行的过程中都干了些什么。
另外,自己在学习过程中,写的很多的这种破坏例程,应该有意识的分门别类的保存下来,在工作中积累的典型例程也应该定期整理,日积月累,自己就有了一个代码库了。遇到类似的问题,到代码库里面 Copy& Paste,Search& Replace,就好了,极大提高了开发速度。最理想的情况是把一些通用的例程自己再抽象一层,形成一个通用的类库,封装好。那么可复用性就更强了。
所以我觉得其实不是特别需要例程的,自己写的破坏例程就是最好的例子,如果你实在对自己写的代码不放心的话,我强烈推荐你看看JDK基础类库的Java源代码。在JDK安装目录下面会有一个src.zip,解开来就可以完整的看到整个JDK基础类库,也就是rt.jar的Java源代码,你可以参考一下Sun是怎么写Java程序的,规范是什么样子的。我自己在学习Java的类库的时候,当有些地方理解的不是很清楚的时候,或者想更加清晰的理解运作的细节的时候,往往会打开相应的类的源代码,通过看源代码,所有的问题都会一扫而空。
Java Learning Path(五)资源篇
1、(英文)
Sun的Java网站,是一个应该经常去看的地方。不用多说。
2、
IBM的developerWorks网站,英语好的直接去英文主站点看。这里不但是一个极好的面向对象的分析设计网站,也是Web Services,Java,Linux极好的网站。强烈推荐!!!
3、(英文)
关于Java很多新技术的讨论和新闻。想多了解Java的方方面面的应用,这里比较好。
4、
BEA的开发者园地,BEA作为最重要的App Server厂商,有很多独到的技术,在Weblogic上做开发的朋友不容错过。
5、
灰狐动力网站,一个专业的中间件网站,虽然不是专业的Java网站,但是在J2EE企业应用技术方面有深厚的造诣。
6、(英文)
TheServerSide是一个著名的专门面向Java Server端应用的网站。
7、
Java研究组织,有很多优秀的Java方面的文章和教程,特别是在JDO方面的文章比较丰富。
8、
JSP技术网站,有相当多的Java方面的文章和资源。
9、
Jdon论坛,是一个个人性质的中文J2EE专业技术论坛,在众多的Java的中文论坛中,Jdon一个是技术含量非常高,帖子质量非常好的论坛。
10、
SourgeForge是一个开放源代码软件的大本营,其中也有非常非常丰富的Java的开放源代码的著名的软件。
OK,关于java verbose是什么和关于java的基础问题的内容到此结束了,希望对大家有所帮助。