Validator內建了許多基本驗證器,以下說明幾個常用的驗證器作用與基本設定方式:
required 驗證指定的欄位內容是否填寫,可判定只有空白的情況,設定範例如下:
<field?property="email"?depends="required"/> mask 驗證欄位內容是否符合所設定的regular expression,設定範例如下:
<field?property="zipCode"?depends="mask">
????<arg0?key="pre.displayname0"/>
????<var>
????????<var-name>mask</var-name>
????????<var-value>^\d{5}\d*$</var-value>
????</var>
</field> email 檢查電子郵件格式,例如:
<field?property="mail"?depends="email">
????<arg0?key="pre.displayname0"/>
</field> creditCard 檢查信用卡號碼格式,例如:
<field?property="cardnumber"?depends="creditCard">
????<arg0?key="pre.displayname0"/>
</field> maxLength、minLength 驗證欄位的字元數是否符合設定的最大長度或最小長度限定,下面是maxLength的設定範例:
<field?property="message"?depends="maxLength">
????<arg0?key="pre.displayname0"/>
????<arg1?key="pre.displayname1"/>
????<var>
????????<var-name>maxLength</var-name>
????????<var-value>100</var-value>
????</var>
</field> range 驗證欄位的值是否在設定的範圍,例如:
<field?property="priority"?depends="range">
????<arg0?key="pre.displayname0"/>
????<var>
????????<var-name>max</var-name>
????????<var-value>100</var-value>
????</var>
????<var>
????????<var-name>min</var-name>
????????<var-value>0</var-value>
????</var>
</field> date 驗證欄位內容是否符合日期格式,例如:
<field?property="date"?depends="date">
????<arg0?key="pre.displayname0"/>
????<var>
????????<var-name>datePattern</var-name>
????????<var-value>MM/dd/yyyy</var-value>
????</var>
</field> datePattern 不檢查在日期上是否補足0,例如7/23/1978是可以的,如果使用datePatternStrict則要補上0,例如07/23/1978。
byte、short、integer、long、float、double 檢查欄位值資料型態,例如:
<field?property="number"?depends="integer">
????<arg0?key="pre.displayname0"/>
</field>
posted @
2006-09-07 12:04 Q系列類、方法、變量…… 閱讀(296) |
評論 (0) |
編輯 收藏
requiredif:根據
條件來決定是否要進行驗證。
條件:通常是指跟同一個Form里的其它字段的關系。
例:
????這個例子要得到的結果:
????????????如果department為空的時候name就不能為空。反之,departmetnt非空時,name可以為空.
html:
<html:form?action=/doaction>
?????<html:text?property=name?/>
?????<html:text?property=department?/>
</html:form>validations.xml
<form-validation>
????????<formset>
????????????????<form?name=user>
?????????????????????????<field?property=name?depends=requiredif>?????????----使用requiredif驗證器
?????????????????????????<arg0?key=firstname?resource=false/>
???????????????????????<var>
????????????????????????????????<var-name>field[0]</var-name>??????????????????????????????----相關聯的第一個字段.從0開始
????????????????????????????????<var-value>departmentname</var-value>?????????????????----相關聯的字段名稱
??????????????????????</var>
??????????????????????<var>
????????????????????????????????<var-name>fieldTest[0]</var-name>????????????????????----條件fieldValue[0.1..]??fieldTest[0.1..]
????????????????????????????????<var-value>NULL</var-value>
???????????????????????</var>
???</field>???
??</form>
??</formset>
</form-validation>

相關:
?fieldTest[]:NULL,NOTNULL,EQUAL 三個值
?當測試條件等于EQUAL時,判斷字段的值是否等于變量fieldValue[]的值
posted @
2006-09-03 23:11 Q系列類、方法、變量…… 閱讀(830) |
評論 (0) |
編輯 收藏
摘要:
Struts下面的動態建立、組裝“動態表單”(代碼級別、非xml聲明)〔原創〕
作者:邱洋
QQ:1964477
有一個動態的form(DynaValidatorForm)adminGroupModifyForm
有一個jsp文件包括以下代碼:
<html:formaction="/adminGroupModify">
<html:textproperty="name">
</html:form>
現在要做的是動態的向name設置值,那么我們就在Action中動態生成adminGroupModifyForm,方法如下 閱讀全文
posted @
2006-08-31 23:27 Q系列類、方法、變量…… 閱讀(324) |
評論 (0) |
編輯 收藏
在win xp的命令行下輸入:
netsh ini ip reset c:\resetlog.txt
posted @
2006-08-25 12:34 Q系列類、方法、變量…… 閱讀(1444) |
評論 (0) |
編輯 收藏
作者:邱洋
QQ:1964477
??? 雖然在hibernate中有show_sql選項,但是顯示出來的語句大多類似
??? select * from xxx where value=?
??? 但是有時候我們需要得到完整的SQL語句,怎么辦呢?使用P6SPY就可以完成這個任務
??? p6spy是一個開源軟件,它可以跟蹤任何使用jdbc的應用產生的數據庫操作。特別適合于監控ejb服務器產生的 sql statements。
??? 官方網址:http://www.p6spy.com/
??? 目前p6spy 適用的應用服務器包括jboss, atg, orion, jonas, iplanet, weblogic, websphere, resin and tomcat.
下面我介紹一下p6spy在tomcat應用程序上安裝的步驟:
(1)http://www.p6spy.com/download.html,下載zip包
(2)解壓出p6spy.jar spy.properties兩個文件
(3)將p6spy.jar 放入應用程序的WEB-INF/lib目錄,將spy.properties放入WEB-INF/classes目錄
(4)修改spy.properties
??? realdriver? =com.mysql.jdbc.Driver? 將這行前面的#去掉
??? logfile???? = c:/spy.log? 修改一個你需要的日志文件名
???
(5)修改hibernate.xml,修改connection.driver_class的值為com.p6spy.engine.spy.P6SpyDriver
(6)重啟tomcat
(7)這樣在c:/下的spy.log記錄了數據庫的訪問情況。
posted @
2006-08-21 00:52 Q系列類、方法、變量…… 閱讀(6768) |
評論 (5) |
編輯 收藏
有以下字符串,我要獲取其中的E-MAIL地址:
String?emailmessage="<qdragon@126.com>Q龍,龍少<longshao@126.com>;嘿嘿<eee@www.com>";最終我要的輸出為:
qdragon@126.com,longshao@126.com,eee@www.com編程方法如下:
????public?static?String?escpMailAddress(String?str)

????
{
????????if?(str==null?||?str.length()==0)
????????????return?null;
????????//得到處理后的email地址,地址規則:?<qdragon@abc.com>中文,<qdragon@abc.com>中文
????????Pattern?patter?=?Pattern.compile("<(.*?)>");?//?是最小匹配
????????Matcher?mather?=?patter.matcher(str);
????????boolean?result?=?false;
????????StringBuffer?sb?=?new?StringBuffer();
????????int?start,end;
????????//循環找到E-MAIL地址
????????for(;;)

????????
{
????????????result?=?mather.find();
????????????if?(!result)
????????????????break;
????????????start?=?mather.start();
????????????end?=?mather.end();
????????????sb.append(str.substring(start,?end).replaceAll("<*>*","")+",");

????????}????
????????return?sb.toString();
????}
這樣就完成了需要的功能!其中關于正則表達式中值得注意的知識如下:
*表示匹配0個或多個字符,是貪婪的(Greedy),即盡可能多地匹配字符,.*表示盡可能多地匹配非\r\n的字符
*?稱為是懶惰的星號,即盡可能少地匹配字符,馬上會去檢測后面的字符是否滿足.*?后的模式,如果不滿足,則回溯;一旦后面的字符串滿足模式abc,則馬上停止了
*+不知道,倒是有 + 和 +?。+表示匹配1個或多個字符,是貪婪的;+?是懶惰的,在匹配一個字符之后會去檢測后面的字符是否滿足.+?后的模式,如果不滿足,則回溯
posted @
2006-08-18 22:37 Q系列類、方法、變量…… 閱讀(1357) |
評論 (1) |
編輯 收藏
Here's how to get hibernate-tools 3.1beta4 to work, disabling any MyEclipse Hibernate functionality (NOTE: This is only meant as a workaround if you absolutely NEED hibernate-tools, following the steps below might seriously screw your Eclipse/MyEclipse installation. So please only proceed if you really know what you're doing!)
OK, on to the gory details...
以下翻譯開始
- Locate the MyEclipse install location, it should contain two folders "plugins" and "features". Let's call this $MYECLIPSE.
進入MyEclipse目錄,然后將找到plugins和feature兩個目錄,下面我們將MyEclipse的目錄叫做$MYECLIPSE
- Create two folders named "disabled_plugins" and "disabled_features" in $MYECLIPSE.
在$MYECLIPSE建立兩個空白目錄disabled_plugins和disabled_feature
- Move the MyEclipse Hibernate feature (folder: $MYECLIPSE/features/com.genuitec.myeclipse.hibernate_4.0.100 ) to the "disabled_features" folder
把“$MYECLIPSE/features/com.genuitec.myeclipse.hibernate_4.0.100”目錄移動到disabled_features中
- Move the following folders from $MYECLIPSE/plugins to "disabled_plugins":
- com.genuitec.eclipse.hibernate_4.0.100
- com.genuitec.myeclipse.hibernate_4.0.100
- org.hibernate.eclipse.console_4.0.100
- org.hibernate.eclipse.mapper_4.0.100
- org.hibernate.eclipse_4.0.100
把$MYECLIPSE/plugins 中以上的五個目錄或文件拷貝到 disabled_plugins目錄中
- Last step: remove the dependency from the main MyEclipse feature. Open the file $MYECLIPSE/features/com.genuitec.myeclipse.enterprise.workbench_4.0.100/feature.xml.
Locate the following snippet:
最后一步,修改“$MYECLIPSE/features/com.genuitec.myeclipse.enterprise.workbench_4.0.100/feature.xml”這個文件,找到下列代碼
Code: |
<includes ? ? ? ? ?id="com.genuitec.myeclipse.hibernate" ? ? ? ? ?version="4.0.100" ? ? ? ? ?name="MyEclipse Hibernate Support"/>
|
... and comment it out, like:
注解它,修改后的代碼如下
Code: |
<!-- <includes ? ? ? ? ?id="com.genuitec.myeclipse.hibernate" ? ? ? ? ?version="4.0.100" ? ? ? ? ?name="MyEclipse Hibernate Support"/> -->
|
Now restart Eclipse (preferably using "-clean" switch), install hibernate-tools 3.1 (if you have not already done so) and enjoy!
重新啟動MyEcliplse然后按照正常安裝插件的方式安裝 Hibernate tools 3.1
posted @
2006-06-09 15:13 Q系列類、方法、變量…… 閱讀(1807) |
評論 (0) |
編輯 收藏
作者:余旭東
?
本文獻給廣大linux的愛好者
有人居然說設置radius要賣錢,本人花了幾天的功夫,看了些資料,終于成功設置radius服務器,現在貼出來和大家分享。
筆者用的平臺是RedHat Linux 7.2
一、安裝mysql
本人用的是光盤上的RPM包
rpm –ivh mysql-3.23.41.1.i386.rpm
rpm –ivh mysql-devel-3.23.41.1.i386.rpm
rpm –ivh mysql-server-3.23.41.1.i386.rpm
rpm –ivh mysqlclient9-3.23.22-6.i386.rpm
啟動mysql服務
service mysqld start
更改mysql的root密碼(注意:mysql的root 和系統的root是2個不用的概念)
mysql –uroot –p
創建radius數據庫
creat database radius;
use mysql;
update user set password=password(‘你的密碼’) where user=’root’;
允許遠程機器連接
update user set host=’%’ where user=’root’;
退出及重新啟動mysql
quit
service mysqld restart
二、安裝openSSL
本人也是用的光盤上的RPM包
rpm –ivh openssl095a-0.9.5a-11.i386.rpm
rpm –ivh openssl096-0.9.6-6.i386.rpm
三、安裝freeradius
從http://www.freeradius.org上下載free...本文版本是0.8.1
編譯和安裝
tar xvfz freeradius.tar.gz
cd xvfz freeradius-0.8.1
./configure
make
make install
建立mysql的數據庫raius的表
cd src/modules/rlm_sql/drivers/rlm_sql_mysql
mysql –uroot –p密碼 radius < db_mysql.sql
更改freeradius的設置
cd /usr/local/etc/raddb
更改radiusd.conf,讓其支持sql (如下面所說)
authorize {
preprocess
chap
mschap
suffix
sql
}
accouting {
….
sql
…
}
更改sql.conf
server=”localhost”
login=”root”
password=”mysql的root的密碼”
radius_db=”radius”
更改 client.conf支持所用的NAS具體可以看該文檔,要注意的是secret是NAS和radius服務器的共享密碼
數據庫加入測試賬號
加入組
mysql –uroot –p密碼 radius
insert into radgroupreply (groupname,attribute,op,values) values ('user','Auth-Type',':=','Local');
insert into radgroupreply (groupname,attribute,op,values) values ('user','Service-Type',':=','Framed-User');
insert into radgroupreply (groupname,attribute,op,values) values ('user','Framed-IP-Address',':=','255.255.255.254');
insert into radgroupreply (groupname,attribute,op,values) values ('user','Framed-IP-Netmask',':=','255.255.255.0');
加入測試賬號
insert into radcheck (username,attribute,op,value) values ('test','User-Password',':=','test')
測試賬號加入組
insert into usergroup (username,groupname) values ('test','user');
四、啟動radius服務、測試賬號
啟動到debug模式
radiusd –X
有時候會報找不到文件rlm_sql_mysql這個時候只要把庫文件加入系統搜索的目錄里
比如:
cp /usr/local/lib/* /usr/lib
測試賬號
radtest test teset localhost 0 testing123
如果能看到radius的應答,恭喜服務器設置成功了。
本人才疏,如果本文有錯誤,請大家指正,并歡迎一起討論。
本文作者:余旭東
Email: netwolf@163.com
如要轉載,請注明作者和來源?
posted @
2006-05-18 16:33 Q系列類、方法、變量…… 閱讀(635) |
評論 (1) |
編輯 收藏
?MySQL集群配置(max)
|
|
一、介紹 ======== 這篇文檔旨在介紹如何安裝配置基于2臺服務器的MySQL集群。并且實現任意一臺服務器出現問題或宕機時MySQL依然能夠繼續運行。
注意! 雖然這是基于2臺服務器的MySQL集群,但也必須有額外的第三臺服務器作為管理節點,但這臺服務器可以在集群啟動完成后關閉。同時需要注意的是并不推薦在集群啟動完成后關閉作為管理節點的服務器。盡管理論上可以建立基于只有2臺服務器的MySQL集群,但是這樣的架構,一旦一臺服務器宕機之后集群就無法繼續正常工作了,這樣也就失去了集群的意義了。出于這個原因,就需要有第三臺服務器作為管理節點運行。
另外,可能很多朋友都沒有3臺服務器的實際環境,可以考慮在VMWare或其他虛擬機中進行實驗。
下面假設這3臺服務的情況:
Server1: mysql1.vmtest.net 192.168.0.1 Server2: mysql2.vmtest.net 192.168.0.2 Server3: mysql3.vmtest.net 192.168.0.3
Servers1和Server2作為實際配置MySQL集群的服務器。對于作為管理節點的Server3則要求較低,只需對Server3的系統進行很小的調整并且無需安裝MySQL,Server3可以使用一臺配置較低的計算機并且可以在Server3同時運行其他服務。
二、在Server1和Server2上安裝MySQL ================================= 從
http://www.mysql.com
上下載mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz 注意:必須是max版本的MySQL,Standard版本不支持集群部署!
以下步驟需要在Server1和Server2上各做一次 # mv mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz /usr/local/ # cd /usr/local/ # groupadd mysql # useradd -g mysql mysql # tar -zxvf mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz # rm -f mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz # mv mysql-max-4.1.9-pc-linux-gnu-i686 mysql # cd mysql # scripts/mysql_install_db --user=mysql # chown -R root??. # chown -R mysql data # chgrp -R mysql . # cp support-files/mysql.server /etc/rc.d/init.d/mysqld # chmod +x /etc/rc.d/init.d/mysqld # chkconfig --add mysqld
此時不要啟動MySQL!
三、安裝并配置管理節點服務器(Server3) ===================================== 作為管理節點服務器,Server3需要ndb_mgm和ndb_mgmd兩個文件:
從
http://www.mysql.com
上下載mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz
# mkdir /usr/src/mysql-mgm # cd /usr/src/mysql-mgm # tar -zxvf mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz # rm mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz # cd mysql-max-4.1.9-pc-linux-gnu-i686 # mv bin/ndb_mgm . # mv bin/ndb_mgmd . # chmod +x ndb_mg* # mv ndb_mg* /usr/bin/ # cd # rm -rf /usr/src/mysql-mgm
現在開始為這臺管理節點服務器建立配置文件:
# mkdir /var/lib/mysql-cluster # cd /var/lib/mysql-cluster # vi config.ini
在config.ini中添加如下內容:
[NDBD DEFAULT] NoOfReplicas=2 [MYSQLD DEFAULT] [NDB_MGMD DEFAULT] [TCP DEFAULT] # Managment Server [NDB_MGMD] HostName=192.168.0.3 #管理節點服務器Server3的IP地址 # Storage Engines [NDBD] HostName=192.168.0.1 #MySQL集群Server1的IP地址 DataDir= /var/lib/mysql-cluster [NDBD] HostName=192.168.0.2 #MySQL集群Server2的IP地址 DataDir=/var/lib/mysql-cluster # 以下2個[MYSQLD]可以填寫Server1和Server2的主機名。 # 但為了能夠更快的更換集群中的服務器,推薦留空,否則更換服務器后必須對這個配置進行更改。 [MYSQLD] [MYSQLD]
保存退出后,啟動管理節點服務器Server3: # ndb_mgmd
啟動管理節點后應該注意,這只是管理節點服務,并不是管理終端。因而你看不到任何關于啟動后的輸出信息。
四、配置集群服務器并啟動MySQL ============================= 在Server1和Server2中都需要進行如下改動:
# vi /etc/my.cnf
[mysqld] ndbcluster ndb-connectstring=192.168.0.3 #Server3的IP地址 [mysql_cluster] ndb-connectstring=192.168.0.3 #Server3的IP地址
保存退出后,建立數據目錄并啟動MySQL:
# mkdir /var/lib/mysql-cluster # cd /var/lib/mysql-cluster # /usr/local/mysql/bin/ndbd --initial # /etc/rc.d/init.d/mysqld start
可以把/usr/local/mysql/bin/ndbd加到/etc/rc.local中實現開機啟動。 注意:只有在第一次啟動ndbd時或者對Server3的config.ini進行改動后才需要使用--initial參數!
五、檢查工作狀態 ================ 回到管理節點服務器Server3上,并啟動管理終端:
# /usr/bin/ndb_mgm 鍵入show命令查看當前工作狀態:(下面是一個狀態輸出示例)
[root@mysql3 root]# /usr/bin/ndb_mgm -- NDB Cluster -- Management Client -- ndb_mgm> show Connected to Management Server at: localhost:1186 Cluster Configuration --------------------- [ndbd(NDB)]? ???2 node(s) id=2? ? @192.168.0.1??(Version: 4.1.9, Nodegroup: 0, Master) id=3? ? @192.168.0.2??(Version: 4.1.9, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s) id=1? ? @192.168.0.3??(Version: 4.1.9)
[mysqld(API)]? ?2 node(s) id=4? ?(Version: 4.1.9) id=5? ?(Version: 4.1.9)
ndb_mgm>
如果上面沒有問題,現在開始測試MySQL: 注意,這篇文檔對于MySQL并沒有設置root密碼,推薦你自己設置Server1和Server2的MySQL root密碼。
在Server1中:
# /usr/local/mysql/bin/mysql -u root -p > use test; > CREATE TABLE ctest (i INT) ENGINE=NDBCLUSTER; > INSERT INTO ctest () VALUES (1); > SELECT * FROM ctest;
應該可以看到1 row returned信息(返回數值1)。
如果上述正常,則換到Server2上重復上面的測試,觀察效果。如果成功,則在Server2中執行INSERT再換回到Server1觀察是否工作正常。 如果都沒有問題,那么恭喜成功!
六、破壞性測試 ============== 將Server1或Server2的網線拔掉,觀察另外一臺集群服務器工作是否正常(可以使用SELECT查詢測?
|
posted @
2006-05-15 13:59 Q系列類、方法、變量…… 閱讀(621) |
評論 (1) |
編輯 收藏
java面試題集
原始地址:http://blog.csdn.net/softj/archive/2006/05/04/707992.aspx
基礎知識:
1.C++或Java中的異常處理機制的簡單原理和應用。
當JAVA程序違反了JAVA的語義規則時,JAVA虛擬機就會將發生的錯誤表示為一個異常。違反語義規則包括2種情況。一種是JAVA類庫內置的語義檢查。例如數組下標越界,會引發IndexOutOfBoundsException;訪問null的對象時會引發NullPointerException。另一種情況就是JAVA允許程序員擴展這種語義檢查,程序員可以創建自己的異常,并自由選擇在何時用throw關鍵字引發異常。所有的異常都是java.lang.Thowable的子類。
2. Java的接口和C++的虛類的相同和不同處。
由于Java不支持多繼承,而有可能某個類或對象要使用分別在幾個類或對象里面的方法或屬性,現有的單繼承機制就不能滿足要求。與繼承相比,接口有更高的靈活性,因為接口中沒有任何實現代碼。當一個類實現了接口以后,該類要實現接口里面所有的方法和屬性,并且接口里面的屬性在默認狀態下面都是public static,所有方法默認情況下是public.一個類可以實現多個接口。
3. 垃圾回收的優點和原理。并考慮2種回收機制。
Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程序員最頭疼的內存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候不再需要考慮內存管理。由于有個垃圾回收機制,Java中的對象不再有“作用域”的概念,只有對象的引用才有“作用域”。垃圾回收可以有效的防止內存泄露,有效的使用可以使用的內存。垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預知的情況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收。回收機制有分代復制垃圾回收和標記垃圾回收,增量垃圾回收。
4. 請說出你所知道的線程同步的方法。
wait():使一個線程處于等待狀態,并且釋放所持有的對象的lock。
sleep():使一個正在運行的線程處于睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。
notify():喚醒一個處于等待狀態的線程,注意的是在調用此方法的時候,并不能確切的喚醒某一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先級。
Allnotity():喚醒所有處入等待狀態的線程,注意并不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。
5. 請講一講析構函數和虛函數的用法和作用。
6. Error與Exception有什么區別?
Error表示系統級的錯誤和程序不必處理的異常,
Exception表示需要捕捉或者需要程序進行處理的異常。
7. 在java中一個類被聲明為final類型,表示了什么意思?
表示該類不能被繼承,是頂級類。
8. 描述一下你最常用的編程風格。
9. heap和stack有什么區別。
棧是一種線形集合,其添加和刪除元素的操作應在同一段完成。棧按照后進先出的方式進行處理。
堆是棧的一個組成元素
10. 如果系統要使用超大整數(超過long長度范圍),請你設計一個數據結構來存儲這種超大型數字以及設計一種算法來實現超大整數加法運算)。
public class BigInt()
{
int[] ArrOne = new ArrOne[1000];
String intString="";
public int[] Arr(String s)
{
intString = s;
for(int i=0;i<ArrOne.leght;i++)
{
11. 如果要設計一個圖形系統,請你設計基本的圖形元件(Point,Line,Rectangle,Triangle)的簡單實現
12,談談final, finally, finalize的區別。
final?修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。
finally?再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那么相匹配的 catch 子句就會執行,然后控制就會進入 finally 塊(如果有的話)。
finalize?方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。
13,Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(接口)?
匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類可以作為一個接口,由另一個內部類實現。
?
14,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。
Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內部類與C++嵌套類最大的不同就在于是否有指向外部的引用上。具體可見http: //www.frontfree.net/articles/services/view.ASP?id=704&page=1
注: 靜態內部類(Inner Class)意味著1創建一個static內部類的對象,不需要一個外部類對象,2不能從一個static內部類的一個對象訪問一個外部類對象
第四,&和&&的區別。
&是位運算符。&&是布爾邏輯運算符。
15,HashMap和Hashtable的區別。
?
都屬于Map接口的類,實現了將惟一鍵映射到特定的值上。
?
HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。
Hashtable 類似于 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因為它是同步的。
16,Collection 和 Collections的區別。
Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。
Collection是個java.util下的接口,它是各種集合結構的父接口。
17,什么時候用assert。
斷言是一個包含布爾表達式的語句,在執行這個語句時假定該表達式為 true。如果表達式計算為 false,那么系統會報告一個 Assertionerror。它用于調試目的:
assert(a > 0); // throws an Assertionerror if a <= 0
斷言可以有兩種形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 應該總是產生一個布爾值。
Expression2 可以是得出一個值的任意表達式。這個值用于生成顯示更多調試信息的 String 消息。
斷言在默認情況下是禁用的。要在編譯時啟用斷言,需要使用 source 1.4 標記:
javac -source 1.4 Test.java
要在運行時啟用斷言,可使用 -enableassertions 或者 -ea 標記。
要在運行時選擇禁用斷言,可使用 -da 或者 -disableassertions 標記。
要系統類中啟用斷言,可使用 -esa 或者 -dsa 標記。還可以在包的基礎上啟用或者禁用斷言。
可以在預計正常情況下不會到達的任何位置上放置斷言。斷言可以用于驗證傳遞給私有方法的參數。不過,斷言不應該用于驗證傳遞給公有方法的參數,因為不管是否啟用了斷言,公有方法都必須檢查其參數。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試后置條件。另外,斷言不應該以任何方式改變程序的狀態。
18,GC是什么? 為什么要有GC? (基礎)。
GC是垃圾收集器。Java 程序員不用擔心內存管理,因為垃圾收集器會自動進行管理。要請求垃圾收集,可以調用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
19,String s = new String("xyz");創建了幾個String Object?
兩個對象,一個是“xyx”,一個是指向“xyx”的引用對象s。
20,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
21,short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1 += 1;有什么錯?
short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式轉化為short型。可修改為s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。
22,sleep() 和 wait() 有什么區別? 搞線程的最愛
sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿后,線程不一定立即恢復執行。這是因為在那個時刻,其它線程可能正在運行而且沒有被調度為放棄執行,除非(a)“醒來”的線程具有更高的優先級 (b)正在運行的線程因為其它原因而阻塞。
wait()是線程交互時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到。
23,Java有沒有goto?
Goto?java中的保留字,現在沒有在java中使用。
?
24,數組有沒有length()這個方法? String有沒有length()這個方法?
數組沒有length()這個方法,有length的屬性。
String有有length()這個方法。
25,Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
26,Set里的元素是不能重復的,那么用什么方法來區分重復與否呢? 是用==還是equals()? 它們有何區別?
Set里的元素是不能重復的,那么用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值。
posted @
2006-05-08 23:50 Q系列類、方法、變量…… 閱讀(198) |
評論 (0) |
編輯 收藏