一、为什么要引入package和import?
这个问题和c++中引入命名空间是一样的,也是为了解决重名问题。java通过包机制来解决重名问题,也就相当于给重名的代码加一系列前缀,从而达到唯一标识的作用。

二、如何解决重名问题?
这个就有点像外国人的名字:如果我叫Jeason,我爸叫Kevin,我爷爷叫Bob,我爷爷的爸爸叫Peter。
那么如果没有人和我同名(Jeason),那么Jeason这个名字就能够唯一标识我了;而如果还有一个人也叫Jeason,那么我就加上我爸爸的名字Kevin,我就

是Kevin Jeason;如果那个人他爸爸也叫Kevin,那么我再加上我爷爷的名字,我就叫Bob Devin Jeason;如果他爸爸和爷爷的名字又和我爸爸和爷爷的

名字相同,那么我再加上我爷爷的爸爸的名字,我就叫Peter Bob Kevin Jeason ...
这样一来就解决了重名问题。
三、具体用法
在桌面上建立了一个Cat.java,内容为:

public class Cat
{
public static void main(String[] args)
{
System.out.println("This is a Cat!");
}
}

当然这样是可以正确编译运行的。
现在我再在前面加一个package,将这段代码打包一下:

package com.crazyacking.github;
public class Cat
{
public static void main(String[] args)
{
System.out.println("This is a Cat!");
}
}

编译通过,但是在执行程序时提示“错误:找不到或无法加载主类 Cat”。
为什么会出现这个问题呢?因为我们已经将Cat类打包,系统自然无法找到Cat类。

那现在我再在桌面上创建一个Dog.java,内容为:

public class Dog
{
public static void main(String[] args)
{
Cat c=new Cat();
System.out.println("This is a Dog!");
}
}

在编译时会显示:无法找到Cat类,还是同样的问题;我们已经将Cat.java类打包了。
那么我们如何才能访问到Cat.java类呢?
其实,在java语言中,package是和文件的目录相对应的,我们在写程序的时候要随时将代码与文件联系在一起。
我们在封装类的时候,一般有这样一个默认的准则,即仿照域名的格式,将域名倒过来打包类。
既然我们打包了类,而package又是和文件对应,那么我们就建立文件夹把它放进去就行,将.class文件放在.com/crazyacking/github/文件夹下即可。


代码变为:

public class Dog
{
public static void main(String[] args)
{
com.crazyacking.github.Cat c=new com.crazyacking.github.Cat();
System.out.println("This is a Dog!");
}
}

这样就能访问到Cat类了。但是,每次访问Cat类的时候前面都要写这么一大堆东西,不仅写着麻烦,看着也烦,这时候import就派上用场了。

import com.crazyacking.github.Cat;

public class Dog
{
public static void main(String[] args)
{
Cat c=new Cat();
System.out.println("This is a Dog!");
}
}

当然也可以将com.crazyacking.github中的全部子类都包含进来:

import com.crazyacking.github.*;

public class Dog
{
public static void main(String[] args)
{
Cat c=new Cat();
System.out.println("This is a Dog!");
}
}

注意:“.*”只可以包含该文件夹下的类,但并不包括该文件下的子文件夹下的类。
通过package和import就可以完美的解决重名问题了。

四、相关拓展

如果我们包的路径太过于复杂而且该包被经常调用,我们还可以直接将包所在的文件夹路径直接加到环境变量的ClassPath下面。

这样一来,系统会首先根据ClassPath进行资源查找,避免了每次调用都要包含的问题。

另:在使用import来包含类时,包含的源代码可能对运行产生影响,可以将源代码移除,只留.class文件就行。

JAVA - package与import解析(一)的更多相关文章

  1. JAVA package与import机制

    JAVA package与import机制 http://files.cnblogs.com/files/misybing/JAVA-package-and-import.pdf import org ...

  2. Java package和import语句

    Java中的package和import语句 如果你想让其他人访问你的类,你一定要把你写的类放到正确的子目录下. 在Java里,对于位于包中的类是这样管理的: Java编译器把包对应于文件系统的目录管 ...

  3. Java——package和import关键字

    1.8 package和import关键字 1.8.1 package 包其实就是目录,特别是项目比较大,java 文件特别多的情况下,我们应该分目录管理,在java 中称为分包管理,包名称通常采用小 ...

  4. java package and import

    1.Package Package类的主要作用是解决命名冲突.package中所存放的所有文件,一般分一下就分这三种 1,java程序源文件,扩展名为.java. 2,编译好的java类文件,扩展名为 ...

  5. Java——package与import

    [package]   <1>为了解决类的命名冲突问题,Java引入包(package)机制,提供类的多重类命名空间. <2>package作为源文件的第一条语句(缺省时指定为 ...

  6. Java IO流详尽解析

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  7. java package 命名空间

    原文: http://www.studytonight.com/java/package-in-java.php 创建一个简单的maven 项目的命令是: mvn  archetype:generat ...

  8. Java跟Javac,package与import

    今天讨论一下2个指令与2个关键字. 这次的没有IDE环境,直接在txt文本里编程,在cmd里编译运行,搞清楚java的文件结构,还有怎么设置编译器查找类的路径.首先是javac,有一个可带参数java ...

  9. java之package与import

    我就以package与import开始吧. package的作用其实就是c++的namespace的作用,防止名字相同的类产生冲突,只是实现的机制不一样,java编译器在编译时,直接根据package ...

随机推荐

  1. jQuery中position()与offset()区别

    使用jQuery获取元素位置时,我们会使用position()或offset()方法,两个方法都返回一个包含两个属性的对象-左边距和上边距,它们两个的不同点在于位置的相对点不同. 可以看看下边的图: ...

  2. c10k问题及其解决方案

    本文主要讲述高并发http应用中的c10k瓶颈问题:在很多服务器初始状态下,无法服务1w左右的并发连接.这与每次服务的资源消耗.服务器的硬件配置固然有关,但很多时候是被linux的默认配置以及软件st ...

  3. Xshell中文乱码问题

    1.  先查看当前使用的语言: echo $LANG 2.  查看系统的语言安装包: locale 3.  如果没有中文安装包(包含zh_CN字样),需要网络或者自己上传安装包,安装 4.  有了中文 ...

  4. JS区别不同浏览器(微信、手机等)

    最近一直在忙于自己公司的旅游产品,设计方面太广并且要兼容各种设备和场景,包括PC.Mobile.Pad.还有各种支付.由于微信支付和支付宝存在竞争,所以需要区别不同的浏览器,并且WEB项目还要出现在A ...

  5. Android 基于Message的进程间通信 Messenger完全解析

    一.概述 说到Android进程间通信,大家肯定能想到的是编写aidl文件,然后通过aapt生成的类方便的完成服务端,以及客户端代码的编写.如果你对这个过程不熟悉,可以查看Android aidl B ...

  6. 浅谈html5网页内嵌视频

    更好的阅读体验:浅谈html5网页内嵌视频 如今在这个特殊的时代下:flash将死未死,微软和IE的历史问题,html5标准未定,苹果和谷歌的闭源和开源之争,移动互联网的大势所趋,浏览器各自为战... ...

  7. Windows 8.1 Preview 开发资源汇总

    Microsoft Build 2013开发者大会已经结束,从Session安排上看主要以Windows 8.1为主.我相信大家有已经或多或少的体验过Windows 8.1 Preview了,关于操作 ...

  8. alt属性和title属性差异---终于分清楚了!

    凡是接触过前端的开发者,相信都会接触到<img>标签,自然alt title更是不会陌生,但对他们真正的含义和使用方法,你确定了解吗? 参考: http://www.junchenwu.c ...

  9. pentaho saiku 安装全过程

    公司希望也开发一套多维分析系统,以解决运营/产品无休止的需求和技术人力不足的矛盾! 一.开发选型: 一.BIRT:易用性差,所以没再使用 二.JasperReport+ireport:文档收费,不支持 ...

  10. 使用SharePoint Designer定制开发专家库系统实例!

    将近大半年都没有更新博客了,趁这段时间不忙,后续会继续分享一些技术和实际应用.对于Sharepoint的定制开发有很多种方式,对于一般的应用系统,可以使用Sharepoint本身自带的功能,如列表作为 ...