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. hdu 3656 DLX

    思路:二分枚举建边,用DLX判断是否满足. #include<set> #include<cmath> #include<queue> #include<cs ...

  2. python实现发送邮件功能

    '''套接字是为特定的网络协议(例如TCP/IP,ICMP/IP,UDP/IP等),允许程序和接受并进行连接,要在python 中建立具有TCP和流套接字的简单服务器,需要使用socket模块,利用该 ...

  3. 使用开源库MagicalRecord操作CoreData

      1. 将 MagicalRecord 文件夹拖入到工程文件中,引入 CoreData.frame 框架 2. 在 .pch 文件中引入头文件 CoreData+MagicalRecord.h 注: ...

  4. AspNetPager学习使用1

    今天开始研究使用AspNetPager 首先贴上下载链接:http://www.webdiyer.com/aspnetpager/downloads/ 在下载链接中,作者已经提供了使用方法.在这里,本 ...

  5. django 学习-15 .Django文件上传(用户注册)

    1.vim blog/views.py from django.shortcuts  import  render_to_responsefrom django.http   import HttpR ...

  6. jQuery中append、insertBefore、after与insertAfter方法注意事项

    这里列的是针对初学jQuery者来说容易搞不懂的部分,我在这里把这些方法列了个清单,希望大家能看的懂.如下: 方法 源包装集/字串 目标包装集体 特性描述 A.append(B) B A 若目标包装集 ...

  7. 20150528—html使用Jquery遍历text文本框的非空验证

    <script src="jquery-1.7.2.min.js" type="text/javascript"></script> & ...

  8. (转)Linux性能调优之虚拟内存篇

    简单地说,虚拟内存就是硬盘中的一块区域,它用来存放内存里使用频率不高的页面文件.好处是为了提高内存的利用率 - 让使用频率高的页面文件活动在内存区域中,提高CPU对数据操作的速度.在Linux中,这个 ...

  9. 10 个非常有用的 AngularJS 框架

    AngularJS是最流行的开源web app框架.AngularJS被用于解决阻碍单页应用程序开发的各种挑战. 你作为一个AngularJS用户,却不知道一些可以帮助你美化编码的资源?那么一定不能错 ...

  10. CC2530之Flash映射

    标准51系列内核的逻辑空间为哈佛结构,也就是说,程序空间和地址空间是分开的.具体分为: CODE区:存放程序代码和一些常量信息,有16根地址总线,寻址范围为0x0000~0xFFFF,共计64K DA ...