解決:The declared package..does not match the expected package..2010-11-10 14:49
包名必須在程式中通過package語句來指定(例如 package org.it),而不是單純的靠目錄結構來指定,是先有了包名之後,才需要相應的目錄結構。這是實際上的類名為org.it315.classname。必須把包聲明放在源檔案最前面,並且每個源檔案最多隻能聲明一個包(最好要聲明包,養成良好的編碼風格和習慣)。 如以下檔案: TestPackage.java package org.it; public class TestPackage { public static void main(String[] args) { System.out.println("Test use package"); } } 假設其位於目錄是:E:/eclipse/webEclipse/testproject/src/org/it 在dos下直接進行: 編譯: E:/eclipse/webEclipse/testproject/src/org/it>javac TestPackage產生TestPackage.class文件位於E:/eclipse/webEclipse/testproject/src/org/it/目錄下。 運行: E:/eclipse/webEclipse/testproject/src>java org.it.TestPackage得到正確輸出結果。 一定要注意此處路徑問題。另外,package的名字和結構必須和相關的目錄名一致,包括大小寫也要一致。但是在Eclipse中,由於一般是先建立包,eclipse建立package的時候自動幫你建立了目錄了,所以不會不一致。Eclipse會在對應testproject/bin目錄下產生org/it/目錄,並且在org/it/目錄下產生TestPackage.class檔案,但是實際上此class的名稱為org.it.TestPackage.class。當然,在Eclipse中可以直接運行,但是在dos命令下,一定要注意實質上的編譯和運行實際路徑和類名等問題。 |
解決:
Access restriction : The type BASE64Decoder is not accessible due to restriction在MyEclipse中編寫Java代碼時,用到了BASE64Decoder,import sun.misc.BASE64Decoder;可是Eclipse提示:
Access restriction : The type BASE64Decoder is not accessible due to restriction on required library C:\Program
files\java\jre6\lib\rt.jar
Access restriction : The constructor BASE64Decoder() is not accessible due to restriction on required library C:\Program files\java\jre6\lib\rt.jar
解決方案1(推薦):
只需要在project build path中先移除JRE System Library,再添加庫JRE System Library,重新編譯後就一切正常了。
解決方案2:
Windows -> Preferences -> Java -> Compiler -> Errors/Warnings ->
Deprecated and trstricted API -> Forbidden reference (access rules): -> change to warning 解決:volatile在java裡的作用和用法
Volatile修飾的成員變數在每次被線程訪問時,都強迫從共用記憶體中重讀該成員變數的值。而且,當成員變數發生變化時,強迫線程將變化值回寫到共用記憶體。這樣在任何時刻,兩個不同的線程總是看到某個成員變數的同一個值。Java語言規範中指出:為了獲得最佳速度,允許線程儲存共用成員變數的私人拷貝,而且只當線程進入或者離開同步代碼塊時才與共用成員變數的原始值對比。這樣當多個線程同時與某個對象互動時,就必須要注意到要讓線程及時的得到共用成員變數的變化。而volatile關鍵字就是提示VM:對於這個成員變數不能儲存它的私人拷貝,而應直接與共用成員變數互動。使用建議:在兩個或者更多的線程訪問的成員變數上使用volatile。當要訪問的變數已在synchronized代碼塊中,或者為常量時,不必使用。由於使用volatile屏蔽掉了VM中必要的代碼最佳化,所以在效率上比較低,因此一定在必要時才使用此關鍵字。 就跟C中的一樣 禁止編譯器進行最佳化~~~~