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

【Java】package 和 import 关键字

2015-03-18 13:58 411 查看
一些人用了一阵子的Java,可是对于 Java 的 package 跟 import 还是不太了解。很多人以为原始码 .java 文件中的 import 会让编译器把所 import 的程序通通写到编译好的 .class 档案中,或是认为 import 跟 C/C++ 的 #include 相似,实际上,这是错误的观念。

import的作用

如果没有
import
,我们在使用java类库时就需要书写该类的全路径名,例如下面代码:

[code]    java.util.ArrayList<Integer> list = new java.util.ArrayList<Integer>();


每次这样写要多敲很多字符,程序员都是很懒的,自然有人办法偷懒了,于是有了
import
,只需要在java文件开头部分导入相应的类的全名一次,之后就只需要写类名就可以引用该类了,例如:

[code]    import java.util.ArrayList;
    ...
    ArrayList<Integer> list = new ArrayList<Integer>();


上面的
java.util
就是一个包,
ArrayList
是该包里面的一个类,

也可以使用通配符来表示引用某个包,这样可以偷懒不少,但是尽量少这样用了。

[code]    import java.util.*;


编译时所有类名都会被替换成相应的完全路径名,如
ArrayList
比替换成
java.util.ArrayList
,这与我们自己书写完全路径名是一样的效果。

查找
import
的类时,按照环境变量
CLASSPATH
中指定的路径(如有多个,依此执行下面操作),将该路径作为根目录,然后将
import
后面的完全路径名中的
.
换成路径分隔符并添加
.java
后缀,将根目录与替换后的路径拼接成完全路径定位要引用的类文件。例如上面的导入的
java.util.ArrayList
类文件路径为
$CLASSPATH/java/util/ArrayList.java


package的作用

包用来将一组相互具有联系并组合起来完成某一功能的类聚集到一起,比如java中的工具库,通常一个库是由多个class所组成,为了方便组织我们把这组class放在同一个目录下,这个目录就是看作是一个java包(当然还需要在java文件开头用package声明一下)。

打个比方,package 名称就像是我们的姓,而 class 名称就像是我们的名字。package 名称有很多
.
的,就好像是复姓。比如说 java.lang.String,就是复姓 java.lang,名字为 String 的类别;java.io.InputStream 则是复姓java.io,名字为 InputStream 的类别。

但是实际中经常会出现重名的情况,这时候就需要用不同的姓作区分,例如A写了一个
String
类,B也写了个
String
类,为了区分,可以通过
A.String
B.String
分别表示他们各自的
String
类。按照惯例,java中习惯使用Internet域名的反序作为包名,例如我有一个域名
java.oracle.com
,那么我写的
String
类的包名就是
com.oracle.java


[code]    package com.oracle.java;

    public class String{
        ...
    }


使用Internet域名反序作为包名,并非强制性,也可以使用其他名称,只要尽量保证包名唯一即可,所以常用的就是使用路径名作为包名,利用操作系统的目录层次结构作区分。例如,我写了一个
String
类,放在
$CLASSPATH/java/util/
目录下,那么包名就是
java/util


[code]    package java.util;

    public class String{
        ...
    }


实战代码

CLASSPATH
环境变量包含了
F:/WorkDirectory/


全路径为
F:/WorkDirectory/net/wuhui/util/MyString.java
的类文件,其包名应为
net.wuhui.util
,这样编译器可以准确定位到
MyString
这个类。

[code]    package net.wuhui.util;

    public class MyString{
        System.out.println("MyString");
    }


测试类
F:/WorkDirectory/test/Test.java
,导入上面自定义的
MyString
类,并使用他它。

[code]    import net.wuhui.util.MyString;

    public class Test{
        public static void main(String [] args){
            MyString s = new MyString();
        }
    }


有不正确地方,欢迎指出,万分感谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: