j2ee學習筆記
注:框架可以用m.seogis.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
默認的,每一個servlet definition in a container只有一個servlet class的實例。
只有實現(xiàn)了singlethreadmodel,container才會讓servlet有多個實例。
servlet specification上建議,不要使用synchronized,而使用singlethreadmodel。
singlethreadmodel(沒有方法)
保證servlet在同一時刻只處理一個客戶的請求。
singlethreadmodel是耗費資源的,特別是當有大量的請求發(fā)送給servlet時,singlethreadmodel的作用是使包容器以同步時鐘的方式調(diào)用service方法。
這等同于在servlet的service()方法種使用synchronized.
single thread model一般使用在需要響應一個heavy request的時候,比如是一個需要和數(shù)據(jù)庫打交道的連接。
2. 在重載servlet地init( )方法后,一定要記得調(diào)用super.init( );
3. the client通過發(fā)送一個blank line表示它已經(jīng)結束request
而the server通過關閉the socket來表示response已結束了。
4. 一個http servlet可以送三種東西給client
1) a single status code
2) any number of http headers
3) a response body
5. servlet之間信息共享的一個最簡單的方法就是
system.getproperties().put(“key”,”value”);
6. post和get
post:將form內(nèi)各字段名稱和內(nèi)容放置在html header內(nèi)傳送給server
get:?之后的查詢字符串要使用urlencode,經(jīng)過urlencode后,這個字符串不再帶有空格,以后將在server上恢復所帶有的空格。
get是m.seogis.com中,可以通過serveltcontext的
setattribute( )
getattribute( )
removeattribute( )
來共享對象
10. 利用request.getparameter( )得到的string存在字符集問題。
可以用strtitle = request.getparameter(“title”);
strtitle = nem.seogis.coment is the start tag, the end tag,and everything (including other elements) in betm.seogis.com/stockquote.m.seogis.coma targetnamespace=http://example.com/stockquote.xsd
xmlns="http://m.seogis.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/"
關。
以下是你應該回避使用的一些java特色,并且在你的ejb組件的實現(xiàn)代碼中要嚴格限
制它們的使用:
1.使用static,非final 字段。建議你在ejb組件中把所有的static字段都聲明為final型的。這樣可以保證前后一致的運行期語義,使得ejb容器有可以在多個java虛擬機之間分發(fā)組件實例的靈活性。
2.使用線程同步原語來同步多個組件實例的運行。避免這個問題,你就可以使ejb容器靈活的在多個java虛擬機之間分發(fā)組件實例。
3.使用am.seogis.com.netpermission,java.io.reflect.reflectpermission,java.lang.security.securitypermission,以便加強先前所列出的編程限制。
許多ejb容器沒有加強這些限制,他們希望ejb組件開發(fā)者能遵守這些編程限制或者是帶有冒險想法違背了這些限制。違背這些限制的ejb組件,比標準方法依賴過多或過少的安全許可,都將很少能在多個ejb容器間移植。另外,代碼中都將隱藏著一些不確定的、難以預測的問題。所有這些都足以使ejb組件開發(fā)者應該知道這些編程限制,同時也應該認真地遵守它們。
任何違背了這些編程限制的ejb組件的實現(xiàn)代碼在編譯時都不能檢查出來,因為這些特點都是java語言和j2se中不可缺少的部分。
對于ejb組件的這些限制同樣適用于ejb組件所使用的幫助/訪問(helper/access)類,j2ee應用程序使用java文檔(jar)文件格式打包到一個帶.ear(代表enterprise archive)擴展名的文件中,這個ear文件對于發(fā)送給文件部署器來說是標準的格式。ear文件中包括在一個或多個ejb-jar文件中的ejb組件,還可能有ejb-jar所依賴的庫文件。所有ear文件中的代碼都是經(jīng)過深思熟慮開發(fā)的應用程序并且都遵守編程限制和訪問許可集。
未來版本的規(guī)范可能會指定通過部署工具來定制安全許可的能力,通過這種方法指定了一個合法的組件應授予的許可權限,也指定了一個標準方法的需求:如從文件系統(tǒng)中讀文件應有哪些要求。一些ejb容器/服務器目前在它們的部署工具中都提供了比標準權限或多或少的許可權限,這些并不是ejb1.1規(guī)范中所需要的。
理解這些約束
ejb容器是ejb組件生存和執(zhí)行的運行期環(huán)境,ejb容器為ejb組件實例提供了一些服務如:事務管理、安全持久化、資源訪問、客戶端連接。ejb容器也負責ejb組件實例整個生命期的管理、擴展問題以及并發(fā)處理。所以,ejb組件就這樣寄居在一個被管理的執(zhí)行環(huán)境中--即ejb容器。
因為ejb容器完全負責ejb組件的生命期、并發(fā)處理、資源訪問、安全等等,所以與容器本身的鎖定和并發(fā)管理相沖突的可能性就需要消除,許多限制都需要使用來填上潛在的安全漏洞。除了與ejb容器責任與安全沖突的問題,ejb組件還意味著僅僅聚焦于商務邏輯,它依賴于ejb容器所提供的服務而不是自己來直接解決底層的系統(tǒng)層的問題。
可能的問題
通常,ejb組件在容器之間的移植不可避免地與如下問題相關:
1.它需要依靠的受限制的特點在特定ejb容器中沒有得到加強。
2.它需要依靠的非標準的服務從容器中可獲得。
為了保證ejb組件的可移植性和一致的行為,你應該使用一個具有與java2平臺安全
策略集相一致的策略集的容器來測試ejb組件,并且其加強了前述的編程限制。
總結
ejb組件開發(fā)者應該知道這些推薦的關于ejb組件的編程限制,明白它們的重要性,并且從組件的穩(wěn)定性和可移植性利益方面考慮來遵循它們。因為這些編程限制能阻止你使用標準的java語言的特點,違背了這些編程限制在編譯時不會知道,并且加強這些限制也不是ejb容器的責任。所有這些原因都使你應很小心地遵守這些編程限制,這些限制在組件的合同中已經(jīng)成為了一個條款,并且它們對于建造可靠的、可移植的組件是非常重要的。
2. 優(yōu)化ejb
entity bean為在應用程序和設計中描述持久化商業(yè)對象(persistent business objec ts)提供了一個清晰的模型。在java對象模型中,簡單對象通常都是以一種簡單的方式進行處理但是,很多商業(yè)對象所需要的事務化的持久性管理沒有得到實現(xiàn)。entity bean將持久化機制封裝在容器提供的服務里,并且隱藏了所有的復雜性。entity bean允許應用程序操縱他們就像處理一個一般的java對象應用。除了從調(diào)用代碼中隱藏持久化的形式和機制外,entity bean還允許ejb容器對對象的持久化進行優(yōu)化,保證數(shù)據(jù)存儲具有開放性,靈活性,以及可部署性。在一些基于ejb技術的項目中,廣泛的使用oo技術導致了對entity bean的大量使用,sun的工程師們已經(jīng)積累了很多使用entity bean的經(jīng)驗,這篇文章就詳細闡述的這些卡發(fā)經(jīng)驗:
*探索各種優(yōu)化方法
*提供性能優(yōu)化和提高適用性的法則和建議
*討論如何避免一些教訓。
法則1:只要可以,盡量使用cmp
cmp方式不僅減少了編碼的工作量,而且在container中以及container產(chǎn)生的數(shù)據(jù)庫訪問代碼中包括了許多優(yōu)化的可能。container可以訪問內(nèi)存緩沖中的bean,這就允許它可以監(jiān)視緩沖中的任何變化。這樣的話就在事物沒有提交之前,如果緩存的數(shù)據(jù)沒有變化就不用寫到數(shù)據(jù)庫中。就可以避免許多不必要的數(shù)據(jù)庫寫操作。另外一個優(yōu)化是在調(diào)用find方法的時候。通常情況下find方法需要進行以下數(shù)據(jù)庫操作:
查找數(shù)據(jù)庫中的紀錄并且獲得主鍵
將紀錄數(shù)據(jù)裝入緩存
cmp允許將這兩步操作優(yōu)化為一步就可以搞定。[具體怎么做我也沒弄明白,原文沒有具體闡述]
法則2:寫代碼時盡量保證對bmp和cmp都支持
許多情況下,ejb的開發(fā)者可能無法控制他們寫的bean怎么樣被部署,以及使用的container是不是支持cmp.
一個有效的解決方案是,將商業(yè)邏輯的編碼完全和持久化機制分離。再cmp類中實現(xiàn)商業(yè)邏輯,然后再編寫一個bmp類,用該類繼承cmp類。這樣的話,所有的商業(yè)邏輯都在cmp類中,而持久化機制在bmp中實現(xiàn)。[我覺得這種情況在實際工作中很少遇到,但是作者解決問題的思路值得學習]
法則3:把ejbstore中的數(shù)據(jù)庫訪問減小到最少。
如果使用bmp,設置一個緩存數(shù)據(jù)改變標志dirty非常有用。所有改變數(shù)據(jù)庫中底層數(shù)據(jù)的操作,都要設置dirty,而在ejbstore()中,首先檢測dirty的值,如果dirty的值沒有改變,表明目前數(shù)據(jù)庫中的數(shù)據(jù)與緩存的一致,就不必進行數(shù)據(jù)庫操作了,反之,就要把緩存數(shù)據(jù)寫入數(shù)據(jù)庫。
法則4:總是將從lookup和find中獲得的引用進行緩存。(cache)
引用緩存對session bean和entity bean 都是適用的。
通過jndi lookup獲得ejb資源。比如datasource,bean的引用等等都要付出相當大的代價。因此應該避免多余的lookup.可以這樣做:
將這些引用定義為實例變量。
從setentitycontext(session bean使用setsessioncontext)方法查找他們。setentitycontext方法對于一個bean實例只執(zhí)行一次,所有的相關引用都在這一次中進行查找,這樣查找的代價就不是那么昂貴了。應該避免在其他方法中查找引用。尤其是訪問數(shù)據(jù)庫的方法:ejbload()和ejbstore(),如果在這些頻繁調(diào)用的方法中進行datasource的查找,勢必造成時間的浪費。
調(diào)用其他entity bean的finder方法也是一種重量級的調(diào)用。多次調(diào)用finder()方法的代價非常高。如果這種引用不適合放在setentitycontext這樣的初始化時執(zhí)行的方法中執(zhí)行,就應該在適當?shù)臅r候緩存finder的執(zhí)行結果。只是要注意的是,如果這個引用只對當前的entity有效,你就需要在bean從緩沖池中取出來代表另外一個實體時清除掉這些引用。,這些操作應該在ejbactivate()中進行。
法則5:總是使用prepare statements
這條優(yōu)化法則適用于所有訪問關系數(shù)據(jù)庫的操作。
數(shù)據(jù)庫在處理每一個sql statement的時候,執(zhí)行前都要對statement進行編譯。一些數(shù)據(jù)庫具有緩存statement和statement的編譯后形式的功能。數(shù)據(jù)庫可以把新的statement和緩存中的進行匹配。然而,如果要使用這一優(yōu)化特性,新的statement要必須和緩存中的statement完全匹配。
對于non-prepared statement,數(shù)據(jù)和statement本身作為一個字符串傳遞,這樣由于前后調(diào)用的數(shù)據(jù)不同而不能匹配,就導致無法使用這種優(yōu)化。而對于prepared statement,數(shù)據(jù)和statement是分開傳遞給數(shù)據(jù)庫的,這樣statement就可以和cache中已編譯的statement進行匹配。statement就不必每次都進行編譯操作。從而使用該優(yōu)化屬性。
這項技術在一些小型的數(shù)據(jù)庫訪問中能夠減少statement將近90%的執(zhí)行時間。
法則6:完全關閉所有的statement
在編寫bmp的數(shù)據(jù)庫訪問代碼時,記住一定要在數(shù)據(jù)庫訪問調(diào)用之后關閉statement,因為每個打開的statement對應于數(shù)據(jù)庫中的一個打開的游標。
security
1.加密
對稱加密
(1)分組密碼
(2)流密碼
常用的對稱加密算法:
des和tripledes
blom.seogis.comdash;—ssl(se cure socketslayer),并且已經(jīng)幾乎成為了目前m.seogis.comanager,并且 logincontext 已經(jīng)認證了一個帶有名為“admin”的 com.ibm.resource.security.auth.principalexample 主體的 subject。
清單 4. 一個簡單的授權請求
public class jaasexample {
public static void main(string[] args) {
...
// m.seogis.compleaction 類中。還要注意,調(diào)用類不要求為 jaasexampleaction 類代碼源授予許可權,因為它實現(xiàn)了一個 privilegedaction。
擴展 jaas
大多數(shù)應用程序都有定制邏輯,它授權用戶不僅僅在類上執(zhí)行操作,而且還在該類的實例上執(zhí)行操作。這種授權通常建立在用戶和實例之間的關系上。這是 jaas 的一個小缺點。然而,幸運的是,這樣設計 jaas 使得 jaas 可以擴展。只要做一點工作,我們將可以擴展 jaas,使其包含一個通用的、類實例級的授權框架。
在文章開頭處我已經(jīng)說明了,抽象類 javax.security.auth.policy 被用于代表 jaas 安全性策略。它的缺省實現(xiàn)是由 com.sun.security.auth.policyfile 類提供。policyfile 類從 jaas 格式的文件(象清單 3 中顯示的那個一樣)中讀取策略。
我們需要向這個文件添加一個東西為類實例級授權擴展策略定義:一個與許可權語句相關的可選關系參數(shù)。
缺省 jaas 許可權語句的格式如下:
permission <permission implementation class>; [name], [actions];
我們在這個許可權語句的末尾添加一個可選的關系參數(shù)來完成策略定義。下面是新許可權語句的格式:
permission <permission implementation class>;
[name], [actions], [relationship];
在為類實例級授權擴展 jaas 時要注意的最重要的一點是:許可權實現(xiàn)類必須有一個帶三個參數(shù)的構造函數(shù)。第一個參數(shù)是名稱參數(shù),第二個是行為參數(shù),最后一個是關系參數(shù)。
解析新文件格式
既然文件格式已經(jīng)改變,就需要一個新的 javax.security.auth.policy 子類來解析文件。
為簡單起見,我們的示例使用了一個新的 javax.security.auth.policy 子類 com.ibm.resource.security.auth.xmlpolicyfile,來從 xml 文件讀取策略。在實際的企業(yè)應用程序中,關系數(shù)據(jù)庫更適合執(zhí)行這個任務。
使用 xmlpolicyfile 類代替缺省的 jaas 訪問控制策略實現(xiàn)的最容易的方法是向 java.security 屬性文件添加 auth.policy.provider=com.ibm.resource.security.auth.xmlpolicyfile 條目。java.security 屬性文件位于 java 2 平臺運行時的 lib/security 目錄下。清單 5 是與 xmlpolicyfile 類一起使用的樣本 xml 策略文件:
清單 5. 一個 xml 策略文件
<?xml version="1.0"?>;
<policy>;
<grant codebase="file:/d:/sample_actions.jar">;
<principal classname=
"com.ibm.resource.security.auth.principalexample" name="users">;
<permission classname=
"com.ibm.resource.security.auth.resourcepermission"
name="com.ibm.security.sample.auction"
actions="create" />;
<permission classname=
"com.ibm.resource.security.auth.resourcepermission"
name="com.ibm.security.sample.auction"
actions="read" />;
<permission classname=
"com.ibm.resource.security.auth.resourcepermission"
name="com.ibm.security.sample.auction"
actions="m.seogis.comission"
name="com.ibm.security.sample.bid"
actions="accept"
relationship="actionom.seogis.comple.auction", "create");
accesscontroller.checkpermission(permission);
}
所有者關系
resourcepermission 類的 implies(permission p) 方法是這個框架的關鍵。implies() 方法就等同性比較名稱和行為屬性。如果定義了一個關系,那么必須把受保護的類實例(resource)傳遞到 resourcepermission 構造函數(shù)中。resourcepermission 類理解所有者關系。它將類實例的所有者與執(zhí)行代碼的 subject(用戶)進行比較。特定關系被委托給受保護類的 fulfills() 方法。
例如,在清單 5 中所示的 xml 策略文件中,只有 auction 類實例的所有者可以更新(寫)文件。該類的 setter 方法使用清單 6 中顯示的保護代碼:
清單 6. 運行中的 implies(permission) 方法
public void setname(string nem.seogis.come = nem.seogis.come().equals(auctionom.seogis.comple.jar
exampleactions.jar
resourcesecurity.jar 文件包含允許實例級訪問控制的 jaas 擴展框架。它還包含一個 loginmoduleexample 類,這個類從 xml 文件讀取用戶認證信息。用戶標識和密碼存儲在 users.xml 文件中。用戶組存儲在 groups.xml 文件中。關于 loginmoduleexample 的更多信息,請參閱參考資料部分。
該示例包含四個附加的文件:
login.conf
policy
resourcepolicy.xml
run.bat
在試圖運行這個示例程序之前,請確保更新了 run.bat、policy 和 resourcepolicy.xml 文件中的路徑。缺省情況下,所有的密碼都是“passm.seogis.comanager)
每個java application都可以有自己地security manager,但是默認地java application沒有一個security manager
可以通過下面地代碼得到一個security manager
try
{
system.setsecuritymanager(nem.seogis.come%/jre/lib/ext/*.jar
如果光copy不ren為.jar是沒有用的。
4. 事務處理
本地事務
java.sql.connection接口可以控制事務邊界(即開始和結束)。
在事務開始的時候調(diào)用setautocommit( false ), 而在中止事務時調(diào)用rollback或commit()方法。這類事務叫本地事務。
分布式事務
但是,在特定的情況下,可能有多個客戶(例如兩個不同的servlet或ejb組件)參與了同一個事務。
或者,客戶在同一個事務中可能會執(zhí)行跨越多個數(shù)據(jù)庫的數(shù)據(jù)庫操作。
jdbc2.0 optional package 同jta一起來實現(xiàn)分布式樣事務。
5. 一些技巧
檢索自動產(chǎn)生的關鍵字
為了解決對獲取自動產(chǎn)生的或自動增加的關鍵字的值的需求,jdbc 3.0 api 現(xiàn)在將獲取這種值變得很輕松。要確定任何所產(chǎn)生的關鍵字的值,只要簡單地在語句的 execute() 方法中指定一個可選的標記,表示您有興趣獲取產(chǎn)生的值。您感興趣的程度可以是 statement.return_generated_keys,也可以是 statement.no_generated_keys。在執(zhí)行這條語句后,所產(chǎn)生的關鍵字的值就會通過從 statement 的實例方法 getgeneratedkeys() 來檢索 resultset 而獲得。resultset 包含了每個所產(chǎn)生的關鍵字的列。清單 1 中的示例創(chuàng)建一個新的作者并返回對應的自動產(chǎn)生的關鍵字。
清單 1. 檢索自動產(chǎn)生的關鍵字
statement stmt = conn.createstatement();
// obtain the generated key that results from the query.
stmt.executeupdate("insert into authors " +
'(first_name, last_name) " +
"values ('george', 'orm.seogis.comanagers.
a jts transaction manager provides transaction services to the parties involved in distributed transactions: the application server, the resource manager, the standalone transactional application, and the communication resource manager (crm).
2.jta
1.1 事務處理的概念
jta實際上是由兩部分組成的:一個高級的事務性客戶接口和一個低級的 x/open xa接口。
我們關心的是高級客戶接口,因為bean可以訪問它,而且是推薦的客戶應用程序的事務性接口。
低級的xa接口是由ejb服務器和容器使用來自動協(xié)調(diào)事務和資源(如數(shù)據(jù)庫)的
1.1.1事務劃分
a.程序劃分
使用usertransaction啟動jta事務
the usertransaction interface defines the methods that allom.seogis.comport java.util.*;
import javax.sm.seogis.come.setvisible(true);
}
}
class mouseframe extends jframe
{
public mouseframe()
{
settitle("mouse test");
setsize(default_m.seogis.comove(rectangle2d s)
{
if(s==null) return;
if(s==current) current=null;
squares.remove(s);
repaint();
}
private static final int side_length=20;//正方形的邊長
private arraylist<rectangle2d> squares;//存放所有已繪制的方塊(鼠標有效繪制路徑)
private rectangle2d current;//當前需要繪制的方塊
private class mousehandler extends mouseadapter
{
/*
* 當鼠標按鈕被按下時,先查找當前點是否已經(jīng)包含在前期圖新內(nèi),* 否,則添加至數(shù)組列表
*/
public void mousepressed(mouseevent event)
{
current=find(event.getpoint());
if(current==null)
add(event.getpoint());
}
/*
* 處理鼠標點擊事件,如果當前點包含于圖形之中,且鼠標連續(xù)點擊兩次以上,則擦除該圖形。
*/
public void mouseclicked(mouseevent event)
{
current=find(event.getpoint());
if(current!=null && event.getclickcount()>=2)
remove(current);
}
}
private class mousemotionhandler implements mousemotionlistener
{
/*
* 改變鼠標形狀
h);*/public void mousemoved(mouseevent event){if(find(event.getpoint())==null)setcursor(cursor.getdefaultcursor());elsesetcursor(cursor.getpredefinedcursor(cursor.crosshair_cursor));}/** 拖動圖形*/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();
第三篇:關于java學習的一點心得體會管理科學與工程學院11信管2班孫鑫201*4548
關于java學習的一點心得體會
我是學信管專業(yè)的,這學期除了學習了java軟件開發(fā)綜合實驗這門選修課外,還有自己本專業(yè)要學的java面向?qū)ο蟮某绦蛟O計。學習了近一學期的java課程,覺得是該總結自己的心得體會了。開始學習任何一門課(包括java),興趣最重要。一直覺得自己在學習了計算機編程語言(也就是c語言),學到了很多東西,再學習java的話,應該問題不大,但在學習了幾個星期后,還是明確感到了,有點吃力,于是趁學校開設這門選修課,并且有自己院的老師講解,還有了上機的機會,比自己自學省事多了,于是鼓足信心,開始了漫長的java征途。
還記得我編寫的第一個程序是簡單的輸出程序。當時自己不是很理解為什么main方法要這樣來定義public static void main(string[] args),問了好多同學,他們告訴我的答案是一樣的“java本身要求就是這樣子的”,但我自己不甘心,就自己進行了探索:把main改個名字運行一下,看看報什么錯誤,然后根據(jù)出錯信息進行分析;把main的public取掉,在試試看,報什么錯誤;static去掉還能不能運行;不知道m(xù)ain方法是否一定要傳一個string[]數(shù)組的,把string[]改掉,改成int[],或者string試試看;不知道是否必須寫args參數(shù)名稱的,也可以把args改成別的名字,看看運行結果如何。 結果一個簡單程序反復改了七八次,不斷運行,分析運行結果,最后就徹底明白為什么了main方法是這 1
樣定義的了。接著在以后的學習中我也采用這樣的方法解決問題,卻發(fā)現(xiàn)自己的速度比別人慢了好多,我就把自己的課余時間也分一部分給了java。
因為基礎是最重要的,只有基礎牢固才有可能對后面的學習有更加深刻的認識!
學習一門新的語言,參考書是離不開的。聽專業(yè)課老師說訂的教材偏難,不適合我們初學者,于是我在圖書館借了本參考書(一本篇幅較短的入門書來學習那些最簡單、最基本的東西,包括學習java語法等)。同時,對一個最簡單的程序也應該多去調(diào)試,多想想如果改動一下會出現(xiàn)什么結果?為什么必須那樣寫?多去想想這些問題然后去操作,會讓你有更多的收獲。這樣反復地思考是很有用的。
在學習java的語法時,java的語法是類似c語言的,所以學習的比較輕松。唯一需要注意的是有幾個不容易搞清楚的關鍵字的用法,public,protected,private,static,什么時候用,為什么要用,怎么用,和同學一起討論了好久才得以解決。
在學習java的面向?qū)ο蟮木幊陶Z言的特性。比如繼承,抽象類,方法的多態(tài),重載,覆蓋。對于一個沒有面向?qū)ο笳Z言背景的人來說,我覺得這個過程需要花很長很長時間,因為學習java之前沒有c++的經(jīng)驗,只有c語言的經(jīng)驗,花了很長時間,才徹底把這些概念都搞清楚,把書上面的例子反復的揣摩,修改,嘗試,把那幾章內(nèi)容反復的看過來,看過去,看了很多遍,才徹底領悟了。
此外,我對于static,public,private等等一開始都不是很懂,
都是把書上面的例子運行成功,然后就開始破壞它,不斷的根據(jù)自己心里面的疑問來重新改寫程序,看看能不能運行,運行出來是個什么樣子,是否可以得到預期的結果。這樣雖然比較費時間,不過一個例子程序這樣反復破壞幾次之后。我就對這個相關的知識徹底學通了。有時候甚至故意寫一些錯誤的代碼來運行,看看能否得到預期的運行錯誤。這樣對于編程的掌握是及其深刻的。
在學習java的過程中我得出這樣的結論:
1.學習中,要養(yǎng)成良好的習慣(寫括號時要成對,字母大小寫要區(qū)分,單詞拼寫要準確)。
2.在學習的過程中,最好不是僅僅停留在java表層,不是抄書上的例子運行出結果就可以。要注意,即便對一個簡單的例子也要有耐心去琢磨、調(diào)試、改動。
3.在學習的過程中一定要動手做、試著寫代碼,而不是抱一本書看看就行。很多東西和體會必須自己動手才能真正屬于自己。
4. 在 java 的學習過程中,可能會遇到形形色色的問題不容易解決,應多去專業(yè)論壇了解相關的知識,書本上的知識有限。要會從網(wǎng)上搜索有用的信息 加以整理,促進學習的深入和知識水平的提高。
看了好多網(wǎng)上課程,說學到一定程度要嘗試著自己做東西,但覺得自己僅僅經(jīng)過一學期的學習,還遠遠不夠,希望自己在以后學習中繼續(xù)努力,能夠真真正正擁有一門編程語言,對自己今后的發(fā)展起到作用。
第四篇:java學習心得java學習心得
一、 如何學好java??
1. 就本人認為學好java關鍵就在于態(tài)度。態(tài)度是學習好java的前
提,積極的態(tài)度注定你就比別人學得認真,自然最終學的一定
比不認真的人學的好!
2. 有良好的前提,不努力也不行的,所以呀!還得練習。要做到
常練習,多看,多思考(舉一反三,多方位的,全面的使你的
程序更加的完美);
3. 最后一點,就是多多交流!閉門造車永遠是落后的學習方式,
所以好要和身邊的一切可以交流技術的人積極交流,畢竟個人
的力量有限的!
二、 java中那些重要知識點。。ū救苏J為最主要的是思想,
知識點也很重要,關鍵是在學習中總結出自己的一套思想,好的槍手都是子彈喂出來的,好的程序員都是寫代
碼寫出來的)
1. java數(shù)據(jù)類型
a) 基本數(shù)據(jù)類型:byte、short、int、long、float、double、char、
boolean(注意各自的取值范圍,還有轉(zhuǎn)換方式)
b) 引用數(shù)據(jù)類型: 數(shù)組、類、接口。
2. 運算符號
a) 算術運算符:+、 - 、* 、/ 、 %、++、--;
b) 賦值運算符:=、+= 、-= 、*= 、/=、%=;
c) 比較運算符:<、>、=<、=>、!=;(返回值都是false/true) d) 邏輯運算符:&&、||、!
e) 位運算符:用于操作二進制位的運算符:<<、>>、>>>……
4. 基本數(shù)據(jù)結構:
a) 順序結構
b) 選擇結構(if……else……,sm.seogis.complements):一個類可以實現(xiàn)一個或多個
接口,用逗號隔開。
ii. 接口強調(diào)的是功能:has——a的問題!
12. 多線程(thread類與runable接口)
a) 主要方法:
i.
start()啟動線程
ii.
iii.
iv. run()程序運行的方法,功能實現(xiàn)區(qū)域 sleep()休眠,使程序處于休眠狀態(tài) interrupt()吵醒:吵醒處于休眠狀態(tài)的程序,使進入正
常狀態(tài);
b) 線程同步(synchronized鎖)關鍵在于this與object的區(qū)別,
各自使用的范圍與壞境。
13. 流(input/output)
a) 分類:主要是字節(jié)流與字符流,還有緩沖流,數(shù)據(jù)流,對
象流……
b) 方法都差不多:主要是m.seogis.comsdn因為我個人覺得它勝過任何一本編程參考書
msdn是 microsoft 當前提供的有關編程信息的最全面的資源,它包含微軟最新的技術數(shù)據(jù)庫,加上易學易用的全文檢索功能,讓您迅速找到任何您需要的技術參考數(shù)據(jù)
(二)加強自我管理,善于作自我總結,分析自已的優(yōu)點及缺點
中國境內(nèi)百分之八十以上的領導人在百分之八十以上的場合的講話中都有類似的觀點,所以在這里我是不多說了,反正這一條用在什么行業(yè)什么地方都不會有錯的,人生最大的敵人不是就是自已嗎?管好自已認清自已,那還有什么搞不定的?
(三)養(yǎng)成良好的文檔習慣
良好的文檔是正規(guī)研發(fā)流程中非常重要的環(huán)節(jié),一個好的程序是先寫好設計文檔再進行編程的,在設計文檔的指導下,才能寫出安全的代碼。如果你不寫文檔,一開始就寫程序,這樣你就不會按已設計好的路線走,而是想到哪寫到哪。小功能還好說,要是大功能,就容易混亂甚至失控.那么如何寫文檔呢?其實我認為沒有統(tǒng)一的標準,雖然國家及一些nb的人總結了很多的模板,但每個人的習慣不同,如果你不加以修改或創(chuàng)新,就套用某個標準,我相信寫起來會很吃力及說不清的難受,因此我覺得只要能將你的設計思想及實現(xiàn)算法或步驟描述清楚就是好的文檔,我強烈建議廣大程序員朋友們在寫文檔時要善于用圖表來說明你的思想,我們不是作家,也可能作文都經(jīng)常性地不及格,寫出五官端正的文章對我們來說可能不容易啊!好好地利用visio,rose或別的工具來表達你的思想吧!
(五)代碼風格要規(guī)范,嚴謹,效率要高。
(六)掌握好跟蹤調(diào)試技巧.
跟蹤調(diào)試程序是一件繁瑣而又復雜的事情,所以掌握必要的調(diào)試策略及技巧卻可以使這些工作變得輕松起來.強烈建議你去看一下老美everett n.mckay及mike wooding寫的書<<debugging windows programs>>,你一定受益匪淺.
(七)養(yǎng)成自我測試的習慣
測試工作應由測試工程師來做,但在你寫完一個模塊或一個軟件時,還是要自已先測試一下,保證不要出現(xiàn)一些低級的錯誤.
(八)善于交流善于溝通,特別是經(jīng)常與一些高手交流一下學習的心得體會
有人說,程序員的性格大多內(nèi)向不喜歡說話,其實是有些誤會了,不是不喜歡而是話不投機,我的腦袋一天到晚都在不停地轉(zhuǎn),函數(shù),數(shù)據(jù),算法啊充滿了我的世界,我那還有時間與你談一些無聊的話題,話要找對人了,才容易談下去,書上說過"聽君一席話,勝讀十年書",你要找的就是這種豁然開朗!
(九)階段性地做一下專題總結
知識要溫故而知新,因此我程序員要養(yǎng)成階段性地做專題總結的習慣,比如你這個月學習或在做與多線程有關的模塊或項目,那么在你做完后,你就可以好好地總結一下所有與多線程相關的技術,包括理論知識,實踐方法以及各種技巧及優(yōu)秀文章等等,這對你各種能力的提高將有
很大的幫助,你試過了嗎,如果沒有,那就快點行動吧!
(十)要有持之以恒的精神
我只是想說明要學好任何一門技術,最好要有持之以恒精益求精的精神,特別是學一些比較抽象比較難的技術,除了思考一下你的學習方法以外,還必須堅定你的目標及信念!
我們向你推薦更多精彩內(nèi)容:java學習心得體會
java學習心得
java學習心得
java學習心得 (1)
java學習心得
來源:網(wǎng)絡整理 免責聲明:本文僅限學習分享,如產(chǎn)生版權問題,請聯(lián)系我們及時刪除。