【Java】package 和 import 关键字
2015-03-18 13:58
411 查看
一些人用了一阵子的Java,可是对于 Java 的 package 跟 import 还是不太了解。很多人以为原始码 .java 文件中的 import 会让编译器把所 import 的程序通通写到编译好的 .class 档案中,或是认为 import 跟 C/C++ 的 #include 相似,实际上,这是错误的观念。
每次这样写要多敲很多字符,程序员都是很懒的,自然有人办法偷懒了,于是有了
上面的
也可以使用通配符来表示引用某个包,这样可以偷懒不少,但是尽量少这样用了。
编译时所有类名都会被替换成相应的完全路径名,如
查找
打个比方,package 名称就像是我们的姓,而 class 名称就像是我们的名字。package 名称有很多
但是实际中经常会出现重名的情况,这时候就需要用不同的姓作区分,例如A写了一个
使用Internet域名反序作为包名,并非强制性,也可以使用其他名称,只要尽量保证包名唯一即可,所以常用的就是使用路径名作为包名,利用操作系统的目录层次结构作区分。例如,我写了一个
全路径为
测试类
有不正确地方,欢迎指出,万分感谢!
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(); } }
有不正确地方,欢迎指出,万分感谢!
相关文章推荐
- java中的关键字package和import
- Java 包(package)和import关键字
- Java面向对象-package import关键字
- JAVA关键字package/import详解
- java学习之路 之 面向对象编程-面向对象-关键字(this、package、import)及java中主要包的介绍
- java基础之关键字二( package、 class、import )和( static、fina ) 和(public、protected、private)
- java中的关键字package和命令行的编译方法
- java的import、package、文件命名规则
- java中import,package的用法
- Java package 与 import
- Java中的Package.Import.Class以及和C++的比较(三)--继承.抽象类.内部类.接口类
- java的import、package、文件命名规则
- Java中的package和import命令
- java中的import和package机制
- Java 入门语法<include ClassPath,import,package.etc>
- Java中的Package.Import.Class以及和C++的比较(一)--包.导入.类权限
- java中import,package的用法
- java高手释疑:package 与 import 【转载:java联机版】
- Java的Package与Import机制之我的理解(初学者的心得)
- JAVA类引用(import classes/package)