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. Java中的操作日期的工具类

    import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; imp ...

  2. hdu-5692 Snacks(dfs序+线段树)

    题目链接: Snacks Problem Description   百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的 ...

  3. linux和Windows下文本格式转换

    1.安装转换工具:sudo apt-get install tofrodos 2.开始转换:fromdos grade.sh

  4. Android之开源项目工具库篇

    本文转自:http://www.trinea.cn/android/android-open-source-projects-dev-lib/ 本文中你可以找到那些精美App中各种有特性的View,如 ...

  5. Pure-ftpd无法连接到服务器 425错误

    今天是五一假期的前一天,闲来没事,打开自己的博客,发现很久没有备份数据了,由于工作方面的原因,自己慢慢的退出了技术界,但本人还是依然向往技术界啊!各位技术宅们,加油! 问题发现 当我打开FTP客户端软 ...

  6. 使用命令修改ip地址

    简述:以serverv 2012 r2为例 常用的几种,当然不全,希望能较快的速率记下一种便可 直接配置 1.      查看网卡的显示名称 2.      配置静态iP地址 3.      查看配置 ...

  7. /mnt /media /dev 目录区别

    /mnt 是被系统管理员使用,手动挂载一些临时媒体设备的目录. /medai 是自动挂载的目录,比如我们的U盘插在ubuntu下回自动挂载,就会在/media下生成一个目录,这个目录就是U盘所在目录, ...

  8. 杭电2034——人见人爱A-B

    #include <stdio.h> #include <algorithm> using namespace std; int main () { int a[110],b[ ...

  9. EF调用存储过程

    var objPar1 = new System.Data.Objects.ObjectParameter("ExeResults",typeof(bool)); var objP ...

  10. ADO.NET笔记——使用连接池

    相关知识: 连接池的意义: 应用程序往往涉及大量的,并发的数据访问操作 数据库服务器能够同时维系的连接数量非常有限.如果某个数据库访问操作不及时关闭连接,就会减少其他调用对数据库访问的机会.因此,一般 ...