java package and import

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Ⅰ)

上一篇:proBuilder编辑的模型变黑


下一篇:WEB网站性能优化