Java package 和 import

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

import的作用

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

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

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

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

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

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

    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.StringB.String分别表示他们各自的String类。按照惯例,java中习惯使用Internet域名的反序作为包名,例如我有一个域名java.oracle.com,那么我写的String类的包名就是com.oracle.java

    package com.oracle.java;

    public class String{
        ...
    }

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

    package java.util;

    public class String{
        ...
    }

实战代码

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

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

    package net.wuhui.util;

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

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

    import net.wuhui.util.MyString;

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

有不正确地方,欢迎指出,万分感谢!

时间: 2024-08-29 20:08:01

Java package 和 import的相关文章

JAVA --- package与import解析

java很久了,但是对java中package和import的理解还不够深入,今天好好看了一下这个知识点.=> 为什么要引入package和import?这个问题和c++中引入命名空间是一样的,也是为了解决重名问题.java通过包机制来解决重名问题,也就相当于给我当前的这段代码加一系列前缀,从 而达到唯一标识的作用.这个就有点像外国人的名字:如果我叫Jeason,我爸叫Kevin,我爷爷叫Bob,我爷爷的爸爸叫Peter.那么如果没有人和我同名(Jeason),那么Jeason这个名字就能够唯一

Java——package与import

[package] <1>为了解决类的命名冲突问题,Java引入包(package)机制,提供类的多重类命名空间. <2>package作为源文件的第一条语句(缺省时指定为无名包),包的命名规范为:公司域名倒置.自定义包 <3>Java编译器把包对应于文件系统的目录管理,在package语句中,用'.'来指明包(目录)的层次,例如: package com.nato; 则该文件中所有的类位于\com\nato目录下 [注意] <1>必须保证该类的class文

java package和import的理解

1.java中package是什么 即包.简单地说,它是分类class(类)与interface(接口)的方式. 在Java开发中,将会写数以百计的类和接口,因此,对它们分类是必须的. 2.java中import有什么用 在java中,编译器是根据包名+类名找到类的,而import语句是告诉编译器找到指定的类. 例如,要求编译器来加载所有目录中java安装/java/io可用的类: <code class="hljs actionscript has-numbering" sty

JAVA package与import机制

http://files.cnblogs.com/files/misybing/JAVA-package-and-import.pdf import org.apache.commons

Java的package和import机制

一些人用了一阵子的Java,可是对于 Java 的 package 跟 import 还是不太了解.很多人以为原始码 .java 文件中的 import 会让编译器把所 import 的程序通通写到编译好的 .class 档案中,或是认为 import 跟 C/C++ 的 #include 相似,实际上,这是错误的观念. 让我们先了解一下,Java 的 package 到底有何用处. 其实,package 名称就像是我们的姓,而 class 名称就像是我们的名字.package 名称有很多 .

Java学习10——package和import

package和import语句 为了便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java引入包(package)机制,提供类的多重类命名空间,使用时,import引入相应package包. 使用步骤一: package语句作用于Java源文件的第一条语句,指明该文件中定义的类所在的包.(若缺省该语句,则指定为无名包).如果想将一个类放入包中,在这个类的源文件第一句代码写package语句 格式:package xxx.xxx.xxx[.xxx......] 使用步骤二: Java

JAVA核心技术I---JAVA基础知识(package和import)

一:package 所有的Java类都是放置在同一个目录下面的,因此类之间的相互调用无需显式声明调用. –同一个目录下,两个类的名字不能相同 –文件过多,查找和修改都不易,且容易出 Java支持多个目录放置Java,并且通过package/import/classpath/jar等机制配合使用,可以支持跨目录放置和调用Java package 包,和C++中namespace类似 (一)package使用 在Java类文件的第一句话给出包的名称--->项目目录下的包路径 package net.

java package一些试验

目录如上图,当前目录下,b是文件夹, a是文件夹. B.java 源码如下: package b; import a.*; public class B{ public static void main(String[] args) { A a = new A(); a.fun(); } } A.java 源码如下: package a; public class A{ public void fun(){ System.out.println("Aa"); } } 那么当我在当前目录

面向对象----构造方法、this 关键字、函数的参数传递、package语句/import语句

构造方法 构造器的定义.作用 构造方法的特征 它具有与类相同的名称:它不含返回值: 注意:在构造方法里不含返回值的概念是不同于"void"的,在定义构造方法时加了"void",结果这个方法就不再被自动调了. 构造方法的作用 当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码.这就好像我们规定每个"人"一出生就必须先洗澡,我们就可以在"人"的构造方法中加入完成"洗