第一篇:java學(xué)習(xí)心得筆記
j2ee學(xué)習(xí)筆記
注:框架可以用www.weilaioem.com action=” ”);
out.print(response.encodeurl(“sessionexample”));
out.print(“form action=” ”);
out.print(“method = get>;”);
2) out.print(“<p>;<a href=” ”);
out.print(response.encodeurl(“sessionexample?database=foo&datavalue=bar”));
out.println(“” >;url encoded </a>;”);
3.singlethreadmodel
默認(rèn)的,每一個(gè)servlet definition in a container只有一個(gè)servlet class的實(shí)例。
只有實(shí)現(xiàn)了singlethreadmodel,container才會(huì)讓servlet有多個(gè)實(shí)例。
servlet specification上建議,不要使用synchronized,而使用singlethreadmodel。
singlethreadmodel(沒有方法)
保證servlet在同一時(shí)刻只處理一個(gè)客戶的請(qǐng)求。
singlethreadmodel是耗費(fèi)資源的,特別是當(dāng)有大量的請(qǐng)求發(fā)送給servlet時(shí),singlethreadmodel的作用是使包容器以同步時(shí)鐘的方式調(diào)用service方法。
這等同于在servlet的service()方法種使用synchronized.
single thread model一般使用在需要響應(yīng)一個(gè)heavy request的時(shí)候,比如是一個(gè)需要和數(shù)據(jù)庫打交道的連接。
2. 在重載servlet地init( )方法后,一定要記得調(diào)用super.init( );
3. the client通過發(fā)送一個(gè)blank line表示它已經(jīng)結(jié)束request
而the server通過關(guān)閉the socket來表示response已結(jié)束了。
4. 一個(gè)http servlet可以送三種東西給client
1) a single status code
2) any number of http headers
3) a response body
5. servlet之間信息共享的一個(gè)最簡(jiǎn)單的方法就是
system.getproperties().put(“key”,”value”);
6. post和get
post:將form內(nèi)各字段名稱和內(nèi)容放置在html header內(nèi)傳送給server
get:?之后的查詢字符串要使用urlencode,經(jīng)過urlencode后,這個(gè)字符串不再帶有空格,以后將在server上恢復(fù)所帶有的空格。
get是www.weilaioem.com中,可以通過serveltcontext的
setattribute( )
getattribute( )
removeattribute( )
來共享對(duì)象
10. 利用request.getparameter( )得到的string存在字符集問題。
可以用strtitle = request.getparameter(“title”);
strtitle = newww.weilaioem.coment is the start tag, the end tag,and everything (including other elements) in betwww.weilaioem.com/stockquote.www.weilaioem.coma targetnamespace=http://example.com/stockquote.xsd
xmlns="http://www.weilaioem.com
content-type: text/xml; charset="utf-8"
content-length: nnnn
soapaction: "some-uri"
<soap-env:envelope
xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"
關(guān)。
以下是你應(yīng)該回避使用的一些java特色,并且在你的ejb組件的實(shí)現(xiàn)代碼中要嚴(yán)格限
制它們的使用:
1.使用static,非final 字段。建議你在ejb組件中把所有的static字段都聲明為final型的。這樣可以保證前后一致的運(yùn)行期語義,使得ejb容器有可以在多個(gè)java虛擬機(jī)之間分發(fā)組件實(shí)例的靈活性。
2.使用線程同步原語來同步多個(gè)組件實(shí)例的運(yùn)行。避免這個(gè)問題,你就可以使ejb容器靈活的在多個(gè)java虛擬機(jī)之間分發(fā)組件實(shí)例。
3.使用awww.weilaioem.com.netpermission,java.io.reflect.reflectpermission,java.lang.security.securitypermission,以便加強(qiáng)先前所列出的編程限制。
許多ejb容器沒有加強(qiáng)這些限制,他們希望ejb組件開發(fā)者能遵守這些編程限制或者是帶有冒險(xiǎn)想法違背了這些限制。違背這些限制的ejb組件,比標(biāo)準(zhǔn)方法依賴過多或過少的安全許可,都將很少能在多個(gè)ejb容器間移植。另外,代碼中都將隱藏著一些不確定的、難以預(yù)測(cè)的問題。所有這些都足以使ejb組件開發(fā)者應(yīng)該知道這些編程限制,同時(shí)也應(yīng)該認(rèn)真地遵守它們。
任何違背了這些編程限制的ejb組件的實(shí)現(xiàn)代碼在編譯時(shí)都不能檢查出來,因?yàn)檫@些特點(diǎn)都是java語言和j2se中不可缺少的部分。
對(duì)于ejb組件的這些限制同樣適用于ejb組件所使用的幫助/訪問(helper/access)類,j2ee應(yīng)用程序使用java文檔(jar)文件格式打包到一個(gè)帶.ear(代表enterprise archive)擴(kuò)展名的文件中,這個(gè)ear文件對(duì)于發(fā)送給文件部署器來說是標(biāo)準(zhǔn)的格式。ear文件中包括在一個(gè)或多個(gè)ejb-jar文件中的ejb組件,還可能有ejb-jar所依賴的庫文件。所有ear文件中的代碼都是經(jīng)過深思熟慮開發(fā)的應(yīng)用程序并且都遵守編程限制和訪問許可集。
未來版本的規(guī)范可能會(huì)指定通過部署工具來定制安全許可的能力,通過這種方法指定了一個(gè)合法的組件應(yīng)授予的許可權(quán)限,也指定了一個(gè)標(biāo)準(zhǔn)方法的需求:如從文件系統(tǒng)中讀文件應(yīng)有哪些要求。一些ejb容器/服務(wù)器目前在它們的部署工具中都提供了比標(biāo)準(zhǔn)權(quán)限或多或少的許可權(quán)限,這些并不是ejb1.1規(guī)范中所需要的。
理解這些約束
ejb容器是ejb組件生存和執(zhí)行的運(yùn)行期環(huán)境,ejb容器為ejb組件實(shí)例提供了一些服務(wù)如:事務(wù)管理、安全持久化、資源訪問、客戶端連接。ejb容器也負(fù)責(zé)ejb組件實(shí)例整個(gè)生命期的管理、擴(kuò)展問題以及并發(fā)處理。所以,ejb組件就這樣寄居在一個(gè)被管理的執(zhí)行環(huán)境中--即ejb容器。
因?yàn)閑jb容器完全負(fù)責(zé)ejb組件的生命期、并發(fā)處理、資源訪問、安全等等,所以與容器本身的鎖定和并發(fā)管理相沖突的可能性就需要消除,許多限制都需要使用來填上潛在的安全漏洞。除了與ejb容器責(zé)任與安全沖突的問題,ejb組件還意味著僅僅聚焦于商務(wù)邏輯,它依賴于ejb容器所提供的服務(wù)而不是自己來直接解決底層的系統(tǒng)層的問題。
可能的問題
通常,ejb組件在容器之間的移植不可避免地與如下問題相關(guān):
1.它需要依靠的受限制的特點(diǎn)在特定ejb容器中沒有得到加強(qiáng)。
2.它需要依靠的非標(biāo)準(zhǔn)的服務(wù)從容器中可獲得。
為了保證ejb組件的可移植性和一致的行為,你應(yīng)該使用一個(gè)具有與java2平臺(tái)安全
策略集相一致的策略集的容器來測(cè)試ejb組件,并且其加強(qiáng)了前述的編程限制。
總結(jié)
ejb組件開發(fā)者應(yīng)該知道這些推薦的關(guān)于ejb組件的編程限制,明白它們的重要性,并且從組件的穩(wěn)定性和可移植性利益方面考慮來遵循它們。因?yàn)檫@些編程限制能阻止你使用標(biāo)準(zhǔn)的java語言的特點(diǎn),違背了這些編程限制在編譯時(shí)不會(huì)知道,并且加強(qiáng)這些限制也不是ejb容器的責(zé)任。所有這些原因都使你應(yīng)很小心地遵守這些編程限制,這些限制在組件的合同中已經(jīng)成為了一個(gè)條款,并且它們對(duì)于建造可靠的、可移植的組件是非常重要的。
2. 優(yōu)化ejb
entity bean為在應(yīng)用程序和設(shè)計(jì)中描述持久化商業(yè)對(duì)象(persistent business objec ts)提供了一個(gè)清晰的模型。在java對(duì)象模型中,簡(jiǎn)單對(duì)象通常都是以一種簡(jiǎn)單的方式進(jìn)行處理但是,很多商業(yè)對(duì)象所需要的事務(wù)化的持久性管理沒有得到實(shí)現(xiàn)。entity bean將持久化機(jī)制封裝在容器提供的服務(wù)里,并且隱藏了所有的復(fù)雜性。entity bean允許應(yīng)用程序操縱他們就像處理一個(gè)一般的java對(duì)象應(yīng)用。除了從調(diào)用代碼中隱藏持久化的形式和機(jī)制外,entity bean還允許ejb容器對(duì)對(duì)象的持久化進(jìn)行優(yōu)化,保證數(shù)據(jù)存儲(chǔ)具有開放性,靈活性,以及可部署性。在一些基于ejb技術(shù)的項(xiàng)目中,廣泛的使用oo技術(shù)導(dǎo)致了對(duì)entity bean的大量使用,sun的工程師們已經(jīng)積累了很多使用entity bean的經(jīng)驗(yàn),這篇文章就詳細(xì)闡述的這些卡發(fā)經(jīng)驗(yàn):
*探索各種優(yōu)化方法
*提供性能優(yōu)化和提高適用性的法則和建議
*討論如何避免一些教訓(xùn)。
法則1:只要可以,盡量使用cmp
cmp方式不僅減少了編碼的工作量,而且在container中以及container產(chǎn)生的數(shù)據(jù)庫訪問代碼中包括了許多優(yōu)化的可能。container可以訪問內(nèi)存緩沖中的bean,這就允許它可以監(jiān)視緩沖中的任何變化。這樣的話就在事物沒有提交之前,如果緩存的數(shù)據(jù)沒有變化就不用寫到數(shù)據(jù)庫中。就可以避免許多不必要的數(shù)據(jù)庫寫操作。另外一個(gè)優(yōu)化是在調(diào)用find方法的時(shí)候。通常情況下find方法需要進(jìn)行以下數(shù)據(jù)庫操作:
查找數(shù)據(jù)庫中的紀(jì)錄并且獲得主鍵
將紀(jì)錄數(shù)據(jù)裝入緩存
cmp允許將這兩步操作優(yōu)化為一步就可以搞定。[具體怎么做我也沒弄明白,原文沒有具體闡述]
法則2:寫代碼時(shí)盡量保證對(duì)bmp和cmp都支持
許多情況下,ejb的開發(fā)者可能無法控制他們寫的bean怎么樣被部署,以及使用的container是不是支持cmp.
一個(gè)有效的解決方案是,將商業(yè)邏輯的編碼完全和持久化機(jī)制分離。再cmp類中實(shí)現(xiàn)商業(yè)邏輯,然后再編寫一個(gè)bmp類,用該類繼承cmp類。這樣的話,所有的商業(yè)邏輯都在cmp類中,而持久化機(jī)制在bmp中實(shí)現(xiàn)。[我覺得這種情況在實(shí)際工作中很少遇到,但是作者解決問題的思路值得學(xué)習(xí)]
法則3:把ejbstore中的數(shù)據(jù)庫訪問減小到最少。
如果使用bmp,設(shè)置一個(gè)緩存數(shù)據(jù)改變標(biāo)志dirty非常有用。所有改變數(shù)據(jù)庫中底層數(shù)據(jù)的操作,都要設(shè)置dirty,而在ejbstore()中,首先檢測(cè)dirty的值,如果dirty的值沒有改變,表明目前數(shù)據(jù)庫中的數(shù)據(jù)與緩存的一致,就不必進(jìn)行數(shù)據(jù)庫操作了,反之,就要把緩存數(shù)據(jù)寫入數(shù)據(jù)庫。
法則4:總是將從lookup和find中獲得的引用進(jìn)行緩存。(cache)
引用緩存對(duì)session bean和entity bean 都是適用的。
通過jndi lookup獲得ejb資源。比如datasource,bean的引用等等都要付出相當(dāng)大的代價(jià)。因此應(yīng)該避免多余的lookup.可以這樣做:
將這些引用定義為實(shí)例變量。
從setentitycontext(session bean使用setsessioncontext)方法查找他們。setentitycontext方法對(duì)于一個(gè)bean實(shí)例只執(zhí)行一次,所有的相關(guān)引用都在這一次中進(jìn)行查找,這樣查找的代價(jià)就不是那么昂貴了。應(yīng)該避免在其他方法中查找引用。尤其是訪問數(shù)據(jù)庫的方法:ejbload()和ejbstore(),如果在這些頻繁調(diào)用的方法中進(jìn)行datasource的查找,勢(shì)必造成時(shí)間的浪費(fèi)。
調(diào)用其他entity bean的finder方法也是一種重量級(jí)的調(diào)用。多次調(diào)用finder()方法的代價(jià)非常高。如果這種引用不適合放在setentitycontext這樣的初始化時(shí)執(zhí)行的方法中執(zhí)行,就應(yīng)該在適當(dāng)?shù)臅r(shí)候緩存finder的執(zhí)行結(jié)果。只是要注意的是,如果這個(gè)引用只對(duì)當(dāng)前的entity有效,你就需要在bean從緩沖池中取出來代表另外一個(gè)實(shí)體時(shí)清除掉這些引用。,這些操作應(yīng)該在ejbactivate()中進(jìn)行。
法則5:總是使用prepare statements
這條優(yōu)化法則適用于所有訪問關(guān)系數(shù)據(jù)庫的操作。
數(shù)據(jù)庫在處理每一個(gè)sql statement的時(shí)候,執(zhí)行前都要對(duì)statement進(jìn)行編譯。一些數(shù)據(jù)庫具有緩存statement和statement的編譯后形式的功能。數(shù)據(jù)庫可以把新的statement和緩存中的進(jìn)行匹配。然而,如果要使用這一優(yōu)化特性,新的statement要必須和緩存中的statement完全匹配。
對(duì)于non-prepared statement,數(shù)據(jù)和statement本身作為一個(gè)字符串傳遞,這樣由于前后調(diào)用的數(shù)據(jù)不同而不能匹配,就導(dǎo)致無法使用這種優(yōu)化。而對(duì)于prepared statement,數(shù)據(jù)和statement是分開傳遞給數(shù)據(jù)庫的,這樣statement就可以和cache中已編譯的statement進(jìn)行匹配。statement就不必每次都進(jìn)行編譯操作。從而使用該優(yōu)化屬性。
這項(xiàng)技術(shù)在一些小型的數(shù)據(jù)庫訪問中能夠減少statement將近90%的執(zhí)行時(shí)間。
法則6:完全關(guān)閉所有的statement
在編寫bmp的數(shù)據(jù)庫訪問代碼時(shí),記住一定要在數(shù)據(jù)庫訪問調(diào)用之后關(guān)閉statement,因?yàn)槊總(gè)打開的statement對(duì)應(yīng)于數(shù)據(jù)庫中的一個(gè)打開的游標(biāo)。
security
1.加密
對(duì)稱加密
(1)分組密碼
(2)流密碼
常用的對(duì)稱加密算法:
des和tripledes
blowww.weilaioem.comasterc ard 和visa 公司于1996 年發(fā)布,專家們認(rèn)為set 是保證用戶與商家在電子商務(wù)與在線交易中免受欺騙的重要手段。傳統(tǒng)的信用卡交易者總在擔(dān)心不誠(chéng)實(shí)的店員會(huì)將自己的信用卡號(hào)碼透露給他人,而在線交易也是如此,持卡者總在擔(dān)心服務(wù)器端的管理員會(huì)將信用卡號(hào)碼泄露出去,或者擔(dān)心黑客會(huì)在管理員不知情的情況下盜取信用卡號(hào)碼。事實(shí)上這些擔(dān)心都是必要的,而set 標(biāo)準(zhǔn)則可以保證用戶的信用卡號(hào)碼只傳送給信用卡公司進(jìn)行認(rèn)證,不會(huì)被系統(tǒng)管理員看到,也不會(huì)留在交易服務(wù)器的硬盤上給黑客以可乘之機(jī)。
5.pki
pki是一種易于管理的、集中化的網(wǎng)絡(luò)安全方案。它可支持多種形式的數(shù)字認(rèn)證: 數(shù)據(jù)加密、數(shù)字簽字、不可否認(rèn)、身份鑒別、密鑰管理以及交叉認(rèn)證等。pki可通過一個(gè)基于認(rèn)證的框架處理所有的數(shù)據(jù)加密和數(shù)字簽字工作。p ki標(biāo)準(zhǔn)與協(xié)議的開發(fā)迄今已有15年的歷史,目前的pki已完全可以向企業(yè)網(wǎng)絡(luò)提供有效的安全保障。
pki是一種遵循標(biāo)準(zhǔn)的密鑰管理平臺(tái),它能夠?yàn)樗芯W(wǎng)絡(luò)應(yīng)用透明地提供采用加密和數(shù)字簽名等密碼服務(wù)所必需的密鑰和證書管理。pki必須具有
1)ca、
2)證書庫、
3)密鑰備份及恢復(fù)系統(tǒng)、
4)證書作廢處理系統(tǒng)、
5)客戶端證書處理系統(tǒng)
等基本成分,構(gòu)建pki也將圍繞著這五大系統(tǒng)來構(gòu)建
一個(gè)pki由眾多部件組成,這些部件共同完成兩個(gè)主要功能:
1)為數(shù)據(jù)加密
2)創(chuàng)建數(shù)字認(rèn)證。
服務(wù)器(即后端)產(chǎn)品是這一系統(tǒng)的核心,這些數(shù)據(jù)庫管理著數(shù)字認(rèn)證、公共密鑰及專用密鑰( 分別用于數(shù)據(jù)的加密和解密)。
ca數(shù)據(jù)庫負(fù)責(zé)發(fā)布、廢除和修改x.509數(shù)字認(rèn)證信息,它裝有用戶的公共密鑰、證書有效期以及認(rèn)證功能(例如對(duì)數(shù)據(jù)的加密或?qū)?shù)字簽字的驗(yàn)證) 。為了防止對(duì)數(shù)據(jù)簽字的篡改,ca在把每一數(shù)字簽字發(fā)送給發(fā)出請(qǐng)求的客戶機(jī)之前,需對(duì)每一個(gè)數(shù)字簽字進(jìn)行認(rèn)證。一旦數(shù)字認(rèn)證得以創(chuàng)建, 它將會(huì)被自動(dòng)存儲(chǔ)于x.500目錄中,x.500目錄為樹形結(jié)構(gòu)。ldap(lightwww.weilaioem.compleaction());
...
}
}
public class jaasexampleaction implements privilegedaction {
public object run() {
filewww.weilaioem.comission"
name="com.ibm.security.sample.bid"
actions="create" />;
<permission classname=
"com.ibm.resource.security.auth.resourcepermission"
name="com.ibm.security.sample.bid"
actions="read" />;
<permission classname=
"com.ibm.resource.security.auth.resourcepermission"
name="com.ibm.security.sample.bid"
actions="www.weilaioem.com.ibm.resource.security.auth.resourcepermission 類保護(hù)敏感代碼。例如,auction 類擁有下列構(gòu)造函數(shù):
public auction() {
permission permission =
newww.weilaioem.comple.auction", "www.weilaioem.com.security.sample.auction", "accept", this);
accesscontroller.checkpermission(permission);
// sensitive code
this.accepted = flag;
}
public boolean fulfills(subject user, string relationship) {
if( relationship.equalsignorecase("auctionowww.weilaioem.com.resource.security.auth.policy 可以用于指定另一個(gè)不同的文件名和位置。
www.weilaioem.coml 文件未被修改時(shí),上述這些才都是真的。
示例安裝
下面的安裝指導(dǎo)假設(shè)您正在使用 jdk 1.3 并且已經(jīng)把文件解壓縮到 d:jaasexample 目錄。通過將文件解壓縮到這個(gè)目錄,您可以省去一些工作;否則您就必須使用正確的路徑名修改 policy 和 resourcesecurity.xml 策略文件。
下面是運(yùn)行該示例需要做的工作:
下載這個(gè)示例的源文件。
把 jaas.jar 和 jaasmod.jar 復(fù)制到 jdk jrelibext 目錄(即 d:jdk1.3jrelibext)。
向位于 jdk 的 jrelibsecurity 目錄(即 d:jdk1.3jrelibsecurity)中的 java.security 文件的末尾添加下面的字符串:auth.policy.provider=com.ibm.resource.security.auth.xmlpolicyfile。
執(zhí)行 run.bat 文件。
結(jié)束語
類實(shí)例級(jí)授權(quán)把訪問控制分離到一個(gè)通用框架(該框架使用基于所有權(quán)和特定關(guān)系的策略)中。然后管理員可以在應(yīng)用程序的生命周期內(nèi)更改這些策略。用這種方法擴(kuò)展 jaas 減少了您或另一個(gè)程序員必須在應(yīng)用程序生命周期內(nèi)業(yè)務(wù)規(guī)則發(fā)生更改時(shí)重寫代碼的可能性。
通過將關(guān)系字符串抽象為類可以進(jìn)一步擴(kuò)展特定關(guān)系這個(gè)概念。不調(diào)用 resource 實(shí)現(xiàn)類的 fulfills(subject user, string relationship) 方法,而只要調(diào)用 relationship 實(shí)現(xiàn)類中定義的新 fulfills(subject user, resource resource) 方法。這樣就會(huì)允許許多 resource 實(shí)現(xiàn)類使用相同的關(guān)系邏輯。
6.java的安全性
1. the security manager是一個(gè)application-www.weilaioem.comanager (jdbc 1.0) 接口,j2ee 組件可以獲得物理數(shù)據(jù)庫連接對(duì)象(connection)。要獲得邏輯(合用的)連接,j2ee 組件必須使用以下這些 jdbc 2.0 合用管理器接口:
javax.sql.connectionpooldatasource 接口,該接口充當(dāng)合用的 java.sql.connection 對(duì)象的資源管理器連接 factory。每家數(shù)據(jù)庫服務(wù)器供應(yīng)商都提供該接口的實(shí)現(xiàn)
(例如,oracle 實(shí)現(xiàn) oracle.jdbc.pool.oracleconnectionpooldatasource 類)。
javax.sql.pooledconnection 接口,該接口封裝到數(shù)據(jù)庫的物理連接。同樣,數(shù)據(jù)庫供應(yīng)商提供其實(shí)現(xiàn)。
對(duì)于那些接口和 xa 連接的每一個(gè),都存在一個(gè) xa(x/open 規(guī)范)等價(jià)定義。
2. resultset
在jdbc2.0中,為了獲得一個(gè)uptatable result,在query語句里必須包含primarykey,并且查詢的內(nèi)容里必須來自一個(gè)table
ava.sql.resultset接口中定義了三種類型的結(jié)果集
type_forwww.weilaioem.comanager 的規(guī)范。
javatransaction service (jts) specifies the implementation of a transaction manager www.weilaioem.comport java.awww.weilaioem.com.*;
public class mousetest
{
public static void main(string[] args)
{
mouseframe frame=newww.weilaioem.comove(rectangle2d s)
{
if(s==null) return;
if(s==current) current=null;
squares.remove(s);
repaint();
}
private static final int side_length=20;//正方形的邊長(zhǎng)
private arraylist<rectangle2d> squares;//存放所有已繪制的方塊(鼠標(biāo)有效繪制路徑)
private rectangle2d current;//當(dāng)前需要繪制的方塊
private class mousehandler extends mouseadapter
{
/*
* 當(dāng)鼠標(biāo)按鈕被按下時(shí),先查找當(dāng)前點(diǎn)是否已經(jīng)包含在前期圖新內(nèi),* 否,則添加至數(shù)組列表
*/
public void mousepressed(mouseevent event)
{
current=find(event.getpoint());
if(current==null)
add(event.getpoint());
}
/*
* 處理鼠標(biāo)點(diǎn)擊事件,如果當(dāng)前點(diǎn)包含于圖形之中,且鼠標(biāo)連續(xù)點(diǎn)擊兩次以上,則擦除該圖形。
*/
public void mouseclicked(mouseevent event)
{
current=find(event.getpoint());
if(current!=null && event.getclickcount()>=2)
remove(current);
}
}
private class mousemotionhandler implements mousemotionlistener
{
/*
* 改變鼠標(biāo)形狀
h);*/public void mousemoved(mouseevent event){if(find(event.getpoint())==null)setcursor(cursor.getdefaultcursor());elsesetcursor(cursor.getpredefinedcursor(cursor.crosshair_cursor));}/** 拖動(dòng)圖形*/public void mousedragged(mouseevent event){if(current!=null){int x=event.getpoint().x;int y=event.getpoint().y;current.setframe(x-side_length/2,y-side_length/2,side_length,side_lengt
}}}} repaint();
第三篇:關(guān)于java學(xué)習(xí)的一點(diǎn)心得體會(huì)
管理科學(xué)與工程學(xué)院11信管2班孫鑫201*4548
關(guān)于java學(xué)習(xí)的一點(diǎn)心得體會(huì)
我是學(xué)信管專業(yè)的,這學(xué)期除了學(xué)習(xí)了java軟件開發(fā)綜合實(shí)驗(yàn)這門選修課外,還有自己本專業(yè)要學(xué)的java面向?qū)ο蟮某绦蛟O(shè)計(jì)。學(xué)習(xí)了近一學(xué)期的java課程,覺得是該總結(jié)自己的心得體會(huì)了。開始學(xué)習(xí)任何一門課(包括java),興趣最重要。一直覺得自己在學(xué)習(xí)了計(jì)算機(jī)編程語言(也就是c語言),學(xué)到了很多東西,再學(xué)習(xí)java的話,應(yīng)該問題不大,但在學(xué)習(xí)了幾個(gè)星期后,還是明確感到了,有點(diǎn)吃力,于是趁學(xué)校開設(shè)這門選修課,并且有自己院的老師講解,還有了上機(jī)的機(jī)會(huì),比自己自學(xué)省事多了,于是鼓足信心,開始了漫長(zhǎng)的java征途。
還記得我編寫的第一個(gè)程序是簡(jiǎn)單的輸出程序。當(dāng)時(shí)自己不是很理解為什么main方法要這樣來定義public static void main(string[] args),問了好多同學(xué),他們告訴我的答案是一樣的“java本身要求就是這樣子的”,但我自己不甘心,就自己進(jìn)行了探索:把main改個(gè)名字運(yùn)行一下,看看報(bào)什么錯(cuò)誤,然后根據(jù)出錯(cuò)信息進(jìn)行分析;把main的public取掉,在試試看,報(bào)什么錯(cuò)誤;static去掉還能不能運(yùn)行;不知道m(xù)ain方法是否一定要傳一個(gè)string[]數(shù)組的,把string[]改掉,改成int[],或者string試試看;不知道是否必須寫args參數(shù)名稱的,也可以把a(bǔ)rgs改成別的名字,看看運(yùn)行結(jié)果如何。 結(jié)果一個(gè)簡(jiǎn)單程序反復(fù)改了七八次,不斷運(yùn)行,分析運(yùn)行結(jié)果,最后就徹底明白為什么了main方法是這 1
樣定義的了。接著在以后的學(xué)習(xí)中我也采用這樣的方法解決問題,卻發(fā)現(xiàn)自己的速度比別人慢了好多,我就把自己的課余時(shí)間也分一部分給了java。
因?yàn)榛A(chǔ)是最重要的,只有基礎(chǔ)牢固才有可能對(duì)后面的學(xué)習(xí)有更加深刻的認(rèn)識(shí)!
學(xué)習(xí)一門新的語言,參考書是離不開的。聽專業(yè)課老師說訂的教材偏難,不適合我們初學(xué)者,于是我在圖書館借了本參考書(一本篇幅較短的入門書來學(xué)習(xí)那些最簡(jiǎn)單、最基本的東西,包括學(xué)習(xí)java語法等)。同時(shí),對(duì)一個(gè)最簡(jiǎn)單的程序也應(yīng)該多去調(diào)試,多想想如果改動(dòng)一下會(huì)出現(xiàn)什么結(jié)果?為什么必須那樣寫?多去想想這些問題然后去操作,會(huì)讓你有更多的收獲。這樣反復(fù)地思考是很有用的。
在學(xué)習(xí)java的語法時(shí),java的語法是類似c語言的,所以學(xué)習(xí)的比較輕松。唯一需要注意的是有幾個(gè)不容易搞清楚的關(guān)鍵字的用法,public,protected,private,static,什么時(shí)候用,為什么要用,怎么用,和同學(xué)一起討論了好久才得以解決。
在學(xué)習(xí)java的面向?qū)ο蟮木幊陶Z言的特性。比如繼承,抽象類,方法的多態(tài),重載,覆蓋。對(duì)于一個(gè)沒有面向?qū)ο笳Z言背景的人來說,我覺得這個(gè)過程需要花很長(zhǎng)很長(zhǎng)時(shí)間,因?yàn)閷W(xué)習(xí)java之前沒有c++的經(jīng)驗(yàn),只有c語言的經(jīng)驗(yàn),花了很長(zhǎng)時(shí)間,才徹底把這些概念都搞清楚,把書上面的例子反復(fù)的揣摩,修改,嘗試,把那幾章內(nèi)容反復(fù)的看過來,看過去,看了很多遍,才徹底領(lǐng)悟了。
此外,我對(duì)于static,public,private等等一開始都不是很懂,
都是把書上面的例子運(yùn)行成功,然后就開始破壞它,不斷的根據(jù)自己心里面的疑問來重新改寫程序,看看能不能運(yùn)行,運(yùn)行出來是個(gè)什么樣子,是否可以得到預(yù)期的結(jié)果。這樣雖然比較費(fèi)時(shí)間,不過一個(gè)例子程序這樣反復(fù)破壞幾次之后。我就對(duì)這個(gè)相關(guān)的知識(shí)徹底學(xué)通了。有時(shí)候甚至故意寫一些錯(cuò)誤的代碼來運(yùn)行,看看能否得到預(yù)期的運(yùn)行錯(cuò)誤。這樣對(duì)于編程的掌握是及其深刻的。
在學(xué)習(xí)java的過程中我得出這樣的結(jié)論:
1.學(xué)習(xí)中,要養(yǎng)成良好的習(xí)慣(寫括號(hào)時(shí)要成對(duì),字母大小寫要區(qū)分,單詞拼寫要準(zhǔn)確)。
2.在學(xué)習(xí)的過程中,最好不是僅僅停留在java表層,不是抄書上的例子運(yùn)行出結(jié)果就可以。要注意,即便對(duì)一個(gè)簡(jiǎn)單的例子也要有耐心去琢磨、調(diào)試、改動(dòng)。
3.在學(xué)習(xí)的過程中一定要?jiǎng)邮肿、試著寫代碼,而不是抱一本書看看就行。很多東西和體會(huì)必須自己動(dòng)手才能真正屬于自己。
4. 在 java 的學(xué)習(xí)過程中,可能會(huì)遇到形形色色的問題不容易解決,應(yīng)多去專業(yè)論壇了解相關(guān)的知識(shí),書本上的知識(shí)有限。要會(huì)從網(wǎng)上搜索有用的信息 加以整理,促進(jìn)學(xué)習(xí)的深入和知識(shí)水平的提高。
看了好多網(wǎng)上課程,說學(xué)到一定程度要嘗試著自己做東西,但覺得自己僅僅經(jīng)過一學(xué)期的學(xué)習(xí),還遠(yuǎn)遠(yuǎn)不夠,希望自己在以后學(xué)習(xí)中繼續(xù)努力,能夠真真正正擁有一門編程語言,對(duì)自己今后的發(fā)展起到作用。
第四篇:java學(xué)習(xí)心得
java學(xué)習(xí)心得
一、 如何學(xué)好java??
1. 就本人認(rèn)為學(xué)好java關(guān)鍵就在于態(tài)度。態(tài)度是學(xué)習(xí)好java的前
提,積極的態(tài)度注定你就比別人學(xué)得認(rèn)真,自然最終學(xué)的一定
比不認(rèn)真的人學(xué)的好!
2. 有良好的前提,不努力也不行的,所以呀!還得練習(xí)。要做到
常練習(xí),多看,多思考(舉一反三,多方位的,全面的使你的
程序更加的完美);
3. 最后一點(diǎn),就是多多交流!閉門造車永遠(yuǎn)是落后的學(xué)習(xí)方式,
所以好要和身邊的一切可以交流技術(shù)的人積極交流,畢竟個(gè)人
的力量有限的!
二、 java中那些重要知識(shí)點(diǎn)。。ū救苏J(rèn)為最主要的是思想,
知識(shí)點(diǎn)也很重要,關(guān)鍵是在學(xué)習(xí)中總結(jié)出自己的一套思想,好的槍手都是子彈喂出來的,好的程序員都是寫代
碼寫出來的)
1. java數(shù)據(jù)類型
a) 基本數(shù)據(jù)類型:byte、short、int、long、float、double、char、
boolean(注意各自的取值范圍,還有轉(zhuǎn)換方式)
b) 引用數(shù)據(jù)類型: 數(shù)組、類、接口。
2. 運(yùn)算符號(hào)
a) 算術(shù)運(yùn)算符:+、 - 、* 、/ 、 %、++、--;
b) 賦值運(yùn)算符:=、+= 、-= 、*= 、/=、%=;
c) 比較運(yùn)算符:<、>、=<、=>、!=;(返回值都是false/true) d) 邏輯運(yùn)算符:&&、||、!
e) 位運(yùn)算符:用于操作二進(jìn)制位的運(yùn)算符:<<、>>、>>>……
4. 基本數(shù)據(jù)結(jié)構(gòu):
a) 順序結(jié)構(gòu)
b) 選擇結(jié)構(gòu)(if……else……,swww.weilaioem.com$的代碼封鎖,所以轉(zhuǎn)投java了。
學(xué)習(xí)java已經(jīng)8個(gè)月了,在這里跟大家說下心得,我剛開始是看<<thinking in java>> 第三版,因?yàn)閷W(xué)校沒開java課,所以幾乎全是自學(xué),用了將近二個(gè)月的時(shí)間把這本大書啃完,感覺這書不錯(cuò),但也有很多人說這書不好,的確這書不是按常規(guī)的順序講的,內(nèi)容跳躍性強(qiáng),但講的很深入,比較適合有cc++基礎(chǔ)的人看,這書看完,你就算基本掌握 java的基礎(chǔ)了,也就j2se部分。
現(xiàn)在java分三大部分基礎(chǔ),從大到小排列:j2ee, j2se, j2me!
j2ee:這個(gè)就是現(xiàn)在最流行,也很java技術(shù)用的最多的地方,java企業(yè)應(yīng)用,要學(xué)好它,首先就要有java的基礎(chǔ),這是最基本的,然后學(xué)習(xí)servlet,jsp,javabean以及基本的mvc結(jié)構(gòu),當(dāng)然還有其他輔助知識(shí),比如js,html還有一個(gè)對(duì)數(shù)據(jù)庫的操作,這些都需要時(shí)間來學(xué)習(xí),學(xué)完這些后基本就可以做些簡(jiǎn)單的www.weilaioem.coml語句和應(yīng)用都很好的結(jié)合,除了web方面,軟件項(xiàng)目方面有沒有一個(gè)比較明確的方向,如果有,可以告之小弟么~
2.我聽說做web方面,應(yīng)該先學(xué)jsp,html,再學(xué)mvc,不然很容易本末倒置,那ssh這樣的技術(shù)學(xué)習(xí),有沒有一個(gè)比較明確的先后順序。
3.java ee這樣的一個(gè)學(xué)習(xí)過程,能不能有一個(gè)比較好學(xué)習(xí)心得可以推薦。我有一定的java基礎(chǔ),可以編寫一些java小程序,但是到了web這些方面,思維總是不夠清晰,很容易混亂,對(duì)象方法和類之間總是不能很好的去擴(kuò)展。希望各位幫幫忙,介紹一些學(xué)習(xí)心得,包括學(xué)習(xí)java技術(shù)的順序,并推薦一些書吧。
來源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問題,請(qǐng)聯(lián)系我們及時(shí)刪除。