Java 中的package 跟import

来源:互联网 发布:淘宝产品文案 编辑:程序博客网 时间:2024/05/22 14:46

让我们先了解一下,Java package 到底有何用处。

  其实,package 名称就像是我们的姓,而 class 名称就像是我们的名字。package 名称有很多 . 的,就好像是复姓。比如说 java.lang.String,就是复姓 java.lang,名字为 String 的类别;java.io.InputStream 则是复姓

java.io
,名字为 InputStream 的类别。


  Java 会使用 package 这种机制的原因也非常明显,就像我们取姓名一样,光是一间学校的同一届同学中,就有可能会出现不少同名的同学,如果不取姓的话,那学校在处理学生数据,或是同学彼此之间的称呼,就会发生很大的困扰。相同的,全世界的 Java 类别数量,恐怕比台湾人口还多,而且还不断的在成长当中,如果类别不使用套件名称,那在用到相同名称的不同类别时,就会产生极大的困扰。幸运的是,Java 的套件名称我们可以自己取,不像人的姓没有太大的选择 ( 所以有很多同名同姓的 ),如果依照 Sun 的规范来取套件名称,那理论上不同人所取的套件名称不会相同 ( 请参阅 "命名惯例"的相关文章 ),也就不会发生名称冲突的情况。

  可是问题来了,因为很多套件的名称非常的长,在写程序时,会多打好多字,花费不少时间,比如说:


java.io.InputStream is = java.lang.System.in;
java.io.InputStreamReader isr= new java.io.InputStreamReader(is);
java.io.BufferedReader br = new java.io.BufferedReader(isr);

  实在是不美观又麻烦。于是,Sun 想了一个办法,就是 import


  这个 import 就是在程序一开头的时候,先说明程序中会用到那些类别的

  简称,也就是只称呼名字,不称呼他的姓。首先,在档案开头写:


import java.lang.System;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;

  这几行说明了这四个姓名的类别,在程序中只用他的名字来称呼,所以当程序中提到 System 就是指 java.lang.System,而 InputStream 就是指 java.io.InputStream,依此类推。于是原来的程序就变成:


InputStream = System.in;
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

  这样看起来是不是清爽多了呢?如果这些类别用的次数很多,那就更能体会到import 的好处了。可是这样还是不够,因为懒是人的天性,还是会有人觉得打太多 import 了也很浪费时间,于是 Sun 又提供了一个方法:


import java.lang.*;
import java.io.*;

  意思就是,等一下程序中提到的没有姓名的类别,不是姓 java.lang,就是姓java.io,如果这两个里面有同样名字的类别,而不幸的你又只用名字称呼这个类别,那编译器仍然会跟你抱怨,因为它还是不知道你说的这个类别指那一

个姓的类别。那可不可以再懒一点呢,只写:


import java.*;

  历史告诉我们,人可以懒,但不能太懒,这样是不行的。因为那些类别是姓 java.io 而不是姓 java。就像姓『诸葛』的人应该不会喜欢你称他为『诸』先生吧。


  为甚么我一开始说 import #include 不同呢?因为 import 的功能到此为止,它不像 #include 一样,会将档案内容载入进来。import 只是请编译器帮你打字,让编译器把没有姓的类别加上姓,并不会把别的文件的程式码写进来。如果你想练习打字,可以不要使用 import,只要在用到类别的时候,用它的全部姓名来称呼它就行了(就像例子一开始那样),跟使用 import 完全没有甚么两样。


  另外,虽然人不可以太懒,但是 Sun 还是帮我们多偷了一点懒。因为java.lang 这个套件实在是太常太常太常用到了,几乎没有程序不用它的,所以不管你有没有写 import java.lang;,编译器都会自动帮你补上,也就是说编译器只要看到没有姓的类别,它就会自动去 java.lang 里面找找看,看这个类别是不是属于这个套件的。所以我们就不用特别去

import java.lang
了。


java-package
包的使用方法


   当一个大型程序交由数个不同的程序人员开发时,用到相同的类名是很有可能的,那么如果发生了这样的事件我们该怎么办那?,在我们java程序开发中为了避免上述事件,提供了一个包的概念(package),那么既然有了这样一种方法能避免上述事件,那么我们怎样使用package那?,使用方法很简单我们只需要在我们写的程序第一行使用package关键字来声明一个包就行了,例如我们来声明一个名为pack1的包名,package pack1;好了下面我们就利用范例来说明package的使用方法,及其编译运行的方法,


假设我们在d盘下的新建一个文件(pack1),在pack1文件内包含两个java程序一个是Showmethod.javaTestshow.java


Showmethod.java

package pack1;//
在这里把Showmethod类纳入到pack1包内

class Showmethod{
public void show(){
System.out.println("I'm a show method() of Showmethod class");
}
}


Testshow.java


package pack1;//
在这里把Testshow类也纳入到pack1包内

public class Testshow{
public static void main(String args[]){
Showmethod sm=new Showmethod();
sm.show();
}
}


下面我们就先来看一下如何编译这两个位于同一个包内的java程序,


1:javac pack1/Showmethod.java
2:javac pack1/Testshow.java
这就是编译的方法  pack1是包名,包名后面跟的就是我们要编译的那个类名,编译好后pack1目录下回声成两个class文件,


运行方法:

java pack1.Testshow
注意运行时要指出包名,包名后有一个点"."然后是类名,


2:
下面我们来看一下如何访问不在同一个包内的类,


在D盘分别建立pack1,pack2两个文件,
建立好之后将Showmethod.java放到pack1包内,

  Showmethod.java的代码如下:

package pack1;
public class Showmethod{
public void show(){
System.out.println("I'm a show method() of Showmethod class");
}
}

  将Testshow.java放到pack2包内

Testshow.java
的代码如下:

package pack2;
public class Testshow{
public static void main(String args[]){
pack1.Showmethod sm=new pack1.Showmethod();
sm.show();
}
}
由于此类需要调用位于pack1包中的Showmethod类的show方法,所以这里pack1.Showmethod sm=new pack1.Showmethod();这样写,我们还可以使用import 语句将pack1包内的Showmethod方法导入进来,这样这个地方pack1.Showmethod sm=new pack1.Showmethod();我们就可以这样写了Showmethod sm=new Showmethod();对于import我们下一范例进行说明,

 还有一点我们必须注意,在访问不同 package里的类时,被访问的类必须被声明为public(就是公有类型的),否则在编译回报告错误,

 编译方法"

javac pack1/Showmethod.java
2: javac pack2/Testshow.java
编译好之后pack1,pack2目录下回分别产声一个.class文件,

运行方法:

java pack2.Testshow


使用import导入package



在D盘分别建立pack1,pack2两个文件,

建立好之后将Showmethod.java放到pack1包内,

  Showmethod.java的代码如下:

package pack1;
public class Showmethod{
public void show(){
System.out.println("I'm a show method() of Showmethod class");
}
}

  将Testshow.java放到pack2包内

Testshow.java
的代码如下

package pack2;
import pack1.Showmethod;
public class Testshow{
public static void main(String args[]){
Showmethod sm=new Showmethod();
sm.show();
}
}
注意:当我们使用了import 语句将pack1中的Showmethod方法导入之后,我们在main方法中产生Showmethod实例对象时就不用在前面加上包名了,

编译方法"

javac pack1/Showmethod.java
2: javac pack2/Testshow.java
编译好之后pack1,pack2目录下回分别产声一个.class文件,

运行方法:

java pack2.Testshow

在D盘分别建立pack1,pack2两个文件,

建立好之后将Showmethod.java放到pack1包内,

  Showmethod.java的代码如下:

package pack1;
public class Showmethod{
public void show(){
System.out.println("I'm a show method() of Showmethod class");
}
}

  将Testshow.java放到pack2包内

Testshow.java
的代码如下:

package pack2;
public class Testshow{
public static void main(String args[]){
pack1.Showmethod sm=new pack1.Showmethod();
sm.show();
}
}
由于此类需要调用位于pack1包中的Showmethod类的show方法,所以这里pack1.Showmethod sm=new pack1.Showmethod();这样写,我们还可以使用import 语句将pack1包内的Showmethod方法导入进来,这样这个地方pack1.Showmethod sm=new pack1.Showmethod();我们就可以这样写了Showmethod sm=new Showmethod();对于import我们下一范例进行说明,

 还有一点我们必须注意,在访问不同 package里的类时,被访问的类必须被声明为public(就是公有类型的),否则在编译回报告错误,

 编译方法"

javac pack1/Showmethod.java
2: javac pack2/Testshow.java
编译好之后pack1,pack2目录下回分别产声一个.class文件,

运行方法:

java pack2.Testshow


使用import导入package



在D盘分别建立pack1,pack2两个文件,

建立好之后将Showmethod.java放到pack1包内,

  Showmethod.java的代码如下:

package pack1;
public class Showmethod{
public void show(){
System.out.println("I'm a show method() of Showmethod class");
}
}

  将Testshow.java放到pack2包内

Testshow.java
的代码如下

package pack2;
import pack1.Showmethod;
public class Testshow{
public static void main(String args[]){
Showmethod sm=new Showmethod();
sm.show();
}
}
注意:当我们使用了import 语句将pack1中的Showmethod方法导入之后,我们在main方法中产生Showmethod实例对象时就不用在前面加上包名了,

编译方法"

javac pack1/Showmethod.java
2: javac pack2/Testshow.java
编译好之后pack1,pack2目录下回分别产声一个.class文件,

运行方法:

java pack2.Testshow

原创粉丝点击