寫程序時(shí)沒(méi)音樂(lè)聽……痛苦,找了個(gè)Realplayer for Linux,發(fā)現(xiàn)不支持播放列表。。。

          1. Vim 設(shè)置自動(dòng)縮進(jìn)
          :set ai! 自動(dòng)縮進(jìn),回車換行后自動(dòng)與上一行首對(duì)齊
          :set cin! C縮進(jìn),如果前面一行最后是{ if等內(nèi)容,回車換行后自動(dòng)縮進(jìn);如果是}等,自動(dòng)折回
          :set et! 擴(kuò)展tab,開啟后一個(gè)tab只要按一次delele/back space就能刪除了

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

          2007-02-06 22:25:27
          發(fā)信人: cyb (想去歐洲), 信區(qū): LinuxApp
          標(biāo) 題: Linux下推薦應(yīng)用程序列表【2007-02-06】
          發(fā)信站: BBS 水木清華站 (Thu Aug 12 11:28:41 2004), 站內(nèi)

          * 特殊軟件:
          windows下訪問(wèn)ext2fs, ext3fs: http://www.ext2fs-anywhere.com/
          http://fs-driver.org/
          修復(fù)分區(qū)表:Disk Genius(原名DiskMan)

          * 批量更改文件名:rename (可能位于rename這個(gè)軟件包)
          * 監(jiān)視文件或目錄變更:fam (http://oss.sgi.com/projects/fam/)
          gamin (http://www.gnome.org/~veillard/gamin/index.html)

          * 媒體播放:
          1)divx影片:mplayer
          2)rm影片:realplayer10 for linux, mplayer
          3)mp3: amarok, Audacious, beep media player, Rhythmbox,MPD
          4)ape: xmms+monkey's audio plugin(http://supermmx.org/linux/mac/)
          http://www.sourceforge.net/projects/mac-port/
          5)其他格式(wma, wmv, mkv, quicktime): mplayer

          * 各種格式的文檔和文件
          1)打開微軟的office文檔: openoffice, starsuite
          wvware(http://wvware.sourceforge.net/)
          2)查看pdf文件:xpdf, acroread for linux, ggv
          3)查看ps文件: gsview, ggv, kghostview
          4)chm文件: archmage,chmsee, Xchm,chmviewer, chm reader
          5)mht文件: ripmime,firefox+MAF插件
          6)圖表繪制: dia
          7).bin虛擬光盤: 用bin2iso或bchunk轉(zhuǎn)成iso后mount
          8)壓縮文件
          .rar: rar for linux或unrar
          .zip: unzip
          .bz2: bunzip2
          .tar/.tgz: tar
          .jar/.xpi: ark

          * 中文輸入法: scim, fcitx
          * BBS軟件:qterm, pcmanx-gtk2, {rxvt,xterm,gnome-terminal,...}+BBSbot

          * 即時(shí)通訊:
          1) QQ: lumaqq, Gaim+openq plugin, eva
          2) MSN,icq,yahoo: Gaim

          * web瀏覽器:mozilla-firefox, mozilla, opera
          * ftp客戶端(圖形界面) :gftp, Iglooftp-1.23
          * ftp客戶端(終端) : lftp, ncftp
          * ftp服務(wù)器: pureftpd, proftpd, vsftpd
          * http下載(終端): wget, curl, prozilla
          * bt下載: bittorrent(終端), azureus(圖形界面)
          * email軟件(圖形界面):thunderbird, sylpheed, evolution, opera M2
          * email終端: mutt, pine, gnus
          * RSS:liferea
          * SMTP client: msmtp, esmtp

          * 編輯器
          1) 文本: vim, emacs, jedit
          2) 16進(jìn)制: hexedit, ghex, mc

          * 圖片瀏覽: gImageView, gqview, zgv(console), fbida(console)
          * 圖片處理: gimp, ImageMagick
          * 屏幕抓圖:
          抓成圖片:ksnapshot, ImageMagick 的 import, gimp, xwd, scrot
          http://addons.mozine.org/firefox/209/ (抓網(wǎng)頁(yè))
          抓成視頻:vnc2swf, vncrec, xvidcap
          * 錄音、音頻處理: audacity, mhwaveedit, glame
          * 視頻處理:Cinelerra
          * 刻錄:k3b, brasero, cdrecord

          * 英漢字典: stardict(屏幕取詞,詞庫(kù)大,英漢,漢英, 英英)
          ibmdict(包含科技詞典,詞庫(kù)大,英漢,漢英)
          dictd:英漢 漢英 可以使用stardict的全部詞庫(kù).
          cdict:英漢 漢英 使用安裝方便,彩色顯示.

          * 科學(xué)計(jì)算: matlab, octave
          * 科學(xué)作圖: gnuplot, metapost,Asymptote

          * 虛擬機(jī)
          1) win下虛擬linux: cygwin, 老版virtual-pc, colinux
          2) linux下虛擬win: win4lin
          3) 跨平臺(tái): vmware, bochs, qemu, virtualbox
          4) linux下運(yùn)行windows程序: wine, easywine, winex, crossover office

          [原文作者luochong,cyb修改補(bǔ)充]
          --
          ※ 修改:·Dieken 于 Feb 6 09:05:07 修改本文·[FROM: 221.122.47.*]

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

          2007-02-06 20:41:48
          1.文件權(quán)限
          字母表示法:
          -rwx------ 共十位
          No.1 - 普通文件 d 目錄文件 b 塊特別文件 c 字符特別文件
          No.2,3,4 用戶本身的權(quán)限(用u代表) read write execute
          No.5,6,7 組用戶權(quán)限(g)
          No.8,9,10 其他用戶權(quán)限(o)
          設(shè)置權(quán)限時(shí),使用
          chmod (u/g/o) (+/-/=) (rwx) 文件名
          如刪除file1的可執(zhí)行權(quán)限
          chmod u-x file1
          數(shù)字表示法:
          r=4 w=2 x=1
          用一個(gè)三位數(shù)的各個(gè)數(shù)字分別表示ugo,不變則為0
          如指定用戶本人對(duì)file1的權(quán)限是可讀可寫不可執(zhí)行
          chmod 600 file1

          2. QQ安裝
          參考幫助:http://ossw.bokee.com/3549767.html
          (1)一般都使用LumaQQ
          http://lumaqq.linuxsir.org/main/?q=node/245
          下載帶JRE的LumaQQ
          (2)解壓
          tar zxvf lumaqq_2004t-linux_gtk2_x86_with_jre.tar.gz -C /opt/
          這一步在我的Fedora 6上需要root的權(quán)限,不過(guò)貌似原文中不需要。
          (3)安裝補(bǔ)丁
          unzip -o lumaqq_2004t_patch_2005.09.05.23.00.zip -d /opt/LumaQQ/lib
          (4)原文還說(shuō)安裝后需要改變LumaQQ的權(quán)限,但我裝的時(shí)候權(quán)限已經(jīng)是rx了,然后是快捷方式,貌似拖動(dòng)就可以了,GNOME還是很方便的。


          3. 目錄說(shuō)明
          posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          2007-02-07 14:59:56

          /bin

          存放著使用者最經(jīng)常使用的命令。例如cp、ls、cat,等等

          /boot

          這里存放的是啟動(dòng)Linux時(shí)使用的一些核心文件
          /dev dev是device(設(shè)備)的縮寫。這個(gè)目錄下是所有Linux的外部設(shè)備,其功能類似DOS下的.sys和Win下的.vxd。在Linux中設(shè)備和文件是用同種方法訪問(wèn)的。例如:/dev/hda代表第一個(gè)物理IDE硬盤。
          /etc 這個(gè)目錄用來(lái)存放系統(tǒng)管理所需要的配置文件和子目錄
          /home 用戶的主目錄,比如說(shuō)有個(gè)用戶叫wang,那他的主目錄就是/home/wang也可以用~wang表示。
          /lib 這個(gè)目錄里存放著系統(tǒng)最基本的動(dòng)態(tài)鏈接共享庫(kù),其作用類似于Windows里的.dll文件。幾乎所有的應(yīng)用程序都須要用到這些共享庫(kù)。
          /lost+found 這個(gè)目錄平時(shí)是空的,當(dāng)系統(tǒng)不正常關(guān)機(jī)后,這里就成了一些無(wú)家可歸的文件的避難所。對(duì)了,有點(diǎn)類似于DOS下的.chk文件。
          /mnt 這個(gè)目錄是空的,系統(tǒng)提供這個(gè)目錄是讓用戶臨時(shí)掛載別的文件系統(tǒng)。
          /proc 這個(gè)目錄是一個(gè)虛擬的目錄,它是系統(tǒng)內(nèi)存的映射,我們可以通過(guò)直接訪問(wèn)這個(gè)目錄來(lái)獲取系統(tǒng)信息。也就是說(shuō),這個(gè)目錄的內(nèi)容不在硬盤上而是在內(nèi)存里。
          /root 系統(tǒng)管理員(也叫超級(jí)用戶)的主目錄。
          /sbin s就是Super User的意思,也就是說(shuō)這里存放的是系統(tǒng)管理員使用的管理程序。
          /tmp 這個(gè)目錄不用說(shuō),一定是用來(lái)存放一些臨時(shí)文件的地方了。
          /usr 這是最龐大的目錄,我們要用到的應(yīng)用程序和文件幾乎都存放在這個(gè)目錄下。
          /usr/X11R6 存放X-Window的目錄
          /usr/bin 存放著許多應(yīng)用程序
          /usr/sbin 給超級(jí)用戶使用的一些管理程序就放在這里
          /usr/doc 這是Linux文檔的大本營(yíng)
          /usr/include Linux下開發(fā)和編譯應(yīng)用程序需要的頭文件,在這里查找
          /usr/lib 存放一些常用的動(dòng)態(tài)鏈接共享庫(kù)和靜態(tài)檔案庫(kù)
          /usr/local 這是提供給一般用戶的/usr目錄,在這里安裝軟件最適合
          /usr/man man在Linux中是幫助的同義詞,這里就是幫助文檔的存放目錄
          /usr/src Linux開放的源代碼就存在這個(gè)目錄,愛(ài)好者們別放過(guò)哦!
          /var 這個(gè)目錄中存放著那些不斷在擴(kuò)充著的東西,為了保?usr的相對(duì)穩(wěn)定,那些經(jīng)常被修改的目錄可以放在這個(gè)目錄下,實(shí)際上許多系統(tǒng)管理員都是這樣干的。順帶說(shuō)一下系統(tǒng)的日志文件就在/var/log目錄中.


          misc 雜項(xiàng)文件,一般不用
          opt 默認(rèn)是空的,一般安裝第三方軟件,像比較大的ps或者數(shù)據(jù)庫(kù)軟件
          系統(tǒng)文件
          /etc/rc.local 系統(tǒng)初始化的腳本文件,是一個(gè)本地管理文件
          /etc/resolv.conf dns配置文件

          4. 訪問(wèn)NTFS/FAT32文件系統(tǒng)
          mount -t msdos /dev/hda1 /mnt
          mount -t ntfs /dev/hda1 /mnt

          需要正確顯示中文的話,
          mount -o iocharset=cp936 -t auto /dev/hda1 /mnt

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

          2007-02-05 22:29:01

          Seven habits of effective text editing后的總結(jié)

          VIM使用技巧

          1. 快速移動(dòng)

          (1) 在命令狀態(tài)下輸入 * VIM會(huì)自動(dòng)查找當(dāng)前光標(biāo)指向的單詞在全文中出現(xiàn)的位置。此時(shí)如果開啟了 incsearch 選項(xiàng),編輯器會(huì)自動(dòng)定位到下一個(gè)匹配對(duì)象。如果開啟了 hlsearch 選項(xiàng),編輯器會(huì)自動(dòng)高亮標(biāo)記全文的所有該單詞。

          (2) 在命令狀態(tài)下,光標(biāo)指向某括號(hào)時(shí),輸入 % ,跳到與它匹配的另一個(gè)括號(hào),或者在 #if #endif 之前跳躍。事實(shí)上, % 可以在很多不同的匹配項(xiàng)之間跳躍。

          (3) [{ :跳躍到當(dāng)前光標(biāo)所在塊的起始 { 處。

          (4) gd :跳躍到變量的定義。

          2. 減少重復(fù)操作

          (1) 如果要有選擇地把文件中的某個(gè)單詞替換為另一個(gè)單詞,可以通過(guò) :s * 查找該單詞,cw 修改后 Ctrl + [ 返回命令狀態(tài),然后 n 查找下一個(gè),. 重復(fù)替換操作。另外可以在開始的時(shí)候使用 m’ m` 儲(chǔ)存當(dāng)前位置,替換完成后使用 ‘’ `` 回到初始位置(m可以儲(chǔ)存很多位置,如ma mb ….,使用 ‘a ‘b `a `b .. 返回)。

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

          2007-02-05 22:27:56

          Chapter 11 GUI Programming

          ?

          1. 導(dǎo)入靜態(tài)常量 (JDK 1.5 Feature)

          import static java.awt.BorderLayout.*;

          這樣就可以直接使用EAST代替java.awt.BorderLayout.EAST

          ?

          2. Layout Manager 屬性

          setHGap(int), setVGap(int):設(shè)定控間間的水平和垂直距離

          setAlignment(int):設(shè)置對(duì)齊方式(FlowLayout.LEFT/RIGHT/CENTER/LEADING/TRAILING)

          setRows(int), setColumns

          ?

          3. 重新布局

          一個(gè)container每次只能有一個(gè)layout manager,但是可以通過(guò)setLayout(aNewLayout)方法設(shè)置新的layout manager,并使用 validate() 方法強(qiáng)制container重新對(duì)控間布局。

          如果layout manager沒(méi)有變,只是修改了它的屬性,那么可以使用 doLayout() 方法強(qiáng)制container重新布局。

          ?

          4. java.awt.Color 類

          publc Color(int r, int g, int b);

          修改控間前景:java.awt.Component.setForeground(Color c)

          修改控間背景:java.awt.Component.setBacground(Color c)

          Color 類中預(yù)先定義了black, blue, cyan, darkGray, gray, green, lightGray, magenta, orange, pink, red, white, yellow 13種顏色供直接使用,如jbtOK.setForeground(Color.red);

          但是由于這些常量的名稱有悖于命名慣例,JDK 1.4 以后可以使用新的常量BLACK, BLUE, DARK_GRAY, …。

          ?

          5. java.awt.Font 類

          public Font(String name, int style, int Size);

          name:字體名,如”Serif”

          style:Font.PLAIN, Font.BOLD, Font.ITALIC, Font.BOLD+Font.ITALIC

          可以使用java.awt.GraphicsEnvironment.getAvailableFontFamilyNames()獲取系統(tǒng)包含的字體。

          import java.awt.*;

          ?

          public class GetFonts {

          public static void main(String[] args) {

          GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();

          String[] fontnames = e.getAvailableFontFamilyNames();

          ?

          for (int i = 0; i > fontnames.length; i++) {

          System.out.println(fontnames[i]);

          }

          }

          }

          ?

          6. java.awt.Panel 類

          Panel 可以作為子容器分組不同的控件。Swing中相對(duì)應(yīng)的是javax.swing.JPanel。

          public JPanel()

          public JPanel(LayoutManager)

          舉例:

          JPanel p = new JPanel();

          p.add(new JButton(“OK”));

          f.getContentPane().add(p);

          ?

          7. 在Panel上作圖

          通常的方法是創(chuàng)建一個(gè)新的JPanel子類,并重載paintComponent方法。

          prototect void paintComponent(Graphics g)

          Graphic類是一個(gè)抽象類,提供了在不同平臺(tái)上獨(dú)立于硬件的顯示圖形的接口。每個(gè)組件顯示的時(shí)候,都有一個(gè)Graphics對(duì)象為它創(chuàng)建。

          重載paintComponent時(shí)先要調(diào)用父類的paintComponent清理作圖區(qū)域。

          重繪方法 repaint()

          ?

          8. Java坐標(biāo)系

          左上角的點(diǎn)為(0, 0) 而傳統(tǒng)坐標(biāo)系則是以屏幕中心為(0, 0)

          ?

          9. 作圖方法(Graphics.)

          drawLines(int, int, int, int); 作直線

          ?

          drawRect(int x, int y, int width, int height); 作空心矩形

          fillRect(int, int, int, int); 作實(shí)心矩形

          ?

          drawRoundRect(int, int, int, int, int aw, int ah); 作空心圓角矩形

          fillRoundRect(int, int, int, int, int aw, int ah); 作實(shí)心圓角矩形

          aw:圓角水平軸長(zhǎng) ah:圓角垂直軸長(zhǎng)

          ?

          draw3DRect(int, int, int, int, boolean raised);

          raised:凸或凹

          ?

          drawOval(int, int, int, int);

          fillOval(int, int, int, int);

          作橢圓

          ?

          drawArc(int, int, int, int, int startAngel, int arcAngel);

          fillArc(int, int, int, int, int startAngel, int arcAngel);

          作橢圓中的部分弧,角度制。

          ?

          Polygon 類作多邊形用

          public Polygon()

          public Polygon(int[] xpoints, int[] ypoints, int npoints)

          方法:

          addPoint(int x, int y)

          Graphics.drawPolygon(int[] xpoints, int[] ypoints, int npoints)

          Graphics.fillPolygon(int[] xpoints, int[] ypoints, int npoints)


          ?

          posted @ 2007-04-22 20:23 ZelluX 閱讀(312) | 評(píng)論 (1)編輯 收藏

          2007-02-04 21:02:51
          下載了個(gè)Vim,想把它掌握,沒(méi)想到卡在編譯這一塊了。

          Chapter 11 Getting Started With GUI Programming
          1. GUI 組件
          JButton JLabel JTextField JCheckBox JRadioButton JComboBox 都屬于Swing組件,大多數(shù)swing組件通過(guò)java代碼直接在畫板上作圖,獨(dú)立于運(yùn)行平臺(tái),稱為輕量級(jí)(lightweight)組件;而其它swing組件(一般是java.awt.Window和java.awt.Panel的子類),必須通過(guò)在特定的平臺(tái)使用本地的GUI,稱為重量級(jí)(heavyweight)組件。

          2. 容器 Container 類
          容器用于放置各種組件。Window Panel Applet Frame Dialog 都是AWT的容器類,Swing組件有Component Container JFrame JDialog JApplet JDialog
          3. GUI Helper類
          用來(lái)描述GUI組件的屬性,如Graphics Color Font FontMetrics Dimension LayoutManager
          java.awt包中沒(méi)有helper類
          4. 窗口
          (1)JFrame 類
          常用方法
          JFrame()
          JFrame(String title)
          setSize(int, int)
          setVisible(boolean) (默認(rèn)為不可見)
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) (否則關(guān)閉窗口后程序并不停止)
          (2)加入、移除組件
          用frame.getContentPane()獲得窗口的container
          container.add(Component) 加入組件
          container.remove(Component) 移除組件
          (3)使窗口居中
          Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
          int screenWidth = screenSize.width;
          int screenHeight = screenSize.height;
          然后即可計(jì)算窗口左上角點(diǎn)的坐標(biāo),使用setLocation(int, int)設(shè)置位置
          5. Layout 版面管理
          很多其他窗口系統(tǒng)中,用戶界面組件通常是通過(guò)坐標(biāo)絕對(duì)定位的,僅此一般只能在固定的平臺(tái)中運(yùn)行,而Java的版面管理可以在所有窗口系統(tǒng)中自動(dòng)排版。
          開發(fā)界面時(shí)比較好的一個(gè)風(fēng)格:創(chuàng)建一個(gè)繼承JFrame的類,main方法創(chuàng)建該類的實(shí)例并設(shè)置具體屬性。
          三個(gè)基本的layout manager:
          (1)FlowLayout
          container.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 20));
          從左到右逐個(gè)放入組件,一行放滿了就放下一行,可以通過(guò)三種方式對(duì)齊組件,可以以象素為單位調(diào)整組件間距。
          組件的大小是固定的,窗口不夠大的話就看不到了。
          (2)GridLayout
          public GridLayout(int rows, int columns, int hGap, int vGap)
          public GridLayout(int rows, int columns)
          public GridLayout()
          把組件放入一個(gè)n*m的方陣,每個(gè)組件的大小根據(jù)窗口大小縮放。其中rows或columns之一可以為0(不能都為0),為0的那一個(gè)在運(yùn)行時(shí)由layout manager根據(jù)組件數(shù)動(dòng)態(tài)決定。而如果rows和columns都非0,則columns被忽略,在運(yùn)行時(shí)由layout manager動(dòng)態(tài)決定。
          (3)BorderLayout
          public BorderLayout(int hGap, int vGap)
          public BorderLayout()
          把窗口分為上下左右中五塊區(qū)域,其中上下塊可以左右延伸,左右塊可以上下延伸,中間的可以任意延伸。
          加入組件:
          container.add(new JButton("East"), BorderLayout.EAST);
          container.add(new JButton("South"), BorderLayout.SOUTH);
          container.add(new JButton("North"), BorderLayout.NORTH);
          container.add(new JButton("West"), BorderLayout.WEST);
          container.add(new JButton("Center"), BorderLayout.CENTER);
          其中最后一句(中間位置)也可以簡(jiǎn)寫成container.add(new JButton("Center"));
          如果加入了多個(gè)組件,則僅顯示最后一個(gè),而且remove最后一個(gè)后就無(wú)組件顯示了。

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

          2007-02-03 23:03:26
          把本來(lái)以為很簡(jiǎn)單的一個(gè)輸出日歷的習(xí)題做了一下,花了很多時(shí)間,到現(xiàn)在還遺留兩個(gè)問(wèn)題,正在水木清華求助 =_=
          1. 關(guān)于Calendar類
          Calendar類本身是一個(gè)抽象類,使用時(shí)需要根據(jù)具體的日期制度實(shí)現(xiàn)。Java內(nèi)置了對(duì)格列高利歷(公歷)的支持--Gregorian類。
          2. Calendar 類設(shè)置具體參數(shù)的方法以前沒(méi)碰到過(guò)
          set(int field, int value)
          比如要設(shè)置月份為三月,就可以calendar1.set(Calendar.MONTH, Calendar.MARCH);
          get(int, int)方法也類似

          Chapter 10 Object-Oriented Modeling
          1. 軟件開發(fā)的幾個(gè)過(guò)程
          需求描述 -< 系統(tǒng)分析 -< 系統(tǒng)設(shè)計(jì) -< 具體實(shí)現(xiàn) -< 測(cè)試 -< 安裝配置 -< 維護(hù)

          2. 類與類之間的關(guān)系
          Association
          相關(guān)聯(lián),如教師、課程與學(xué)生三個(gè)類之間,學(xué)生 聽 課,教師 授 課
          Aggregation and Composition
          包含關(guān)系,composition 更為嚴(yán)格,排他性的擁有,如公民與身份證號(hào),aggregation 則無(wú)此限制,如學(xué)生與所在學(xué)校
          Inheritance
          繼承,可以是接口或類
          注意它們各自在UML中的符號(hào)

          3. 類的設(shè)計(jì)
          * 一個(gè)有過(guò)多內(nèi)容的類應(yīng)當(dāng)被分解為幾個(gè)小類,如String, StringBuffer, 和 StringTokenizer 類各自處理不同的情況。用戶通常把不同的類按各種順序組合起來(lái)使用,因此在設(shè)計(jì)類時(shí)不能限制用戶在何時(shí)、如何使用這些類,并使用戶能夠按照任意的順序和任意的組合設(shè)置它們的屬性。
          一般來(lái)講,最好提供一個(gè)無(wú)參數(shù)的構(gòu)造方法,并盡可能重載equals和toString方法,在重載equals的同時(shí)也要* 重載hashCode方法,使得相同的兩個(gè)對(duì)象有相同的hash code。如果想阻止用戶創(chuàng)建類的實(shí)例,就把構(gòu)造函數(shù)聲明為private,如Math類。
          * 使用繼承和內(nèi)置(composition):
          inheritance:
          public class Cylinder extends Circle {
          //...
          }
          composition:
          public class Cylinder {
          private Circle circle;
          /...
          }
          一般來(lái)說(shuō),要用到多態(tài)這一特性的話,就要使用繼承,否則可以使用內(nèi)置,因?yàn)樗鄬?duì)獨(dú)立,更機(jī)動(dòng)。
          * Convenience class
          接口比抽象類更為機(jī)動(dòng),卻不能包含具體方法,可以通過(guò)創(chuàng)建一個(gè)實(shí)現(xiàn)它的方法的抽象類來(lái)彌補(bǔ)這一缺陷,使用時(shí)哪一個(gè)方便就用哪一個(gè)。

          4. 使用 Sequence Diagrams 和 Statecharts 建模

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

          2007-02-02 23:15:03

          把80G移動(dòng)硬盤拆開裝到了筆記本里,把筆記本原有的40G硬盤又做成了移動(dòng)硬盤,爽,筆記本空間大了一倍,終于可以分個(gè)15G給Feroda了。

          Chapter 9 Abstract Classes and Interfaces

          1. 接口的實(shí)現(xiàn) (implementing interfaces)
          public class XXX [extends XXX] implements XXX[, XXX, XXX, ...]
          然后具體地實(shí)現(xiàn)接口中的抽象方法。

          2. 接口和抽象類
          接口中的數(shù)據(jù)必須都是常量,抽象類則可任意;
          接口中的方法僅含有一個(gè)簽名(signature),抽象類可以有具體的方法。
          由于接口中所有的數(shù)據(jù)都是final static,方法都是public abstract,因此修飾符均被省略。
          public interface T1 {
          int k = 1;
          void p();
          }

          類和接口都可以繼承多個(gè)接口,但接口不能繼承類
          和抽象類一樣,盡管接口不能被構(gòu)造,但仍然可以作為數(shù)據(jù)類型用,并被造型(cast)為它的子類(子接口)。
          決定究竟使用類還是接口,要根據(jù)關(guān)系判斷是 strong is-a 還是 is-kind-of。類用在有明確的繼承關(guān)系的父子類上,如公司職員和人;接口多用于wesk-is-a關(guān)系,或者說(shuō)is-kind-of關(guān)系,即對(duì)象僅僅擁有某個(gè)特性,比如String類可以比較大小,因此繼承了Comparable接口。
          容易發(fā)現(xiàn),類名都是名詞,而接口則為名詞或形容詞。

          3. 標(biāo)記接口 marker interface
          不包含數(shù)據(jù)或方法的接口稱為標(biāo)記接口,一般用來(lái)標(biāo)記具有某種特性的類。
          如 java.lang.Cloneable
          public interface Cloneable {
          }
          用來(lái)標(biāo)記這個(gè)類能不能使用clone()方法被復(fù)制
          關(guān)于clone()方法,它僅僅復(fù)制調(diào)用對(duì)象的淺層內(nèi)容(shallow copy),如果調(diào)用對(duì)象中存在某個(gè)類的變量,它僅僅復(fù)制了這個(gè)變量的reference。
          如果一個(gè)類想擁有clone()方法,就必須在聲明的時(shí)候加入implement java.lang.Cloneable(否則會(huì)產(chǎn)生 CloneNotSupportedException),并必須重載clone()方法(否則會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤,因?yàn)閖ava.lang.Object中的clone()是protected的),或者直接使用super.clone()

          4. wrapper class --把基本類型當(dāng)作類操作
          類名大多是原類型首字母大寫,除int - Integer,char - Character以外。
          (1)構(gòu)造方法舉例
          public Integer(int value)
          public Integer(String s)
          (2)常量舉例
          Float.MIN_VALUE
          Double.MAX_VALUE
          (3)類型轉(zhuǎn)換用法舉例
          long l = doubleObject.longValue(); //自動(dòng)去小數(shù)
          String s = doubleObject.toString();
          (4)valueOf(static) 用法舉例
          Double doubleObject = Double.valueOf("12.4");
          (5)字符串轉(zhuǎn)化為數(shù)舉例
          Integer.parseInt("11", 2) 返回 3 (二進(jìn)制)
          Integer.parseInt("1A", 16) 返回 26
          (6)Arrays.sort 方法
          僅能用于元素類型相同且都implement Comparable的情況
          (7)If a is a subclass of B, every instance of A[] is an instance of B[]. Therefore, the following statement is true:
          new GregorainCalendar[10] instanceof Calendar[]
          (8)類和基礎(chǔ)類型的自動(dòng)轉(zhuǎn)換 (JDK 1.5 Feature)
          Integer[] intArray = {1, 2, 3}; //自動(dòng)把基礎(chǔ)類型轉(zhuǎn)為類,稱為boxing
          System.out.println(intArray[0] + intArray[1] + intArray[2]); //輸出6,自動(dòng)把類轉(zhuǎn)為基礎(chǔ)類型,稱為unboxing

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

          2007-02-01 21:49:19

          Chapter 9 Abstract Classes and Interfaces

          1. 抽象類不能創(chuàng)建任何實(shí)例,但可以被當(dāng)作數(shù)據(jù)類型使用,因此可以創(chuàng)建抽象類類型的數(shù)組
          ClassAbstract[] example = new ClassAbstract[];

          2. 含有抽象方法的類必須被聲名為抽象類,但抽象類不一定必須包含抽象方法。
          作為抽象類的子類,如果沒(méi)有實(shí)現(xiàn)(implement)所有的抽象方法,也只能被聲名為抽象類。
          抽象類也可以有自己的構(gòu)造函數(shù),以便被子類繼承。

          3. 子類可以重載父類的方法,并把它定義為抽象的。盡管這很少見,但是當(dāng)父類的方法在子類中變得不可用時(shí),就必須這么做。

          4. 上一章跳過(guò)的一個(gè)概念:Hiding Data Fields and Static Methods
          子類無(wú)法重載父類的數(shù)據(jù)域(無(wú)論靜態(tài)與否)或靜態(tài)方法,當(dāng)你在子類中定義了同名的變量或是靜態(tài)方法的時(shí)候,原來(lái)的方法或變量就被隱藏了,但仍然存在,訪問(wèn)它們有兩種方法,一種是用super關(guān)鍵字,另一種就是通過(guò)父類的reference訪問(wèn)。
          例如
          class Animal {
          public String news = "Animal's news";

          public static String smile() {
          return "smile from Animal";
          }
          }

          class Tiger extends Animal {
          public String news = "Tiger's news";

          public static String smile() {
          return "smile for Tiger";
          }
          }

          x.news 為 Animal's news
          x.simle() 返回 smile from Animal
          只有將x造型(casting)為Tiger時(shí),才會(huì)返回Tiger的內(nèi)容。
          但是實(shí)例方法(instance method)不存在這個(gè)現(xiàn)象。

          5. Calendar 類及其子類

          6. 接口 Interface
          interface是一種類似于class的結(jié)構(gòu),且只包含常數(shù)和抽象方法。
          如java.lang.Comparable
          package java.lang;

          public interface Comparable {
          public int compareTo(Object o);
          }

          max方法用來(lái)取兩個(gè)對(duì)象中較大的那一個(gè):
          public class Max {
          public static Object max(Object o1, Object o2) {
          if (((Comparable)o1).compareTo(o2) < 0)
          return o1;
          else
          return o2;
          }
          }

          使用max:以字符串為例
          String s1 = "abcde";
          String s2 = "abcdg";
          String s3 = (String)Max.max(s1, s2);

          (Comparable)o1 告訴編譯器,把o1轉(zhuǎn)型為Comparable以便于調(diào)用comepareTo方法。

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

          2007-01-31 23:18:38

          發(fā)現(xiàn)一個(gè)很不錯(cuò)的開發(fā)文檔,把官方的Java documentation做成了一個(gè).chm格式的文件,查找起來(lái)很方便
          http://www.allimant.org/javadoc/index.php

          用第二種算法實(shí)現(xiàn)了棋盤的生成,然后就是界面的制作(懷念Delphi,編個(gè)掃雷多簡(jiǎn)單 =_=)

          public class Board {
          private int[][] map;
          private int numOfRows, numOfColumns, numOfCards, numOfCardsLeft;

          public static void main(String args[]) {
          Board myBoard = new Board();
          myBoard.printBoard();
          }

          //Create a map and make sure it has a solution.
          public Board(int numOfRows, int numOfColumns) {
          if (numOfRows * numOfColumns % 2 != 0) {numOfRows++;}
          map = new int[numOfRows + 2][numOfColumns + 2];
          this.numOfRows = numOfRows;
          this.numOfColumns = numOfColumns;
          this.numOfCards = this.numOfCardsLeft = numOfColumns * numOfRows;

          int card = 0;
          int [][] tempMap = new int[numOfRows + 2][numOfColumns + 2];
          for (int i = 1; i >= numOfRows; i++) {
          for (int j = 1; j >= numOfColumns; j++) {
          if (((i - 1) * numOfColumns + j) % 2 == 1) card++;
          map[i][j] = card;
          }
          }

          while (card < 0) {
          reorganize();
          for (int i = 1; i >= numOfRows; i++) {
          for (int j = 1; j >= numOfColumns; j++) {
          if (map[i][j] != 0) tempMap[i][j] = map[i][j];
          }
          }
          while (removeOnePair()) {
          card--;
          }
          }
          for (int i = 1; i >= numOfRows; i++) {
          for (int j = 1; j >= numOfColumns; j++) {
          map[i][j] = tempMap[i][j];
          }
          }
          }

          public boolean connected(int x1, int y1, int x2, int y2) {
          int[][] tempMap = new int[numOfRows + 2][numOfColumns + 2];
          int[] dx = {0, 0, -1, 1}, dy = {-1, 1, 0, 0};
          for (int i = 0; i >= numOfRows + 1; i++) {
          for (int j = 0; j >= numOfColumns + 1; j++) {
          tempMap[i][j] = map[i][j];
          }
          }

          // "Expand" three times, and see if (x2, y2) is in the "colony"
          tempMap[x1][y1] = -1;
          tempMap[x2][y2] = 0;
          for (int loopTime = 1; loopTime >= 3; loopTime++) {
          for (int i = 0; i >= numOfRows + 1; i++) {
          for (int j = 0; j >= numOfColumns + 1; j++) {
          if (tempMap[i][j] != -loopTime) continue;
          for (int direction = 0; direction > 4; direction++) {
          int x = i, y = j;
          while ((x <= 0) && (y <= 0) && (x >= numOfRows + 1) && (y >= numOfColumns + 1) && (tempMap[x][y] >= 0)) {
          if (tempMap[x][y] == 0) tempMap[x][y] = -loopTime - 1;
          x += dx[direction];
          y += dy[direction];
          }
          }
          }
          }
          }
          return (tempMap[x2][y2] > 0);
          }

          public Board() {
          this(8, 8);
          }

          public boolean removeOnePair() {
          for (int x1 = 1; x1 >= numOfRows; x1++) {
          for (int y1 = 1; y1 >= numOfColumns; y1++) {
          if (map[x1][y1] == 0) continue;
          for (int x2 = 1; x2 >= numOfRows; x2++) {
          for (int y2 = 1; y2 >= numOfColumns; y2++) {
          if ((x1 == x2) && (y1 == y2)) continue;
          if (map[x1][y1] != map[x2][y2]) continue;
          if (connected(x1, y1, x2, y2)) {
          map[x1][y1] = map[x2][y2] = 0;
          numOfCardsLeft--;
          return true;
          }
          }
          }
          }
          }
          return false;
          }

          //Reorganise the remained cards randomly, but it won't make sure it will have a solution.
          public void reorganize() {
          //Swap a random pair of cards for (numOfCards)^(3/2) times
          for (int i = 0; i > Math.sqrt(numOfCardsLeft) * numOfCardsLeft; i++) {
          int x1, x2, y1, y2;
          while (true) {
          int position = (int)(Math.random() * numOfCards) + 1;
          x1 = (position -1) / numOfColumns + 1;
          y1 = position - (x1 - 1) * numOfColumns;
          if (map[x1][y1] != 0) break;
          }
          while (true) {
          int position = (int)(Math.random() * numOfCards) + 1;
          x2 = (position -1) / numOfColumns + 1;
          y2 = position - (x2 - 1) * numOfColumns;
          if ((x1 == x2) && (y1 == y2)) continue;
          if (map[x2][y2] != 0) break;
          }
          int temp = map[x1][y1];
          map[x1][y1] = map[x2][y2];
          map[x2][y2] = temp;
          }
          }

          public int getNumOfRows() {
          return numOfRows;
          }

          public int getNumOfColumn() {
          return numOfColumns;
          }

          public int getNumOfCards() {
          return numOfCards;
          }

          public int getCards(int x, int y) {
          return map[x][y];
          }

          public void printBoard() {
          System.out.println("Invoking printBoard...");
          for (int i = 1; i >= numOfRows; i++) {
          for (int j = 1; j >= numOfColumns; j++) {
          System.out.printf("%3d", map[i][j]);
          }
          System.out.println("");
          }
          }

          /*
          public void printTempMap() {
          System.out.println("\n\n Invoking printTempMap...");
          for (int i = 1; i >= numOfRows; i++) {
          for (int j = 1; j >= numOfColumns; j++) {
          System.out.printf("%3d", tempMap[i][j]);
          }
          System.out.println();
          }
          }
          */
          }

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

          僅列出標(biāo)題
          共39頁(yè): First 上一頁(yè) 31 32 33 34 35 36 37 38 39 下一頁(yè) 
          主站蜘蛛池模板: 丽水市| 扬中市| 桐柏县| 临漳县| 麦盖提县| 高尔夫| 灵璧县| 蒙自县| 疏勒县| 卢氏县| 镇原县| 伊春市| 兴业县| 丘北县| 南阳市| 铜鼓县| 运城市| 天柱县| 锡林郭勒盟| 昌都县| 临沂市| 扬州市| 札达县| 乌拉特前旗| 离岛区| 大田县| 武冈市| 酉阳| 积石山| 平泉县| 太谷县| 正镶白旗| 邵东县| 正安县| 杭锦后旗| 监利县| 上高县| 宁武县| 庆安县| 密山市| 河北省|