a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 60|回复: 0

[软件设计师] 2012年软考软件设计师辅导之有关于Java中import使用

[复制链接]
发表于 2012-8-2 09:08:23 | 显示全部楼层 |阅读模式
很多人以为原始码.java文件中的import会让编译器把所import的程序通通写到编译好的.class档案中,或是认为import跟C/C++的#include相似,实际上,这是错误的观念。   让我们先了解一下,Java的package到底有何用处。 1 S+ P2 x- W: x% i# A' a
  其实,package名称就像是我们的姓,而class名称就像是我们的名字。package名称有很多。的,就好像是复姓。比如说java.lang.String,就是复姓java.lang,名字为String的类别;java.io.InputStream则是复姓 - ~* l! q* N& [& N+ A
  java.io,名字为InputStream的类别。 $ k( y5 e! c; |3 L4 m9 J
  Java会使用package这种机制的原因也非常明显,就像我们取姓名一样,光是一间学校的同一届同学中,就有可能会出现不少同名的同学,如果不取姓的话,那学校在处理学生数据,或是同学彼此之间的称呼,就会发生很大的困扰。相同的,全世界的Java类别数量,恐怕比台湾人口还多,而且还不断的在成长当中,如果类别不使用套件名称,那在用到相同名称的不同类别时,就会产生极大的困扰。幸运的是,Java的套件名称我们可以自己取,不像人的姓没有太大的选择(所以有很多同名同姓的),如果依照Sun的规范来取套件名称,那理论上不同人所取的套件名称不会相同(请参阅“命名惯例”的相关文章),也就不会发生名称冲突的情况。
- Q  R5 j% j" n; a2 V  可是问题来了,因为很多套件的名称非常的长,在写程序时,会多打好多字,花费不少时间,比如说:
. r$ s1 @& s8 O  java.io.InputStreamis=java.lang.System.in; 6 h2 a0 z% ]) Z, x1 ]
  java.io.InputStreamReaderisr=newjava.io.InputStreamReader(is); + R; c/ z, h# c+ s
  java.io.BufferedReaderbr=newjava.io.BufferedReader(isr);
4 g, c5 `3 Z4 {  i; e  实在是不美观又麻烦。于是,Sun想了一个办法,就是import.
9 V4 k2 ~, S1 Q, [- I/ U  这个import就是在程序一开头的时候,先说明程序中会用到那些类别的 7 e2 A% a' f% K8 v4 P
  简称,也就是只称呼名字,不称呼他的姓。首先,在档案开头写: 9 e8 i# [! V  F( T" B
  importjava.lang.System;
, b( E$ \: Y5 L. n  importjava.io.InputStream; & G* l' F# t+ V# ^8 F1 w$ j1 G$ z- |
  importjava.io.InputStreamReader; - m) e) ?, q, k4 S) H! Q
  importjava.io.BufferedReader; $ {, W8 Y7 e6 F
  这几行说明了这四个姓名的类别,在程序中只用他的名字来称呼,所以当程序中提到System就是指java.lang.System,而InputStream就是指java.io.InputStream,依此类推。于是原来的程序就变成: % ~& _9 s. d: x. {0 C, {
  InputStream=System.in; ' S" X: A! B* A3 U/ |
  InputStreamReaderisr=newInputStreamReader(is);   D6 s& p6 I5 g" G
  BufferedReaderbr=newBufferedReader(isr); 9 t; e; b% R3 g8 V
  这样看起来是不是清爽多了呢?如果这些类别用的次数很多,那就更能体会到import的好处了。可是这样还是不够,因为懒是人的天性,还是会有人觉得打太多import了也很浪费时间,于是Sun又提供了一个方法: ; D+ @- o' ~* A3 S
  importjava.lang.*; 6 Z) w4 z2 ^* D" T* H$ q7 ~
  importjava.io.*;
  w  j" f2 s$ c1 K& T  意思就是,等一下程序中提到的没有姓名的类别,不是姓java.lang,就是姓java.io,如果这两个里面有同样名字的类别,而不幸的你又只用名字称呼这个类别,那编译器仍然会跟你抱怨,因为它还是不知道你说的这个类别指那一
+ v: H$ O2 f7 f% {8 y  个姓的类别。那可不可以再懒一点呢,只写:
4 U. z* G" x! d( B" w  u3 ?- u  importjava.*; 8 Q3 Z( s; E, A' `/ A5 c/ P
  历史告诉我们,人可以懒,但不能太懒,这样是不行的。因为那些类别是姓java.io而不是姓java.就像姓「诸葛」的人应该不会喜欢你称他为「诸」先生吧。
6 L6 X* {; O0 I+ a  为甚么我一开始说import跟#include不同呢?因为import的功能到此为止,它不像#include一样,会将档案内容载入进来。import只是请编译器帮你打字,让编译器把没有姓的类别加上姓,并不会把别的文件的程式码写进来。如果你想练习打字,可以不要使用import,只要在用到类别的时候,用它的全部姓名来称呼它就行了(就像例子一开始那样),跟使用import完全没有甚么两样。
, d4 @0 B, u% T, q  另外,虽然人不可以太懒,但是Sun还是帮我们多偷了一点懒。因为java.lang这个套件实在是太常太常太常用到了,几乎没有程序不用它的,所以不管你有没有写importjava.lang;,编译器都会自动帮你补上,也就是说编译器只要看到没有姓的类别,它就会自动去java.lang里面找找看,看这个类别是不是属于这个套件的。所以我们就不用特别去importjava.lang了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-19 23:07 , Processed in 0.264802 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表