您的位置:首页 > 编程语言 > Java开发

java学习笔记《java面向对象编程》——java文件格式以及开发工具

2011-11-02 15:22 344 查看
1、java源文件结构:java源文件至多一个包声明语句、多个包引入语句、多个类的声明、多个接口的声明。对于后两者,每个java文件至多只有一个类或者接口是public的,而且java源文件必须以其中public类型的类的名字命名。例如AppMain类:

AppMain.java
public class AppMain{...}
class Doll{...}
2、包的作用:一是能够区分名字相同的类、二是有助于实时访问权限控制、三是有助于划分和组织java应用中的各个类。报的名字通常采用小写,包的命名格式,先是类的创建者或者拥有者信息,再是类所属的软件项目的信息,最后是类所在软件项目中所处的位置。

3、JDK所提供的Java基本包,主要包括:

java.lang包——包含线程类(Thread)、异常类(Exception)、系统类(System)、整数类(Integer)和字符串类(String)等,这些类是编写Java程序经常用到的。这个包是Java虚拟机自动引入的包。

java.awt——抽象工具包,包含了构建GUI界面的类及绘图类。

java.io包——输入/输出包,包含各种输入流类和输出流类,如文件输入流类(FileInputStream类)及文件输出流类(FileOutputStream)等。

java.util包——提供一些实用类,如日期类(Date)和集合类(Collection)等。

java.net包——支持TCP/IP网络协议,包含Socket类和URL相关的类,这些类都用于网络编程。

还有一些其他的包,比如用于数据库编程的java.sql包,用于编写网络程序的java.rmi包。

javax.*是对基本包的扩展,包括用于编写GUI程序的javax.swing包,以及用于编写声音程序的javax.sound等。

JDK的所有包的类构成了java类库,也叫做J2SE API。

4、包引入语句注意两点:一是import另一个包的类时,明确的类的层次性能更优,因为Java虚拟机不必搜索太多。二是尽管包名的符号"."能够体现各个包之间的层次,但是每个包都是相对独立的,顶层包不会包含子包中的类。例如:一下import语句引入com.abc包中的所有类:

import com.abc.*;
但是上述语句不会把com.abc.dollapp包及com.abc.dollapp.main包所有的类都引入。

要同时引入这三个包中的类,必须采用以下方式:

import com.abc.*;
import com.abc.dollapp.*;
import com.abc.dollapp.main.*;

5、方法的声明:如果方法的返回类型是void,那么方法主体可以没有return语句,如果有return语句,那么该return语句不允许返回数据;如果刚发的返回类型不是void,那么方法主体必须包含return语句,而且rerurn语句必须返回相应类型的数据。

6、main()方法的声明有三种方式:

public static void main(String[] args)
public static void main(String args[])
static public void main(String[] args)
此外,由于static修饰的方法默认都是final类型(不能被子类覆盖)的,所以在main()方法前加上final修饰符也是可以的。

7、Java给main()方法传递参数:

main里的args数组大小不定,传进去几个参数就会生成多大的args数组。具体的格式是 java 类名 参数1 参数2 参数3 ...,这样参数1就是args[0],参数2就是args[1],以此类推。

8、注释语句三种形式:一是://,二是:/* */,三是/** */,当第三种注释出现在任何声明(如类的声明、类的成员变量的声明或者类的成员方法的声明)之前时,会作为JavaDoc文档的内容。

9、java关键字还有一些不认识的,等后面认识一下。

10、标识符这类很基础的知识要记住了,标识符的首字母可以是 字母、下划线、美元符号、人民币符号,不可以是数字。标识符由数字、字母、下划线、美元符号组成。不能把关键字和保留字作为标识符。标识符没有长度限制、大小写敏感。

11、编程规范(尽量遵守):

类名和接口名:每个单词的首字母大写,其余小写。

方法名和变量名:首字母小写,其余的每个单词的首字母大写,其余小写。

包名:小写。常量名:每个单词大写,中间下划线隔开。

12、JDK简介:

JDK是Java Development Kit(Java开发工具包)的缩写。它为Java应用程序提供了基本的开发和运行环境。JDK1.2以上的版本也称之为J2SE。java2技术分为J2SE、J2EE和J2ME。J2EE和J2ME建立在J2SE地基础上,J2EE为分布式的企业应用提供开发和运行环境,J2ME为嵌入式应用提供开发和运行环境。

JDK包括以下内容:

Java虚拟机:负责解析和执行Java程序。Java虚拟机可以运行在各种操作平台上。

JDK类聚:提供了最基础的Java类及各种实用类。

开发工具:这些开发工具都是可执行程序,主要包括:javac.exe(编译工具)、java.exe(运行工具)、javadoc.exe(生成JavaDoc文档的工具)和jar.exe(打包工具)等。

13、下面介绍以下这些开发工具的使用方法(摆脱Eclipse),现在只介绍一些最简单的用法吧,那些记不住呐:

javac命令用于编译Java源文件javac -sourcepath 目录1 -classpath 目录2 -d 目录3 目录4 其中目录1 制定Java源文件的根目录(它要包括要编译的文件以及该文件import的其他的文件),目录2制动用户的classpath(该目录应该包含已经编译过的class文件,尤其是要编译的文件引用的文件的class文件),目录3制定编译生成的Java类文件的存放路径,如果该目录不存在,javac命令并不会自动创建该目录,编译生成的类文件存放在Java源文件所在的目录下,目录4是要编译的源文件的完整路径加类名。

举例说说明:

c:\dollapp> javac -sourcepath c:\dollapp\src -classpath c:\dollapp\classes -d c:\dollapp\classes c:\dollapp\src\com\com\src\dollapp\main\Appmain.java
在Appmain类中引入了com.abc.dollapp.doll.Doll类,因此Java编译器在编译Appmain类时,必须先获得Doll.class。Java编译器的处理流程如下:

(1) 由于在Appmain类的import语句中声明Doll类位于com.abc.dollapp.doll包中,因此Java编译器先到classpath根目录下的com\abc\dollapp\doll目录下寻找Doll.class文件,然后到-sourcepath选项指定的src根目录下的com\abc\dollapp\doll目录下寻找Doll.java文件。

(2)如果同时找到了Doll.java文件和Doll.java文件,Java编译器就会根据Doll.java文件的更新日期来判断Doll.class有没有过期,如果过期,就会重新编译Doll.java,否则就直接使用Doll.class。

(3)如果只找到了Doll.class文件,Java编译器就直接使用这个Doll.calss。如果只找到了Doll.java,Java编译器就直接编译这个Doll.java.

(4)如果既没有找到Doll.java文件,也没有找到Doll.class文件,就会抛出编译错误,提示无法解析Appmain类中的“Doll”符号。

另外,可以编译多个java源文件,这些文件之间以空格隔开,如果这些源文件在同一个文件夹下可以用*代表,如:.....\main\*.java。

java命令用于运行java程序,它会启动java虚拟机,Java虚拟机加载相关的类,然后调用主程序类的main()方法。

运行java程序很重要的一个环节是设置classpath,classpath代表java类的根路径(它应该包含要运行的class文件,以及该class文件会用到的其他class文件)。JDK提供了灵活的设置classpath方式,有以下方式:

(1)如果在java命令中设置了-classpath选项,就使用这个classpath。例如:

c:\java -classpath c:\classes3; c:\lib\mytools.jar someClass
(2) 否则,如果在当前DOS命令窗口中定义了系统环境变量classpath,就是用这个classpath。例如:

c:\>set classpath=%classpath%;c:\classes2 红色的代表环境变量

(3)否则,如果在操作系统中定义了系统环境变量classpath,就使用这个classpath。

控制面板→系统→高级→环境变量→新建系统变量

(4)否则,就把当前路径作为classpath。

上述四条,优先级以此降低。系统环境变量classpath是全局性的classpath,DOS窗口中定义的环境变量classpath只在当前DOS窗口中有效,在javac或java命令中用-classpath选项设置的classpath则只对当前javac或java命令有效。

c:\dollapp> java -classpath c:\dollapp\classes com.abc.dollapp.main.Appmain

使用java命令时,要注意需要指定主程序类的完整的名字,如:com.abc.dollapp.main.Appmain,而且必须保证在classpath路径下按照完整名字会找到对应的class文件,并且

完整的名字必须和文件里的包声明语句相符,java命令中指定的java类必须有作为程序入口的main()方法。

jar命令能够把Java应用打包成一个文件,这个文件的扩展名为.jar。这种打包文件称为JAR文件,它独立于任何操作系统平台,而且支持压缩格式。给Java应用打包的好处在于:便于发布Java应用,提高在网络上传输Java应用的速度。在DOS命令行转到c:\dollapp\classes目录下,然后运行如下命令:

c:\dollapp\classes> jar -vcf c:\dollapp\deploy\dollapp.jar *.*
以上jar命令会把c:\dollapp\classes 目录下(包括其子目录下)的所有类文件打包为dollapp.jar文件,并把它存放在c:\dollapp\deploy目录下。

java命令和javac命令会读取JAR文件中的Java类。jar文件相当于一些java文件的集合,所以也可以作为classpath,例如:

c:\dollapp>java -classpath c:\dollapp\deploy\dollapp.jar com.abc.dollapp.main.Appmain
但是,通常我们下载了jar文件之后不会知道jar文件里的main()方法在哪个类里,这时候不能很方便的运行jar文件了。解决这个问题的方法是:当使用了jar命令打包源程序后,在生成的jar文件里会增加一个MANIFEST.MF文件,它包含了描述JAR文件的信息,这个文件里制定了main()方法的位置。我们可以利用这个文件,首先在classes目录下创建一个Manifest.txt,文件包含以下内容: Main-Class: com.abc.dollapp.main.AppMain
,以上内容表明JAR文件的主程序类为com.abc.dollapp.main.AppMain类,要注意的是文件最后必须以换行结束。然后,在c:\dollapp\classes目录下,运行以下jar命令: c:\dollapp\classes>jar -cvfm c:\dollapp\deploy\dollapp.jar Manifest.txt *.* 以上jar命令会把Manifest.txt文件中的内容添加到MANIFEST.MF文件中,并且在c:\dollapp\deploy目录下生成dollapp.jar文件。这样一来运行如下命令:
c:\dollapp> java -jar c:\dollapp\deploy\dollapp.jar 这样java命令就会根据dollapp.jar文件中的MANIFEST.MF文件的信息,确定主程序类为Appmain类,因此执行这个类的main()方法。

javadoc:java类通过JavaDoc文档对外公布自身的用法,JavaDoc文档是基于HTML格式的帮助文档。JavaDoc文档是提供给开发人员阅读的,他们通过JavaDoc文档来了解其他开发人员的类的用法。在Java源文件中,只有满足特定规范的注释才会构成JavaDoc文档。这些规范包括:(1)注释的格式/** */(2)javadoc命令只处理Java源文件中在类声明、接口声明、成员方法声明、成员变量声明及构造方法声明之前的注释,忽略位于其他地方的注释。下面分两个方面介绍javadoc:

一、如何在java源文件中编写注释。

/*
* 版权 2005-2008 www.javathinker.org
* 本程序采用GPL协议,你可以从以下网址获得该协议的内容:
* http://www.gnu.org/copyleft/gpl.html */
package com.abc.dollapp.doll.extend;

import com.abc.dollapp.doll.Doll;

/**
* <p><strong>SmartDoll</strong> 代表智能富娃,它能够发出用户指定的声音。</p>
* @author 孙卫琴
* @version 3.0
* @since 1.0
* @see com.abc.dollapp.doll.Doll
*/
public class SmartDoll extends Doll{

/**
* 代表智能富娃默认情况下所说的话。
*/
protected String word;

/**
* 构造一个智能富娃,未设定默认情况下所说的话。
*/
public SmartDoll(String name){
super(name);
};

/**
* 构造富娃的同时,指定默认情况下所说的话。
* @param word 默认情况下所说的话。
*/
public SmartDoll(String name,String word){
super(name);
this.word=word;
};

/**
* 获得默认情况下所说的话。
* @return 返回默认情况下所说的话。
* @see #setWord
* @deprecated 该方法已经被废弃。
*/
public String getWord(){
return this.word;
}

/**
* 设置默认情况下所说的话。
* @param word 默认情况下所说的话。
* @see #getWord
* @since 2.0
*/
public void setWord(String word){
this.word=word;
}

/**
* <ul>
* <li>如果{@link #word word成员变量}不为null,就调用{@link #speak(String) speak(String)方法}</li>
* <li>如果{@link #word word成员变量}为null,就调用{@link com.abc.dollapp.doll.Doll#speak() super.speak()方法}</li>
* </ul>
*/
public void speak(){
if(this.word!=null){
try{
speak(word);
}catch(Exception e){}
}
else
super.speak();
}

/**
* @param word 指定智能富娃该说的话。
* @return 智能富娃已说的话
* @exception Exception 如果word参数为null,就抛出该异常。
*/
public String speak(String word) throws Exception{
if(word==null)
throw new Exception("不知道该说啥");
System.out.println(word);
return word;
}

}
package语句之前的注释会被javadoc命令忽略,其余注释均会构成JavaDoc文档。

(1) @version指明该程序的版本,@since指明程序代码最早出现在哪个版本中。一种惯例的做法是,在默认情况下,假定他们在类的最早版本中就出现了,否则,就用@since标记明确地标明它们最早出现的版本。

(2)@deprecated 标记用来标明备注是的类、变量或方法已经不提倡使用。如果类A访问了类B中被标记为Deprecated的方法,那么在编译类A时,Java编译器会生成一些警告信息,建议开发员最好不要使用这些被废弃(deprecated)的方法。

(3)@see标记用于生成参考其他JavaDoc文档的链接,例如 @see #setWord 标记将生成参考setWord()方法的链接。@see标记有3种方法:

a、链接其他类的JavaDoc文档,必须给出完整的类名。

@see com.abc.dollapp.doll.Doll

b、链接当前类的方法或变量的JavaDoc文档。

@see #setWord

@see#word

c、链接其他类的方法或变量的JavaDoc文档。

@see com.abc.dollapp.doll.Doll#speak

所以,方法的前面要加上#,如果没有源文件名直接是#方法名,代表是当前类

(4) @link标记和@see标记一样,也能参考其他JavaDoc文档的链接。两者的区别是,@link标记能够嵌入到注释语句中,为注释语句中的特定词汇生成链接。

如果{@link #word word 成员变量}不为null 这样对应的javadoc文件里面显示的是 如果word成员变量不为null,所以总结一下格式是:{@link #aaa bbb} 其中bbb表示的是在javadoc文档中显示的内容,而aaa则表示的是真正要链接到的内容,这里,#aaa 表示aaa为成员变量,#aaa() 表示的时成员方法,当然在#之前可以添加完整类名,表示在其他的类里。这与@see的格式稍微有些不同,@see中#aaa 表示的是成员函数,直接的完整类名表示的是某个类。可能是因为@see一般是链接到类和方法上,所以直接的aaa就可以表示方法了,不会和变量混淆,而@link
是链接到方法和变量上,所以aaa和aaa()必须区分开以示区别。

(5) @param、@return和@throws标记分别用来描述方法的参数、返回值以及抛出异常的条件。

有些东西会自动添加上去,例如如果子类某个方法覆盖父类的方法,在生成的JavaDoc文档里,该方法的介绍最后会自动添加上覆盖提示的。

二、javadoc命令的用法

c:\dollapp> javadoc -author -version -sourcepath src -d doc\api com.abc.dollapp.doll com.abc.dollapp.doll.extend com src\com\abc\dollapp\doll.java

-author 和 -version 表示的是作者和版本,这两项是非默认的选项。-sourcepath 表示的是java源文件的目录 ,默认的是当前目录,-d表示的是javadoc文件的输出目录,默认的是当前目录。 这里注意的是,com.abc.dollapp.doll 是一个包,com.abc.dollapp.doll.extend是上个包的子目录,在javadoc命令里,目录和子目录之间是相对独立的,这里javadoc doll包并不会javadoc doll包的子包extend。如果javadoc的是某个类,那么格式就如上所示。

关于javadoc命令的几个选项的用法:-public -protected -private 分别表示的是为该等级以及更开放等级的文件执行javadoc命令,默认的时-protected,而-package表示的是为public、protected和默认级别的java文件执行javadoc命令。-splitindex选项将索引分为每个字母对应一个索引文件,该选项不是默认的选项,默认情况下,索引文件只有一个,该文件中包含所有索引内容。

关于命令作用的文件表示总结一下:javac 作用的文件表示格式是 ......\....\....\......java,java作用的文件表示格式是aaa.aaa.aaa.aaa.aaa,其中aaa表示的包名和类名,javadoc作用的文件表示格式有两种,一种是包名,aaa.aaa.aaa,aaa表示的是包名和类名,另一种是文件名,......\......\......\.....java,如果要表示多个文件,文件名之间用空格隔开。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐