1、Package

Package类的主要作用是解决命名冲突。package中所存放的所有文件,一般分一下就分这三种

  1,java程序源文件,扩展名为.java。

  2,编译好的java类文件,扩展名为.class。

  3,其他文件,其他任何文件,也称为resource

  例如图片文件,xml文件,mp3文件,avi文件,文本文件……

一个.java文件里面可以包含一个public的类,若干package类(package类特征是没有任何访问控制修饰),还有内隐类的话,则还可以包含若干protected和private的类。.java和.class不是一对一,而是一对多的关系,不过.java和public的类是一对一的。对complier来说,there's no relationship between nested packages. For example, the packages java.util and java.util.jar have nothing to do with each other.

All standard java packages are inside the  java and javax package hierarchies.

To guarantee unique packages, we use an Internet domain name( which is known to be unique ) written in reverse. For example, package name could be com.hortsman.corejava while hortsman.com is an Internet domain name.

2、import

import只是一种让你偷点懒少打字的方法,import可以使用通配符*,*代表某package下所有的public class或interface,不包括子目录。A class can use all calsses from its own package and all public classes from other packages. Besides, it's wrong to use java.* or java.*.* to import all packages.

import不像 #include 一样,会将档案内容载入进来。import 只是请编译器帮你打字,并不会把别的档案的程式码写进来。如果没有import,你每次要输出都要写上全称java.lang.System.out.println(),而import java.lang.System后,可以直接使用out.println()。import并不影响classpath。classpath里面的东西就是package所包纳的资源。classpath的写法如同path,只是里面可以写的一般只有zip文件、jar文件和目录。 classpath在java里面是被一个叫做classloader的东西所使用的,classloader顾名思义,就是load class用的,但它也可以load其它在package里面的东西。运行的时候,jvm每次都是从classpath找类,如果classpath里没有,那么你import也没用。import就是为了简便,仅此而已。

由于java.lang这个package里的东西由于太常使用,所以java默认import这个package,即import java.lang.*。所以我们可以直接使用System.out.println(),因为complier会自动为我们加上import java.lang.*。

import使用通配符*不会降低Java代码的执行效率。 Java编译器产生的类文件仅包含编译单元实际使用到的类或接口的符号引用. It has no negative effect on code size.但是它会有以下问题:

1>编译速度:在一个很大的项目中,它们会极大的影响编译速度.但在小型项目中使用在编译时间上可以忽略不计.

2>命名冲突:原本采用package就是为了解决命名冲突,这样省略违背了初衷。

3>说明问题:全名的使用是自说性的.毕竟高级语言的代码是给人看的.

4>无名包(default package)问题:如果在编译单元的顶部没有包声明,Java编译器首选会从无名包中搜索一个类型,然后才是按需类型(import ××.*)声明.如果有命名冲突就会产生问题.

In eclipse, you can select Source->Organize Imports. Then package statements such as import java.util.* are atuomatically expanded into a list of specific imports such as: improt java.util.ArrayList;   import java.util.Date;

static imports: For example, after the statement import static java.lang.System.*, you can use the static methods and fields of System class directly as out.println(""); 但是我们不推荐这样用,因为丧失了clearity。

reference:http://blog.chinaunix.net/uid-25756163-id-276244.html;core java(volumeⅠ)

java package and 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解析(一)

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

  3. Java package和import语句

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

  4. Java——package和import关键字

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

  5. Java——package与import

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

  6. java package 命名空间

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

  7. Java跟Javac,package与import

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

  8. java之package与import

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

  9. Java学习10——package和import

    package和import语句 为了便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java引入包(package)机制,提供类的多重类命名空间,使用时,import引入相应package ...

随机推荐

  1. MySQL 中随机抽样:order by rand limit 的替代方案

    最近由于需要大概研究了一下MYSQL的随机抽取实现方法.举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RA ...

  2. 初识 Asp.Net内置对象之Response对象

    Response对象 Respose对象用于将数据从服务器发送回浏览器.它允许将数据作为请求的结果发送到浏览器,并提供有光响应的信息,可以用来在页面中输入数据,在页面中跳转,还可以传递各个页面的参数, ...

  3. Table of Contents - TCP/IP

    网络访问层 Ethernet II 网际层 IP IPv4 报文格式 ICMP ICMP 报文分析 ping: 向网络主机发送 ICMP ECHO_REQUEST 包 ARP ARP 过程 arp 命 ...

  4. JavaScript之聊天室设计摸拟

    把聊天室的界面先做好,主代码(现在还只能单机模式・_・): window.onload = function(){ var arrIcon = ['http://tva1.sinaimg.cn/cro ...

  5. shell常用代码积累

    1.使用getopts从命令行接收参数 例: while getopts h:u:p: OPTION do case $OPTION in h) echo "主机地址:$OPTARG&quo ...

  6. windows Api AlphaBlend的使用方法

    很早的时候公司里开发了个c++客户端软件,需要支持windows2000,要求简单小巧,并且不希望引入其他界面库,图形引擎之类的东西,像gdi+之类的,于是对于美工做出来的一些界面,需要有alpha通 ...

  7. 将ubuntu14.04设置为文本模式启动?

    修改改GRUB 的配置文件(不建议直接改 grub.conf) $sudo vim /etc/default/grub 找到: GRUB_CMDLINE_LINUX_DEFAULT="qui ...

  8. 深刻理解C#中资源释放

    今天我的一个朋友看到我写的那篇<C#中用AJAX验证用户登录>时,给我指出了点小毛病.就是在用户登录时,如果用户登录失败,在下面这段代码中,都会new出来一个User对象,如果连续登录失败 ...

  9. hdu 1102 Constructing Roads Kruscal

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 题意:这道题实际上和hdu 1242 Rescue 非常相似,改变了输入方式之后, 本题实际上更 ...

  10. C++ Priority Queues(优先队列) and C++ Queues(队列)

    C++优先队列类似队列, 但是在这个数据结构中的元素按照一定的断言排列有序. empty() 如果优先队列为空,则返回真 pop() 删除第一个元素 push() 加入一个元素 size() 返回优先 ...