裝好Netbeans,發現中文顯示是亂碼,WinXP下也是這樣,只是Ubuntu下更嚴重,只知道進入英文界面的參數是-locale >EN<,卻不知道怎么使應用程序菜單里的程序帶參數啟動。
          試了n次后,才知道直接/usr/share/applications/net***.desktop的exec部分就行了
          不過原來的exec是"/opt/net***",參數得加在括號外
          ubuntu每次啟動時默認檢查所有分區,只要把/etc/fstab中的pass列改為0就可以跳過,另外defaults后面加上,ro就可以對win分區進行只讀訪問了

          posted @ 2007-04-22 20:25 ZelluX 閱讀(334) | 評論 (0)編輯 收藏

          2007-02-27 13:51:48
          把Core Java I Reflection那一節打印下來準備慢慢看支持泛型后的反射機制的用法,卻看到
          We are not dwelling on this issue because it would further complicate an already abstract concept. For most practical purposes, you can ignore the type parameter and work with the raw Class type.
          -,-
          好吧,既然都打印出來,還是看完了再說
          1. Class.getMethods()方法返回一個Method數組,包括了所有類自身及繼承下來的public方法
          類似的有getFields() getConstructors()
          要訪問私有成員,先調用setAccessible(true),這是繼承自AccessibleObject類的一個方法。
          2. java.lang.reflect.Array
          用于動態創建對象數組。
          示例代碼用于擴大一個任意類型的數組
          static Object goodArrayGrow(Object a) {
          Class cl = a.getClass();
          if (!cl.isArray()) return null;
          Class componentType = cl.getComponentType();
          int length = Array.getLength(a);
          int newLength = length * 11 / 10 + 10;
          Object newArray = Array.newInstance(componentType, newLength);
          System.arraycopy(a, 0, newArray, 0, length);
          return newArray;
          }
          int[] a = {1, 2, 3, 4};
          a = (int[]) goodArrayGrow(a);
          這樣也是正確的,因為返回值是Object,因此可以轉型為int[]
          3. NB的東東-方法指針
          正如Field類有get方法,Method類也有invoke方法。
          Object invoke(Object obj, Object... args)
          第一個參數必須有,如果是靜態方法,該參數為null。
          假設m1代表Employee類的getName方法,下面的代碼就調用了這個方法
          String n = (String) m1.invoke(harry); //harry is a Employee
          如果返回值是基本類型,Java通過autoboxing返回它們的wrapper類。
          要獲得Method類,可以從getdeclaredMethods方法的返回值中找到,也可以使用getMethod方法
          Mathod getMethod(String name, Class... parameterTypes)
          如要從Employee類中獲得raiseSalary(double)這個方法
          Method m2 = Employee.class.getMethod("raiseSalary", double.class);

          posted @ 2007-04-22 20:25 ZelluX 閱讀(297) | 評論 (0)編輯 收藏

          2007-02-26 21:56:01
          Thinking in Java 中尚未引入泛型概念
          RTTI - run-time type identification
          1. 每當編寫并且編譯了一個新類,就會產生一個Class對象(更恰當的說,是被保存在一個同名的.class文件中)
          2. Class類的一些方法(*表示會拋出異常):
          * static forName(String) 返回相應的Class類,注意字符串里要加上包名
          * newInstance() 返回對應于該Class類的類的實例,注意該類必須有一個缺省構造器。
          isInstance(Object) 返回該對象是否是Class類對應的類的實例(或子類)
          getSuperClass() 返回直接父類的Class類
          * getConstructors() 返回構造器,返回值是Constructor[]
          * getFields() 返回字段,返回值是Field[]
          * getMethods() 返回字段,返回值是Method[]
          3. 類字面常量 (Class literals)
          例如要獲得Gum類的Class類就使用Gum.class
          對于基本數據類型的wrapper類,還有一個標準字段TYPE,int.class和Integer.TYPE返回值一樣,建議使用.class以保持一致。
          4. Java希望我們始終使用多態機制,只在必需的時候使用RTTI。

          posted @ 2007-04-22 20:25 ZelluX 閱讀(182) | 評論 (0)編輯 收藏

          2007-02-26 21:53:39

          1. JDK 1.0版本中有一個stop方法用于強制中止線程,但是現在這個方法被廢止。因此沒有方法強制中止線程,但是interrupt方法可以要求某個線程的中止。

          2. 某個線程的interrupt方法被調用后,該線程被設為中斷狀態,這是一個boolean值,每個線程都應當定期檢查這個值,以知道自己是否被中斷。一個線程被interrupt并不意味著它必須結束,僅僅是發送了一個消息而已。

          3. Thread.currentThread().isInterrupted()方法返回一個boolean值,表示是否為中斷狀態。

          4. 當某個線程阻滯時(如在sleep wait方法調用后),無法檢查中斷狀態。如果此時interrupt方法被調用,當前的阻滯狀態就會被中止,并且產生InterruptedException。

          5. 一個run方法應當有這樣的形式:
          public void run() {
          try {
          //...
          while (!Thread.currentThread().isInterrupted() && more work to do) {
          //do more work
          }
          } catch (InterruptedException e) {
          //...
          }
          finally {
          //clean up, if required
          }
          }
          如果在線程每個工作段后都使用sleep方法,就不必檢查中斷狀態了,此時只要處理好InterruptedException就行了。

          6. 還有一個類似的靜態方法interrupted(),同樣返回一個boolean值,不同的是該方法同時把當前中斷狀態設為了false。

          7. 有一個很不好習慣:捕獲InterruptedException后沒有進行任何的處理。如果的確想不到什么事情做,至少可以加上Thread.currentThread().interrupted()改變中斷狀態,以便呼叫者知道這個情況;或者可以開頭聲明throws InterrupedException,并取消try塊,讓呼叫者處理這個問題。

          8. 線程的四個狀態:New, Runnable, Blocked, Dead
          New狀態:在new Thread(r)被調用后,start方法調用前。做一些初始化工作。
          Runaable狀態:start方法調用后。一個線程在運行并不意味著它在不停地運行,事實上,應當不時的中斷,以便其他線程有機會運行。具體細節由操作系統決定。preemptive系統給每個線程一段時間運行,之后暫停該線程,給另一個線程運行的機會。選擇另一個線程時,系統會考慮優先權。但是在cooperative系統中,只有在一個線程sleep或yield時才會交出控制權。
          Blocked:以下幾種情況會導致停滯:1)調用sleep方法 2)執行了某個在IO上阻塞的操作 3)試圖獲得正被其他線程控制的lock 4)waits for a conditionsee page 5)其他人調用了該線程的suspend方法,注意這個方法已被廢止。
          當一個線程從Blocked中恢復時(如sleep方法設定時間到,IO操作完成等),系統會根據優先級決定是否繼續運行這個線程。
          不能簡單地調用線程的resume方法使之從Blocked狀態中恢復。如果要取消因IO操作導致的block,可以讓另一個線程關閉對應的IO通道(channel),則原來那個線程恢復運行,并拋出ClosedChannelException。
          Death:run方法結束后線程就進入Death狀態。也可以通過調用線程的stop方法中止該線程運行,會拋出ThreadDeath錯誤。當然,不要在你自己的代碼里使用這個方法。
          線程的isAlive()方法返回該線程是否已被中止(也有可能尚未運行)。

          posted @ 2007-04-22 20:25 ZelluX 閱讀(249) | 評論 (0)編輯 收藏

          2007-02-26 21:52:36
          貌似這章比較有趣,先把前面的跳了。
          1. 最簡單的Beans就是一個Java類,只不過它遵循了一些嚴格的命名慣例。有些人強調一個bean必須有一個缺省構造器,但JavaBeans的說明中并沒有提到。然而,大多數的編程工具還是要求每個bean都有一個缺省構造器的。
          2. bean的屬性(property)并非就是實例域(instance field),屬性是接口的特性,而實例域則屬于類的實現部分。
          3. 將beans打包到JAR文件,在mainfest.mf文件中說明哪個是java bean
          Manifest-Version: 1.0
          Name: com/horstmann/corejava/ImageViewerBean.class
          Java-Bean: True
          注意中間的空行不能少。

          posted @ 2007-04-22 20:25 ZelluX 閱讀(230) | 評論 (0)編輯 收藏

          2007-02-25 14:38:21
          1. 安裝jdk
          安裝jdk的時候就遇到問題了,使用apt-get安裝太慢,就用迅雷從官方下載了個bin包,接下來怎么安裝就是問題了。
          google到了一篇安裝說明:
          1. 下載jdk-6-linux-i586.bin





          2. 下載http://linuxtoy.org/deb/java-package_0.28ubuntu1_all.deb





          使用sudo dpkg -i java-package_0.28ubuntu1_all.deb 安裝
          結果發現需要fakeroot,sudo apt-get install fakeroot 也報錯,根據提示用sudo apt-get -f install搞定。

          3. 使用 fakeroot make-jpkg jdk-6-linux-i586.bin 來制作 deb 包,生成的文件名為 sun-j2sdk1.6_1.6.0_i386.deb。

          4. 安裝 JDK 6,執行指令 sudo dpkg -i sun-j2sdk1.6_1.6.0_i386.deb 即可。

          搞定,google真是好東西


          2. 安裝LumaQQ zz from UbuntuChina

          安裝Luma QQ

          • 1.下載并安裝
          • 安裝QQ需要先安裝上一步的JAVA環境
          • wget -c http://download.ubuntu.org.cn/software/lumaqq_2005-linux_gtk2_x86_no_jre.tar.gz
            sudo tar zxvf lumaqq_2005-linux_gtk2_x86_no_jre.tar.gz -C /opt/
            wget -c http://download.ubuntu.org.cn/software/lumaqq_2005_patch_2006.02.02.15.00.zip
            sudo unzip -o lumaqq_2005_patch_2006.02.02.15.00.zip -d /opt/LumaQQ/lib
            sudo chown -R root:root /opt/LumaQQ/
            sudo chmod -R 755 /opt/LumaQQ/
            sudo gedit /usr/share/applications/LumaQQ.desktop
            2.在新增的文件內加入下面這幾行
          • [Desktop Entry]
            Name=LumaQQ
            Comment=QQ Client
            Exec=/opt/LumaQQ/lumaqq
            Icon=/opt/LumaQQ/QQ.png
            Terminal=false
            Type=Application
            Categories=Application;Network;

            3.保存編輯過的文件安裝完成后的快捷方式在(應用程序 -< Internat -< LumaQQ)。


          3. 安裝Eclipse
          http://forum.ubuntu.org.cn/viewtopic.php?t=1251

          4. 安裝GVIm
          http://forum.ubuntu.org.cn/viewtopic.php?t=2486&highlight=gvim

          5. QTerm
          裝好后不能輸入中文,得安裝qtimm
          apt-get install scim-qtimm

          posted @ 2007-04-22 20:25 ZelluX 閱讀(468) | 評論 (0)編輯 收藏

          2007-02-25 14:09:11

          1. 多任務實現方法根據操作系統是否隨時地能中止程序的運行,可以分為兩類。可以隨時中止的稱為preemptive multitasking,如UNIX/Linux,OS X,Windows NT/XP,以及Windows 9x下的32位程序。不能的則被稱為cooperative multitasking,如Windows 3.x和Mac OS 9,已經一些手機上的系統。后者有一個嚴重的缺陷,當運行的程序不交出控制權的時候,整個系統就掛起了。
          多線程則更深入了一步,單獨的程序同時執行多個任務。
          兩者的差異在于,每個進程擁有屬于自己的完整的變量群,而線程則享有相同的數據。

          2. 運行線程的簡單步驟

          1) 繼承Runnable接口
          public interface Runnable
          {
          void run();
          }
          class MyRunnable implements Runnable
          {
          public void run()
          {
          task code
          }
          }
          2. 創建該類的實例
          Runnable r = new MyRunnable();
          3. 通過這個實例創建一個線程
          Thread t = new Thread(r);
          4. 運行該線程
          t.start();

          另外,也可以通過繼承Thread類并覆蓋run()方法實現,但并不提倡,因為太多單獨的線程很耗資源。

          3. 不要直接調用run()方法

          posted @ 2007-04-22 20:25 ZelluX 閱讀(224) | 評論 (0)編輯 收藏

          2007-02-24 23:40:06

          寫了個Core Java源程序中的行號去掉的程序。

          Java中使用正則表達式,一般過程是

          Pattern pattern = Pattern.compile("\\d+\\. (\\s*.*)", Pattern.CASE_INSENSITIVE);

          Matcher matcher = pattern.matcher(string);

          while (matcher.find()) {}

          但這樣并沒有用到分組,小括號里的內容并不會單獨列出。

          如果要去掉行號,只想要小括號里的部分,使用group方法

          System.out.println(matcher.group(1));

          group(0)group()效果一樣,返回整行內容

          group(x)則是返回和第x組小括號匹配的內容(x<=1

          posted @ 2007-04-22 20:25 ZelluX 閱讀(221) | 評論 (0)編輯 收藏

          2007-02-24 20:38:00

          1. 二進制IO操作
          主要通過InputStream和OutputStream類及其子類進行。方法和文本操作類似。
          FileInputStream和FileOutputStream用于操作文件。
          BufferedInputStream和BufferOutputStream和文本操作類似,只是默認的緩沖區大小為512字節。
          DataInputStream和DataOutputStream用于包裝InputStream和OutputStream,直接進行字符、實數、整數、布爾值等的讀寫。
          DataOutputStream中writeChar方法寫入Unicode編碼,如果要寫入ASCII嗎,使用writeByte。

          2. UTF編碼
          UTF編碼存儲字符使用的字節數不固定,小于0x7F的ASCII碼用一個字節表示,小于0x7FF的Unicode編碼用兩個字節表示,其余的Unicode編碼用三個字節表示。
          UTF編碼的開頭幾位表示該字符使用的字節數。如果第一位是0,則是單字節字符;如果前三位是110,則是雙字節字符;如果前四位是1110,則是三字節字符。
          字符串的長度則保存在UTF串的頭兩個字節。
          DataInputStream和DataOutputStream分別有readUTF()和writeUTF()方法操作UTF編碼。

          3. 當一個Unicode碼無法被轉換為ASCII碼時,產生的是”?”字符。

          4. 對象IO操作
          ObjectInputStream類和ObjectOutputStream類,使用readObject/writeObject方法進行讀寫。注意需要轉型。

          5. Serializeable接口
          可寫入對象流的對象稱為可串化的,可串化對象都繼承了java.io.Serializable接口,這是一個記號接口。
          當一個對象被儲存時,對象的類名、類的簽名、實例變量的值都被儲存,但是靜態變量不會被儲存。
          如果對象中含有不能被串化的實例數據域,必須將該數據域聲明為transient才能使得自身可串化。
          一個對象第一次被儲存時,對象的完整內容及序列號都會被保存,之后再存儲該對象,僅僅寫入序列號。

          6. 隨機文件訪問
          RandomAccessFile類同時繼承了DataInput和DataOutput接口。
          構造器中可以帶mode參數,”rw”表示可讀寫,”r”表示只讀。
          讀寫操作都在一個稱為文件指針指示的位置進行。
          length()方法返回文件的長度。
          sekk()方法在文件中跳躍。

          posted @ 2007-04-22 20:25 ZelluX 閱讀(316) | 評論 (0)編輯 收藏

          2007-02-23 19:38:46

          1. Throwable的方法

          String getMessage()

          String getLocalizedMessage()
          String toString()
          void printStackTrace()
          每個方法都比前一個提供更多的信息

          2. 重新拋出異常

          catch (Exception e) {

          System.err.println(“An exception was thrown”);

          throw e;

          }

          重拋異常會把異常拋給上一級環境中的異常處理程序,同一個try快的后續catch字句將被忽略。

          由于只是把當前異常對象重新拋出,printStackTrace()方法顯示的將是原來的異常拋出點的調用棧信息,而非重新拋出點的信息。要想更新這個信息,把throw e;改成

          throw e.fillInStackTrace();

          3. 異常鏈

          有時候你需要處理一個異常并拋出另一個,但仍要保持原異常的信息,這被成為異常鏈。

          Throwable的三個基礎子類Error, Exception, RuntimeException都有一個接收cause參數的構造器。如果想建立這三個子類以外的異常鏈,就得使用initCause()方法。

          4. 標準Java異常

          Throwable有兩個直接子類:Error類代表了系統運行期錯誤,通常情況不用捕獲;Exception類則是Java類庫、用戶的方法。通常要處理的是Exception

          當然,異常類中最重要的還是類名。

          異常并非都在java.lang中,有些還在util, net, io等庫中。

          5. RuntimeException

          RuntimeException通常由Java自動拋出,如

          if (reference == null) throw new NullPointerException();

          是多余的。

          如果一個RuntimeException被拋出后一直到main方法也未被處理,printTraceStack()方法被自動調用。

          6. finally

          沒有垃圾收集器或析構函數自動調用的語言中,finally的重要性在于釋放內存。而Javafinally則多用在使對象恢復到原來的狀態,如打開的文件、網絡連接,在屏幕上的繪圖等。

          7. 異常丟失

          try {

          lm.f();

          } finally {

          lm.dispose();

          }

          如果lm.f()lm.dispose()都會拋出錯誤的話,f()中拋出的錯誤會被徹底丟失。C++中就不存在這個問題。

          所以對于會拋出錯誤的方法,最好將他們放入每一個try-catch塊中。

          posted @ 2007-04-22 20:25 ZelluX 閱讀(250) | 評論 (0)編輯 收藏

          僅列出標題
          共39頁: First 上一頁 29 30 31 32 33 34 35 36 37 下一頁 Last 
          posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          2007-02-27 20:21:42
          主站蜘蛛池模板: 邵东县| 义马市| 汽车| 阳城县| 邯郸市| 井研县| 榆中县| 吴桥县| 丹阳市| 遂川县| 沁阳市| 五莲县| 新余市| 固镇县| 扎赉特旗| 大荔县| 宜黄县| 金秀| 红河县| 乌兰浩特市| 陕西省| 将乐县| 新营市| 旺苍县| 交城县| 库尔勒市| 广河县| 五大连池市| 新干县| 菏泽市| 庆阳市| 泾源县| 屏东县| 丰原市| 安平县| 剑河县| 高雄市| 康马县| 达拉特旗| 凤山市| 关岭|