亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

完全掌握Java中的“包”機制

2019-11-18 13:07:48
字體:
來源:轉載
供稿:網友

  "包"機制是java中特有的,也是java中最基礎的知識。一些初學java的朋友,通常象學其它語言一樣從教材上copy一些程序來運行,可是卻經常碰到莫名其妙的錯誤提示。這些問題事實上都出在對"包"的原理不夠清楚。本文將就此問題進行深入闡述。
  
  一、為什么java中要有"包"的概念?
  
  以一言概之,java中"包"的引入的主要原因是java本身跨平臺特性的需求。因為java中的所有的資源也是以文件方式組織,這其中主要包含大量的類文件需要組織治理。java中同樣采用了目錄樹形結構。雖然各種常見操作系統平臺對文件的治理都是以目錄樹的形式的組織,但是它們對目錄的分隔表達方式不同,為了區別于各種平臺,java中采用了"."來分隔目錄。
  
  二、java中包結構和平臺的銜接
  
  java中的資源存在于不同平臺下時必然會有很大差異。因此跨平臺的java包結構和平臺之間必須通過一種方式來銜接到一起。事實上它們就是通過我們很熟悉的classpath的設置來銜接到一起的。舉個例子:
  
  我在Windows2000環境下的classpath設置如下:
  
  classpath = d:/jdk1.4.2/lib/dt.jar; d:/cjm
  
  類的銜接關系可以用下圖來表達:
  
完全把握Java中的

  從圖中可以看出,java中的類的組織是"懸空"的,這樣的話,它們可以隨意放在任意平臺下,但是要在該平臺下正確找到一個類,則必須使用classpath來設置類所在目錄的前面一部分(即區別于平臺的部分)。在java中經常把一棵類樹壓縮成一個.jar文件,如圖中的rt.jar,這并不影響對類的查找,在指定環境變量時可以指定.jar文件所在目錄,也可以具體指明.jar的完全查找路徑,即上例中的classpath中也可描述成:
  
  classpath = d:/jdk1.4.2/lib; d:/cjm
  
  當正確設置了平臺下的classpath環境變量時,java跨平臺的特性就體現出來了。即你在編寫程序中,描述一個類時,就不用具體指明它的完整路徑,而是僅僅指明java中的類路徑就可以了,即指出圖1中豎線右邊的查找路徑就可以了。這樣的話,你編寫的程序拿到任何平臺下時,只需要根據類文件的存放目錄來書寫相應的classpath環境變量,而不用因為類的存放環境變化而修改程序。
  
  注重:java中對于某個類的查找是把classpath中的每一項逐一連接,當一個連接能夠正確找到相關類后,便不再向后查找。
  
  三、正確使用"包"
  
  在使用包的過程中有很多需要注重的小細節,這里把常見的問題都列舉如下:
  
  1、對類路徑的設置通常有兩種方法:
  
  i)在系統的環境變量中設置,設置方法依據平臺而變;
  
  ii)以命令參數的形式來設置。
  
  如:javac -classpath d:/jdk1.4.2/lib d:/cjm/edu/test/TestFile.java
  java -classpath .;d:/jdk1.4.2/lib; d:/cjm edu.test.TestFile
  
  注重:i)javac和java命令有很大區別,可以這樣區分,javac是一個平臺命令,它對具體的平臺文件進行操作,要指明被編譯的文件路徑。而java是一個虛擬機命令,它對類操作,即對類的描述要用點分的描述形式,并且不能加擴展名,還要注重類名的大小寫。
  
  ii)有一個很希奇的問題,即javac命令后面的classpath默認包含當前目錄(符合windows的習慣),可是在java命令后面的classpath卻不包含當前目錄,所以在它的classpath中一定不能忘了加上當前目錄的描述,即加上"."。
  
  2、在java程序中對類路徑的描述用"."分隔,而且也有當前目錄的概念。如要運行圖1中的TestFile必須指明為 edu.test.TestFile。但是假如在類TestFile中要調用和它在同一目錄中的TestString,則不必指明目錄前綴。
  
  3、在java程序中所有使用到的類都應該清楚的指明這個類的查找路徑。一般有兩種方法指明:
  
  i)在程序的開始使用import要害字指明。如類TestFile中要用到FileInputStream類,則在程序頭中加入import java.io.FileReader; 或import java.io.*;
  
  ii)在程序中用到FileFileReader類處直接寫完整路徑,如: java.io.FileFileReader fin = new java.io.FileReader("filename");
  
  注重:java.lang包總是被默認導入的。
  
  4、類的目錄結構一定要和類中第一句"包聲明"一致。如類TestFile.class對應的.java文件的第一句必須包含:package edu.test;
  
  確保類的存放路徑和類中指明的"包路徑"一致的方法一般有兩種:
  
  i)編寫.java文件時存放的目錄事先確定好,如TestFile.java就直接放在edu/test目錄下,然后用下面的語句編譯:
  
  javac -classpath d:/jdk1.4.2/lib d:/cjm/edu/test/TestFile.java
  當編譯完成后,產生的TestFile.class文件會出現在編譯命令中java文件的描述路徑中。即出現在d:/test/edu/test中
  
  ii)通過-d參數的使用來編譯程序。如使用下面的語句來編譯:
  
  javac -d d:/cjm d:/temp/TestFile.java
  將在-d后指定的目錄d:/cjm下面自動按照packagek中指定的目錄結構來創建目錄,并且將產生的.class文件放在這個新建的目錄下,即在d:/cjm下面建立/edu/test目錄,然后產生的TestFile.class放在d:/cjm/edu/test目錄下。
  
  5、為了便于工程發布,可以將自己的類樹打成.jar文件。如將圖1中的edu下面的所有類文件打成一個.jar文件,可以先轉到d:/cjm目錄,再用下面的命令:
  
  jar -cvf test.jar edu這時會在d:/test下產生一個test.jar文件,此.jar文件中包含edu/下的完整目錄結構和文件。使用這個.jar文件時,只需在classpath中指明.jar文件的存放路徑即可。
  
  6、對其它資源的使用,如圖標文件,文本等資源文件的使用必須要注重,查找資源文件不應從類文件所在的目錄開始,而是應該從package指定的類路徑的起點開始(圖1中從edu所在目錄開始)。如圖1中看到的文本文件Word.txt在resource下面,而類文件TestFile.class在edu/test下,在TestFile.class中要使用到resource中的word.txt,要按如下操作:
  
  fin= new FileReader("resource/word.txt");
  而不應該是:fin= new FileReader("../../resource/word.txt");
  
  四、舉例
  
  本例用于統計一個文本文件中的單詞數,注釋中的編號對應前一節的編號:
  
  // TestFile.java
  package edu.test; // --------------------------------------- 4
  import java.io.FileReader; // ------------------------------ 3
  import java.io.LineNumberReader;
  class TestFile{
  public static void main(String []argv){
  TestString ts = new TestString(); // ---------------- 2
  FileReader fin;
  LineNumberReader line = null;
  int wordNum = 0;
  try{
  fin= new FileReader("resource/word.txt"); // ---- 6
  line = new LineNumberReader(fin);
  }catch(Exception e){
  e.PRintStackTrace();
  System.exit(0);
  }
  while(true){
  try{
  String temp = line.readLine();
  wordNum += ts.CountWord(temp);
  }catch(Exception e){
  break;
  }
  }
  try{
  line.close();
  }catch(Exception e){};
  System.out.println("Word count is:" + wordNum);
  }
  }
  
  // TestString.java
  package edu.test;
  import java.util.*;
  class TestString {
  int CountWord(String str){
  StringTokenizer token = new StringTokenizer(str);
  return token.countTokens();
  }
  }
  
  兩個.java文件存放在d:/temp目錄下,當前目錄為d:/temp使用下面的命令進行編譯:
  
  d:/temp>javac -classpath d:/jdk1.4.2/lib -d d:/test *.java
  
  用下面的命令運行:
  
  // --------------------------------- 1
  d:/temp> java -classpath .;d:/jdk1.4.2/lib; d:/test/com edu.test.TestFile
  
  假如需要打包的話,先轉到d:/test,然后用下面命令:
  
  // --------------------------------- 5
  jar -cvf test.jar edu
  這時可產生一個test.jar文件,可將此文件置于任何平臺下使用。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品热视频| 欧美性xxxx极品高清hd直播| 91精品国产高清久久久久久91| 亚洲国产精品久久91精品| 亚洲国内高清视频| 日韩中文第一页| 精品视频一区在线视频| 7m精品福利视频导航| 欧美乱大交xxxxx另类电影| 久久久影视精品| 1769国内精品视频在线播放| 成人国产在线激情| 国产精品国产三级国产专播精品人| 国产成人精品一区二区| 欧美精品久久久久| 浅井舞香一区二区| 不卡中文字幕av| 日韩电影大全免费观看2023年上| 精品日本高清在线播放| 久久精品视频中文字幕| 亚洲永久在线观看| 欧美国产一区二区三区| 亚洲国产成人精品女人久久久| 久久色在线播放| 欧美激情国产日韩精品一区18| 日韩av理论片| 日韩亚洲综合在线| 懂色aⅴ精品一区二区三区蜜月| 成人免费在线网址| 精品国产一区二区三区久久狼黑人| 亚洲国产欧美精品| 亚洲日本欧美日韩高观看| 国产亚洲精品久久久| 热久久美女精品天天吊色| 精品无人区乱码1区2区3区在线| 亚洲国产精彩中文乱码av在线播放| 国产精品免费在线免费| 国产精品国产自产拍高清av水多| 亚洲成人网在线| 精品久久久久久电影| 美女视频久久黄| 亚洲国产高清自拍| 久久久精品日本| 在线观看国产精品淫| 久久精品一本久久99精品| 亚洲免费成人av电影| 精品中文字幕视频| 日本91av在线播放| 亚洲精品久久久久中文字幕二区| 91高清视频免费| 日本久久久久久久久久久| 国产精品96久久久久久| 欧美日韩在线看| 国产精品h片在线播放| 在线中文字幕日韩| 中文日韩在线观看| 国产亚洲精品久久久| 中文字幕在线观看亚洲| 国产91精品视频在线观看| 亚洲一区二区三区在线视频| 国产精品成人av在线| 国产美女直播视频一区| 国产精品成人久久久久| 亚洲男人的天堂网站| 黄色91在线观看| 亚洲日韩中文字幕在线播放| 亚洲一区二区三区乱码aⅴ| 亚洲精品福利视频| 亚洲欧美日韩爽爽影院| 国内精久久久久久久久久人| 国产精品电影网站| 国产成人精品999| 午夜免费久久久久| 国产精品久久久久久久久免费| 午夜精品久久久久久久男人的天堂| 草民午夜欧美限制a级福利片| 国产午夜精品免费一区二区三区| 国产精品情侣自拍| 国产精品视频26uuu| 91精品中国老女人| 国产精品嫩草影院一区二区| 欧美视频专区一二在线观看| 欧美日韩美女在线观看| 久久99精品久久久久久青青91| 国产精品极品尤物在线观看| 高清欧美性猛交xxxx| 欧美精品videosex牲欧美| 人人做人人澡人人爽欧美| 亚洲女人天堂色在线7777| 国产极品jizzhd欧美| 国产精品久久综合av爱欲tv| 91经典在线视频| 国产日韩在线视频| 国产成人综合久久| 日韩美女免费线视频| 亚洲欧美成人一区二区在线电影| 久久久久久国产三级电影| 一级做a爰片久久毛片美女图片| 久久激情视频免费观看| 国产一区二区三区高清在线观看| 欧美性猛交xxxx富婆| 日韩av成人在线观看| 亚洲第一天堂无码专区| 国产精品久久久久久久久免费| 欧美黑人国产人伦爽爽爽| 亚洲女人天堂网| 欧美日韩中文字幕在线视频| 久久精品在线播放| 亚洲日韩中文字幕在线播放| 97久久精品人人澡人人爽缅北| 91九色国产视频| 91久久久国产精品| 日韩美女在线播放| 欧美日本高清一区| 色琪琪综合男人的天堂aⅴ视频| 亚洲奶大毛多的老太婆| 欧美野外猛男的大粗鳮| 国产中文欧美精品| 91精品视频观看| 国产亚洲日本欧美韩国| 亚洲自拍偷拍色图| 久久综合伊人77777| 亚洲一区二区久久久久久| 中文国产成人精品久久一| 国产欧美日韩中文字幕| 欧美理论片在线观看| 亚洲欧美日本另类| 亚洲视屏在线播放| 菠萝蜜影院一区二区免费| 国产精品va在线播放我和闺蜜| 在线播放国产一区中文字幕剧情欧美| 久久精品久久久久久国产 免费| 国产成人一区二| 91美女福利视频高清| 日韩中文在线中文网在线观看| 亚洲色图18p| 国产一区二区丝袜高跟鞋图片| 中文字幕欧美精品日韩中文字幕| 超薄丝袜一区二区| 国产精品久久久久久久午夜| 中文字幕久热精品视频在线| 亚洲成人黄色在线| 久久成人这里只有精品| 日韩av最新在线观看| 欧美激情视频免费观看| 精品国产美女在线| 57pao成人国产永久免费| 91嫩草在线视频| 欧美日韩国产一区二区| 国产一区二区欧美日韩| 久久香蕉国产线看观看网| 亚洲伊人第一页| 亚洲女人天堂色在线7777| 国产精品 欧美在线| 久久人人97超碰精品888| 日韩在线小视频| 成人中文字幕+乱码+中文字幕| 亚洲aaaaaa| 日韩美女中文字幕| 欧美精品999| 欧亚精品中文字幕| 久久影院模特热| 精品国偷自产在线视频99| 欧美精品激情blacked18|