﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-ckdesignjava-文章分类-JAVA</title><link>http://www.blogjava.net/ckdesignjava/category/8400.html</link><description>JAVA 学习</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:18:46 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:18:46 GMT</pubDate><ttl>60</ttl><item><title>package 与 import</title><link>http://www.blogjava.net/ckdesignjava/articles/35146.html</link><dc:creator>CKJAVA</dc:creator><author>CKJAVA</author><pubDate>Mon, 13 Mar 2006 16:07:00 GMT</pubDate><guid>http://www.blogjava.net/ckdesignjava/articles/35146.html</guid><wfw:comment>http://www.blogjava.net/ckdesignjava/comments/35146.html</wfw:comment><comments>http://www.blogjava.net/ckdesignjava/articles/35146.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ckdesignjava/comments/commentRss/35146.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ckdesignjava/services/trackbacks/35146.html</trackback:ping><description><![CDATA[　　有些人写了一阵子&nbsp;Java，可是对于&nbsp;Java&nbsp;的&nbsp;package&nbsp;跟&nbsp;import&nbsp;还是不太了解。很多人以为原始码&nbsp;.java&nbsp;文件中的&nbsp;import&nbsp;会让编译器把所&nbsp;import&nbsp;的程序通通写到编译好的&nbsp;.class&nbsp;档案中，或是认为&nbsp;import&nbsp;跟&nbsp;C/C++&nbsp;的&nbsp;#include&nbsp;相似，实际上，这是错误的观念。<BR><BR>　　让我们先了解一下，Java&nbsp;的&nbsp;package&nbsp;到底有何用处。<BR><BR>　　其实，package&nbsp;名称就像是我们的姓，而&nbsp;class&nbsp;名称就像是我们的名字。package&nbsp;名称有很多&nbsp;.&nbsp;的，就好像是复姓。比如说&nbsp;java.lang.String，就是复姓&nbsp;java.lang，名字为&nbsp;String&nbsp;的类别；java.io.InputStream&nbsp;则是复姓<BR>　　java.io，名字为&nbsp;InputStream&nbsp;的类别。<BR><BR>　　Java&nbsp;会使用&nbsp;package&nbsp;这种机制的原因也非常明显，就像我们取姓名一样，光是一间学校的同一届同学中，就有可能会出现不少同名的同学，如果不取姓的话，那学校在处理学生数据，或是同学彼此之间的称呼，就会发生很大的困扰。相同的，全世界的&nbsp;Java&nbsp;类别数量，恐怕比台湾人口还多，而且还不断的在成长当中，如果类别不使用套件名称，那在用到相同名称的不同类别时，就会产生极大的困扰。幸运的是，Java&nbsp;的套件名称我们可以自己取，不像人的姓没有太大的选择&nbsp;(&nbsp;所以有很多同名同姓的&nbsp;)，如果依照&nbsp;Sun&nbsp;的规范来取套件名称，那理论上不同人所取的套件名称不会相同&nbsp;(&nbsp;请参阅&nbsp;"命名惯例"的相关文章&nbsp;)，也就不会发生名称冲突的情况。<BR><BR>　　可是问题来了，因为很多套件的名称非常的长，在写程序时，会多打好多字，花费不少时间，比如说：<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;java.io.InputStream&nbsp;is&nbsp;=&nbsp;java.lang.System.in;<BR>&nbsp;&nbsp;&nbsp;&nbsp;java.io.InputStreamReader&nbsp;isr=&nbsp;new&nbsp;java.io.InputStreamReader(is);<BR>&nbsp;&nbsp;&nbsp;&nbsp;java.io.BufferedReader&nbsp;br&nbsp;=&nbsp;new&nbsp;java.io.BufferedReader(isr);<BR><BR>　　实在是不美观又麻烦。于是，Sun&nbsp;想了一个办法，就是&nbsp;import。<BR><BR>　　这个&nbsp;import&nbsp;就是在程序一开头的时候，先说明程序中会用到那些类别的<BR>　　简称，也就是只称呼名字，不称呼他的姓。首先，在档案开头写：<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.lang.System;<BR>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.io.InputStream;<BR>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.io.InputStreamReader;<BR>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.io.BufferedReader;<BR><BR>　　这几行说明了这四个姓名的类别，在程序中只用他的名字来称呼，所以当程序中提到&nbsp;System&nbsp;就是指&nbsp;java.lang.System，而&nbsp;InputStream&nbsp;就是指&nbsp;java.io.InputStream，依此类推。于是原来的程序就变成：<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;=&nbsp;System.in;<BR>&nbsp;&nbsp;&nbsp;&nbsp;InputStreamReader&nbsp;isr&nbsp;=&nbsp;new&nbsp;InputStreamReader(is);<BR>&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;br&nbsp;=&nbsp;new&nbsp;BufferedReader(isr);<BR><BR>　　这样看起来是不是清爽多了呢？如果这些类别用的次数很多，那就更能体会到import&nbsp;的好处了。可是这样还是不够，因为懒是人的天性，还是会有人觉得打太多&nbsp;import&nbsp;了也很浪费时间，于是&nbsp;Sun&nbsp;又提供了一个方法：<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.lang.*;<BR>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.io.*;<BR><BR>　　意思就是，等一下程序中提到的没有姓名的类别，不是姓&nbsp;java.lang，就是姓java.io，如果这两个里面有同样名字的类别，而不幸的你又只用名字称呼这个类别，那编译器仍然会跟你抱怨，因为它还是不知道你说的这个类别指那一<BR>个姓的类别。那可不可以再懒一点呢，只写：<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;java.*;<BR><BR>　　历史告诉我们，人可以懒，但不能太懒，这样是不行的。因为那些类别是姓&nbsp;java.io&nbsp;而不是姓&nbsp;java。就像姓『诸葛』的人应该不会喜欢你称他为『诸』先生吧。<BR><BR>　　为甚么我一开始说&nbsp;import&nbsp;跟&nbsp;#include&nbsp;不同呢？因为&nbsp;import&nbsp;的功能到此为止，它不像&nbsp;#include&nbsp;一样，会将档案内容载入进来。import&nbsp;只是请编译器帮你打字，让编译器把没有姓的类别加上姓，并不会把别的文件的程式码写进来。如果你想练习打字，可以不要使用&nbsp;import，只要在用到类别的时候，用它的全部姓名来称呼它就行了(就像例子一开始那样)，跟使用&nbsp;import&nbsp;完全没有甚么两样。<BR><BR>　　另外，虽然人不可以太懒，但是&nbsp;Sun&nbsp;还是帮我们多偷了一点懒。因为java.lang&nbsp;这个套件实在是太常太常太常用到了，几乎没有程序不用它的，所以不管你有没有写&nbsp;import&nbsp;java.lang;，编译器都会自动帮你补上，也就是说编译器只要看到没有姓的类别，它就会自动去&nbsp;java.lang&nbsp;里面找找看，看这个类别是不是属于这个套件的。所以我们就不用特别去import&nbsp;java.lang&nbsp;了。<BR><img src ="http://www.blogjava.net/ckdesignjava/aggbug/35146.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ckdesignjava/" target="_blank">CKJAVA</a> 2006-03-14 00:07 <a href="http://www.blogjava.net/ckdesignjava/articles/35146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>