看過了一本Java入門的教材后再來看Thinking in Java感覺真好
          初始化與清理
          1. 涉及進本類型的重載
          如果某個方法f1有參數為char, byte, short, int, long, float, double的重載方法(注意類型是從小到大排列的),調用時自左往右套用。如f1(5)調用了f1(int),f1((long)5)調用了f1(long)
          2. 一個對象,如果沒有寫任何構造方法,編譯器會自動創建一個無參構造器。但是如果已經定義了一個構造器(無論是否含參),編譯器不會自動創建缺省的無參構造器。
          3. Banana a = new Banana();
          a.f(1);
          編譯器執行a.f(1)時其實相當于執行了Banana.f(a,1);
          把a的引用傳遞給了f,當然并不能這樣書寫代碼,在f中要訪問a就使用this關鍵字。
          4. 同一個類中,方法f2調用方法f2時可以寫this.f2(),但為了更直觀和易讀,通常寫成f2()
          5. static關鍵字,有人認為它具有全局函數的語義,并不是“面向對象”的。如果代碼中出現了大量的static方法,就的確該重新考慮自己的設計了。
          6. finalize()并不是析構函數。
          三點重要概念:
          1)對象可能不被垃圾回收。
          2)垃圾回收并不等于“析構”
          3)垃圾回收只與內存有關。
          無論對象是如何創建的,垃圾回收器都會負責釋放對象占據的所有內存。因此之所以要有finalize(),是由于在分配內存時可能采用了類此C語言中的做法,即native方法。
          由此可見,垃圾回收器并不能完全代替析構函數,而且絕對不能直接調用finalize()。
          finalize()的另一價值在于發現清理對象時一些隱晦的錯誤。如
          class Book {
          boolean checkedOut = false;
          Book(boolean checkOut) {
          checkedOut = checkOut;
          }
          void checkIn() {
          checkedOut = false;
          }
          public void finalize() {
          if (checkedOut)
          System.out.println("Error: checked out");
          }
          }
          在Book對象終結時檢查是否已被簽入,如果發生未被簽入的錯誤,則在回收時報錯。
          System.gc()用于強制進行終結動作,在寫程序時可以加速調試過程。
          7. 垃圾回收器的工作方式
          1)引用計數
          2)自適應

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

          2007-02-13 22:20:55

          Java provides programmers with capability to elegantly handle runtime errors.

          1. Throwable has two subclasses: Exception and Error.

          RuntimeException, Error and their subclasses are known as unchecked exceptions. All other exceptions are known as checked exceptions, meansing that the compiler forces the programmer to check and deal with them.

          2. Handling Expections
          (1) Declearing Exceptions
          use throws keyword
          public void myMethod() throws Exception1, Exception2, ...
          (2) Throwing Exceptions
          IllegaArgumentException ex = new IllegaArgumentException("Wrong Argument");
          or
          throw new IllegaArgumentException("Wrong Argument");
          (3) Catching Exceptions
          try {
          statements;
          }
          catch (Exception1 exVar1) {
          handler1;
          }
          catch (Exception2 exVar2) {
          handler2;
          }
          ...
          Note that Exceptioni can't be subclass of Exceptionj (i
          When handling exceptions, java.lang.Throwable.getMessage()/toString()/printStackTrace() are useful.
          3. Rethrowing
          try
          {
          access the database
          }
          catch (SQLException e)
          {
          throw new ServletException("database error: " + e.getMessage());
          }
          4. the finally clause
          Graphics g = image.getGraphics();
          try
          {
          // 1
          code that might throw exceptions
          // 2
          }
          catch (IOException e)
          {
          // 3
          show error dialog
          // 4
          }
          finally
          {
          // 5
          g.dispose();
          }
          the code in the finally block is executed under all circumstances, regardless of whether an exception occures in the try block is caught.
          5. Don't use a try-catch block to deal with simple, expected situations.
          6. creating custon exception classes
          7. Assertions
          Assertions can be used to ensure program correctness and avoid logic errors.
          assert assertion [: detailMessage];
          detailMessage can a primitive-type or an Object value.
          When an assertion statement is executed, Java evaluates the assertion. If it is false, an AssertionError will be thrown
          By default, assertions are disabled at runtime. To enable them, use
          java -ea AssertionDemo
          Assertions can be selectively enabled or disabled at the class level or the package level.
          java -ea:package1 -da:Class1 AssertionDemo
          8. Don't use assertions for argument checking in public methods.Instead, exception handling is needed.
          Use assertions to reaffirm assumption to increase your confidence in the programme's correctness.
          if (number < 1) {
          ...
          }
          else if (number = 1) {
          ...
          }
          else assert false : number;
          switch (month) {
          case 1: ...; break;
          case 2: ...; break;
          ...
          case 12: ...; break;
          default: assert false : "Invalid monthL " + month
          }

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

          2007-02-12 21:11:22
          1. 打包
          jar -cf FileName.jar class1.class class2.class ....
          -c選項意味著創建一個新的包,-f選項說明確定了包的名字。
          Manifest文件
          Manifest-Version: 1.0
          Created-By: 1.4.0_02 (Sun Microsystems Inc.)
          Main-Class: SimpleExample
          2. 運行包
          往Manifest種增加一個Main-Class信息
          具體方法:
          新建temp.mf,內容:
          Main-Class: SimpleExample
          Sealed: true
          然后運行
          jar -uvmf temp.mf SimpleExample.jar
          -u: updating -v: 顯示信息 -m: 增加到manifest文件
          運行包:java -jar SimpleExample
          3. 在html中運行包
          >applet
          code = "xxx.class"
          archive = "xxx.jar"
          ...
          <
          >/applet<
          4. 界面更換
          java.lang.Object
          extended by javax.swing.UIManager
          UIManager.setLookAndFeel(LookAndFeel);

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

          2007-02-11 22:13:33
          1. html向applet傳遞參數:
          >param name = STRINGNAME value = "String"<
          >param name = NUMNAME value = number<
          2. 使applet作為application運行
          增加main方法,注意isStandalone的設置
          3. 顯示圖片
          Class metaObject = this.getClass();
          java.net.URL url = metaObject.getResource("ca.gif");
          ImageIcon imageIcon = new ImageIcon(url);
          Image image = imageIcon.getImage();
          4. 播放聲音
          AudioClip audioClip = Applet.newAudioClip(url);

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

          2007-02-10 22:59:59
          1. 一個很不錯的vim中文文檔網站
          http://vcd.gro.clinux.org/
          看了下里面的vim用戶手冊,翻譯得很不錯,以后不用再啃英文文檔了 ^_^
          2. 設置tab的格數
          setlocal softtabstop=4
          set shiftwidth=4
          3. [zz]Java Complete
          install details
          1. Place javacomplete.vim in the autoload directory, e.g. $VIM/vimfiles/autoload
          2. Place classes of Reflection into classpath.
          set CLASSPATH=path_of_Reflection.class;%CLASSPATH%
          or in linux/unix
          export CLASSPATH=path_of_Reflection.class:$CLASSPATH
          You can also recompile Reflection.java by yourself. Use jdk1.2 (and above)
          3. Set 'omnifunc' option if necessary. e.g.
          :set omnifunc=javacomplete#Complete
          You can do it in a script like ftplugin/java_fc.vim.
          Or, use autocmd:
          " Only do this part when compiled with support for autocommands.
          if has("autocmd")
          autocmd Filetype java setlocal omnifunc=javacomplete#Complete
          endif
          4. Add more jars or class directories to classpath, if you like. e.g.
          let g:java_classpath = '.;C:\java\lib\servlet.jar;C:\java\classes;C:\webapp\WEB-INF\lib\foo.jar;C:\webapp\WEB-INF\classes'
          or in unix/linux
          let g:java_classpath = '.:~/java/lib/servlet.jar:~/java/classes:~/java/webapp/WEB-INF/lib/foo.jar:~/java/webapp/WEB-INF/classes'
          Besides g:java_classpath, you can set local b:classpath and it is preferred.

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

          2007-02-10 22:16:45
          1. Applet 類
          java.lang.Object
          extended by java.awt.Component
          extended by java.awt.Container
          extended by java.awt.Panel
          extended by java.applet.Applet
          applets可以在網頁上運行,applet的大致結構為
          public MyApplet extends java.applet.Applet {
          public MyApplet() {
          }
          public void init() {
          }
          public void start() {
          }
          public void stop() {
          }
          public void destroy() {
          }
          }
          applet被載入后,瀏覽器通過無參構造函數創建了一個applet實例
          init方法:applet創建后執行,通常包括創建新的線程,載入圖像,創建用戶界面的控件,獲得HTML中的參數.
          start方法:init方法后執行,或者包含該applet的頁面被再次瀏覽的時候。
          stop方法:用戶離開當前頁面時執行,此時已經啟動的線程仍會繼續運行,因此有可能需要在stop方法中止這些線程。
          destroy方法:瀏覽器正常退出時執行,之前會調用stop方法。

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

          2007-02-10 14:39:54
          1. vim中獲得不含路徑和后綴的文件名: %:t:r
          具體查詢 :help expand
          這樣做個key map編譯執行就方便多了,不過還不知道怎么在編譯時把工作目錄設為文件所在目錄,因此現在的key map是
          nmap >F2< :w>CR<:comp javac>CR<:!javac -d . "%:p">CR<
          nmap >F3< :!java "%:t:r">CR<
          >F2<編譯 >F3<執行,.class文件都放在vim的起始目錄下。
          2. JCheckBox 類
          java.lang.Object
          extended by java.awt.Component
          extended by java.awt.Container
          extended by javax.swing.JComponent
          extended by javax.swing.AbstractButton
          extended by javax.swing.JToggleButton
          extended by javax.swing.JCheckBox
          復選框
          boolean isSelected()方法返回是否被選擇,該方法應該是從祖先類javax.swing.AbstractButton繼承下來的吧。
          相應的事件:
          書中范例代碼有一個技巧,簡單明了:
          fontStyle += (jchkBold.isSelected() ? Font.BOLD : 0);
          相應的事件類ItemEvent,監聽接口ItemListener,
          事件發生后的方法itemStateChanged(ItemEvent e)
          3. JRadioButton 類
          java.lang.Object
          extended by java.awt.Component
          extended by java.awt.Container
          extended by javax.swing.JComponent
          extended by javax.swing.AbstractButton
          extended by javax.swing.JToggleButton
          extended by javax.swing.JRadioButton
          單選框,大部分和JCheckBox差不多,多了一個分組
          ButtonGroup group = new ButtonGroup();
          group.add(jrb1);
          group.add(jrb2);
          這樣jrb1和jrb2就屬于同一組,選擇互斥。
          注意這里的ButtonGroup不是java.awt.Component的子類,因此不能被加入容器中。
          4. JLabel 類
          java.lang.Object
          extended by java.awt.Component
          extended by java.awt.Container
          extended by javax.swing.JComponent
          extended by javax.swing.JLabel
          標簽,可以包含圖片和文字
          5. JTextField 類
          java.lang.Object
          extended by java.awt.Component
          extended by java.awt.Container
          extended by javax.swing.JComponent
          extended by javax.swing.text.JTextComponent
          extended by javax.swing.JTextField
          文本框
          (get/set)Text/Columns
          (is/set)Editable
          書中范例提到java.awt.Window.pack()自動縮放到適合大小,以及java.awt.Component.requestFocusInWindow()獲得焦點
          6. JTextAreas 類
          java.lang.Object
          extended by java.awt.Component
          extended by java.awt.Container
          extended by javax.swing.JComponent
          extended by javax.swing.text.JTextComponent
          extended by javax.swing.JTextArea
          備注框(類似于Delphi/VB中的memo)
          方法比較多
          append(String), insert(String, int), replaceRange(String, int, int)
          (get/set)Columns, Rows, TabSize, LineWrap, WarpStyleWord。
          其中后面兩個是控制是否在行/單詞處自動斷開
          7. JComboBox 類
          java.lang.Object
          extended by java.awt.Component
          extended by java.awt.Container
          extended by javax.swing.JComponent
          extended by javax.swing.JComboBox
          列表框
          改變選項時,JComboBox會產生兩次ItemEvent
          8. JList, JScrollBar, JSlider 類
          記住名字,以后用的時候再查documentation咯
          不過注意JScroolBar和JSlider的水平軸數值是左到右遞增,豎直軸自上往下遞減,不過可以通過setInverted(true)倒置

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

          2007-02-09 20:32:44
          Chapter 13 Creating User Interfaces
          1. JComponent 類
          可以為JComponent類增加邊框:setBorder(Border)
          如messagePanel.setBorder(new TitleBorder("Display Message"));
          java.awt.Component的accessor和mutator:
          (set/get)Font,Background,Foreground,PreferredSize
          (is/set)visible
          java.awt.Container:
          add(Component)
          add(Component, int index)
          remove(Component)
          (set/get)Layout
          paintComponent
          javax.swing.JComponent:
          (set/get)ToolTipTest,Border
          注:盡管JComponent是Container的子類,但一般不把按鈕等控間當作容器處理。
          2. 控間命名慣例:
          jbt jchk jrb jlbl jtf jta jcbo jlst jscb jsld
          JButton JCheckBox JRadioButton JLabel JTestField JTextArea JComboBox JList JScrollBar JSlider
          3. javax.swing.AbstractButton 類
          (set/get) ActionCommand, Text, Icon, PressedIcon, RolloverIcon, Mnemonic, HorizontalAlignment, HorizontalTextPosition, VerticalAlighment, VerticalTestPosition, IconTestGap
          (set/is) BorderPainted, Selected
          JButton 類
          JButton()
          JButton(Icon)
          JButton(String)
          JButton(String, Icon)

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

          2007-02-08 16:47:38
          Chapter 12 Event-Driven Programming
          1. source object: 事件產生源
          比如一個按鈕就是單擊按鈕這個動作的產生源,每個事件都是事件類的一個實例,事件類的根類為java.util.EventObject
          EventObject.getSource()返回產生源
          如果某個控間能夠產生某事件,那么它的任何子類都能夠生成該事件。
          除了javax.swing.event.ListSelectionEvent,其余事件類都包含在java.awt.event包中
          2. Java 的事件處理機制稱為 delegation-based model,用戶作用于某個source object上,另一個對象捕捉到這個事件。后者稱為listener,成為listener的兩個必要條件:
          listener類必須實現event-listener的接口,Java為每個GUI事件提供了listener,如
          ActionEvent - ActionListener listener接口都包含了稱為處理機(handler)的方法處理事件。
          listener類必須由source object注冊,注冊方法由具體的事件類型決定。如ActionEvent - addActionListener
          例如,要監聽JButton類的單擊事件
          ListenerClass listener = new ListenerClass();
          JButton jbt = new JButton("OK");
          jbt.addActionListener(listener);
          如果某個listener被注冊了兩次,則相應的處理也會進行兩次。
          3. EventObject 類
          getSource()方法獲得產生源
          java.awt.event.ActionEvent 類
          String getActionCommand()方法獲得有關該動作的命令串,如對于按鈕,返回按鈕的文字
          int getModifier()方法獲得在該動作進行時modifier keys(應該是alt ctrl shift吧)的情況
          long getWhen()方法返回該動作進行的時間,自1970.1.1 00:00:00開始計時的毫秒數

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

          2007-02-07 23:59:59

          打字速度遇到瓶頸了……一直是幾年前的速度,好吧,校正指法。。。

          1. FontMetrics 類
          獲得字體的具體屬性
          public int getAscent() 字的中心部分高度(如 B 的全部)
          public int getDescent() 字的底部高度(如 y 的尾巴)
          public int getLeading() 字的頭部高度,讀作ledding
          public int getHeight() 三部分高度和
          public int stringWidth(String str) string的總長度

          2. 不要調用paintComponent方法,也不要重載repaint方法。

          3. repaint() 方法向顯示區發現一個請求并立即返回,因此它的效果不是同步實現的,如果幾個請求同時存在,有可能只有最有一個paintComponent才會被完成。

          4. 同一目錄下的文件默認為同一個package內的檔案,并且只有在編譯為.class后才能互相訪問。

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

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

          日歷

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          相冊

          搜索

          •  

          積分與排名

          • 積分 - 337579
          • 排名 - 167

          最新評論

          51La
          主站蜘蛛池模板: 农安县| 麟游县| 长武县| 安平县| 乌审旗| 巴南区| 资中县| 无锡市| 长葛市| 民勤县| 双城市| 美姑县| 赤城县| 永吉县| 峡江县| 济阳县| 桓台县| 衢州市| 民权县| 武陟县| 怀集县| 怀化市| 如皋市| 成安县| 教育| 乌苏市| 邢台市| 定陶县| 锡林浩特市| 莆田市| 保定市| 襄樊市| 平山县| 武宁县| 临夏市| 大名县| 阿城市| 金乡县| 饶平县| 白银市| 普兰店市|