工作中的点点滴滴,慢慢积累。

发布新日志

  • eclipse

    2007-01-16 11:32:37

    eclipse的使用真难,我觉得是挺难得,我想在新建一个类,结果半天也激活不了“完成”的按钮,折腾了我半天终于找到原因了,原来我没有输入类名,哈哈。。。。。。。。哈哈。。。。。。。。想想自己都觉的好笑。
    不过还是觉得eclipse作为java的开发工具也是很好的。
    哈哈。。。。。。。哈哈。。。。。。。继续笑。
  • java的import、package、文件命名规则

    2007-01-10 17:49:36

    以下文章属网上收集,不属于本人原创。以后再转的时候,我会留意把作者也注上的。

    java的import、package、文件命名规则

     package语句:由 于java编译器为每个类生成一个字节码文件,且文件名与类名相同,因此同名的类有可能发生冲突。为了解决这一问题,java提供包来管理类名空间,包实 际提供了一种命名机制和可见性限制机制。而在java的系统类库中,把功能相似的类放到一个包(package)中,例如所有的图形界面的类都放在 java.awt这个包中,与网络功能有关的类都放到java.net这个包中。用户自己编写的类(指.class文件)也应该按照功能放在由程序员自己 命名的相应的包中,例如上例中的javawork.helloworld就是一个包。包在实际的实现过程中是与文件系统相对应的,例如 javawork.helloworld所对应的目录是path\javawork\helloworld,而path是在编译该源程序时指定的。比如在 命令行中编译上述HelloWorldApp.java文件时,可以在命令行中敲入"javac -d f:\javaproject HelloWorldApp.java",则编译生成的HelloWorldApp.class文件将放在目录f:\javaproject\ javawork\helloworld\目录下面,此时f:\javaprojcet相当于path。但是如果在编译时不指定path,则生成的. class文件将放在编译时命令行所在的当前目录下面。比如在命令行目录f:\javaproject下敲入编译命令"javac HelloWorldApp.java",则生成的HelloWorldApp.class文件将放在目录f:\javaproject下面,此时的 package语句相当于没起作用。

      但是,如果程序中包含了package语句,则在运行时就必须包含包名。例如, HelloWorldApp.java程序的第一行语句是:package p1.p2;编译的时候在命令行下输入"javac -d path HelloWorldApp.java",则HelloWorldApp.class将放在目录path\p1\p2的下面,这时候运行该程序时有两种方 式:
      第一种:在命令行下的path目录下输入字符"java p1.p2.HelloWorldApp"。
      第二种:在环境变量classpath中加入目录path,则运行时在任何目录下输入"java p1.p2.HelloWorldApp"即可。

      
    import语句:如 果在源程序中用到了除java.lang这个包以外的类,无论是系统的类还是自己定义的包中的类,都必须用import语句标识,以通知编译器在编译时找 到相应的类文件。例如上例中的java.awt是系统的包,而javawork.newcentury是用户自定义的包。比如程序中用到了类 Button,而Button是属于包java.awt的,在编译时编译器将从目录classpath\java\awt中去寻找类Button, classpath是事先设定的环境变量,比如可以设为:classpath=.;d:\jdk1.3\lib\。 classpath也可以称为类路径,需要提醒大家注意的是,在classpath中往往包含多个路径,用分号隔开。例如classpath=.;d:\ jdk1.3\lib\中的第一个分号之前的路径是一个点,表示当前目录,分号后面的路径是d:\jdk1.3\lib\,表示系统的标准类库目录。在编 译过程中寻找类时,先从环境变量classpath的第一个目录开始往下找,比如先从当前目录往下找java.awt中的类Button时,编译器找不 着,然后从环境变量classpath的第二个目录开始往下找,就是从系统的标准类库目录d:\jdk1.3\lib开始往下找java.awt的 Button这个类,最后就找到了。如果要从一个包中引入多个类则在包名后加上".*"表示。

      如果程序中用到了用户自己定义的包中的 类,假如在上面程序中要用到javawork.newcentury包中的类HelloWorldApp,而包javawork.newcentury所 对应的目录是f:\javaproject\javawork\newcentury,classpath仍旧是classpath=.;d:\ jdk1.3\lib\,则编译器在编译时将首先从当前目录寻找包javawork.newcentury,结果是没有找到;然后又从环境变量 classpath的第二个目录d:\jdk1.3\lib\开始往下找,但是仍然没有找到。原因在于包javawork.newcentury是放在目 录f:\javaproject下面。因此,需要重新设定环境变量classpath,设为classpath=.;d:\jdk1.3\lib\;f: \javaproject\ 。所以编译器从f:\javaproject开始找包javawork.newcentury就可以找到。

      
    源文件的命名规则:如 果在源程序中包含有公共类的定义,则该源文件名必须与该公共类的名字完全一致,字母的大小写都必须一样。这是java语言的一个严格的规定,如果不遵守, 在编译时就会出错。因此,在一个java源程序中至多只能有一个公共类的定义。如果源程序中不包含公共类的定义,则该文件名可以任意取名。如果在一个源程 序中有多个类定义,则在编译时将为每个类生成一个.class文件。
  • Java的import语句

    2007-01-10 17:47:41

    以下文章属网上收集,不属于本人原创。

    程序员可以使用两种import语句:

    单类型导入(single-type-import),例如import java.io.File;

    按需类型导入(type-import-on-demand),例如 import java.io.*;

    关于这两种导入类型大家各有所爱,众说纷纭。这里分析一下这两种导入类型的大致工作原理供大家参考。

    单类型导入比较好理解,仅仅导入一个public类或者接口。而对于按需类型导入,有人误解为导入一个包下的所有类,其实不然,看名字就知道,他只会按需导入,也就是说它并非导入整个包,而仅仅导入当前类需要使用的类。

    既然如此是不是就可以放心的使用按需类型导入呢?非也,非也。因为单类型导入按需类型导入对类文件的定位算法是不一样的。java编译器会从启动目录(bootstrap),扩展目录(extension)和用户类路径下去定位需要导入的类,而这些目录进仅仅是给出了类的顶层目录。编译器的类文件定位方法大致可以理解为如下公式:

    顶层路径名 \ 包名 \ 文件名.class = 绝对路径

    对于单类型导入很简单,因为包明和文件名都已经确定,所以可以一次性查找定位。

    对于按需类型导入则比较复杂,编译器会把包名和文件名进行排列组合,然后对所有的可能性进行类文件查找定位。例如:

    package com;

    import java.io.*;

    import java.util.*;

    当你的类文件中用到了File类,那么可能出现File类的地方如

    File  \\ File类属于无名包,就是说File类没有package语句,编译器会首先搜索无名包

    com.File  \\ File类属于当前包

    java.lang.File  \\编译器会自动导入java.lang包

    java.io.File

    java.util.File

    需要注意的地方就是,编译器找到java.io.File类之后并不会停止下一步的寻找,而要把所有的可能性都查找完以确定是否有类导入冲突。假设此时的顶层路径有三个,那么编译器就会进行3*5=15次查找。

    了解以上原理之后,我们可以得出这样的结论:按需类型导入是绝对不会降低Java代码的执行效率的,但会影响到Java代码的编译速度

    查看JDK的源代码就知道SUN的软件工程师一般不会使用按需类型导入。因为使用单类型导入至少有以下两点好处:

    1。提高编译速度。

    2。避免命名冲突。(例如:当你import java.awt.*;import java.util.*后,使用List的时候编译器将会出编译错误)

    当然,使用单类型导入会使用你的import语句看起来很长。

我的存档

数据统计

  • 访问量: 16389
  • 日志数: 12
  • 建立时间: 2007-01-10
  • 更新时间: 2007-01-19

RSS订阅

Open Toolbar