第一篇:【黑馬程序員】Java基礎 : Java語句筆記
【黑馬程序員】Java基礎 : Java語句筆記
摘要: Java基礎—java語句這些是黑馬程序員java基礎入門的一個很重要的內容。今天主要給大家簡單講解一下Java基礎—java語句,以后會慢慢講解黑馬程序員的課程內容!
關鍵語句介紹
一、while 語句 一般形式:
whi l e(條件表達式){ 語句體 ……… } 執行過程:
條件表達式為真,執行語句體。否則,退出!
二、do while 語句 一般形式: do { 語句體 …….} while(條件表達式);執行過程:
先執行一次語句體,判斷 條件表達式是否為真,為真再執行do語句中的語句體。為假,退出。
需要注意:與whi l e語句區別
黑馬程序員合肥中心 編著
1.while(條件表達式)后面有分號;2.不管條件表達式是否為真,語句體均會執行一次。
三、for 語句 一般形式:
for(子句 1;子句 2;子句 3){ 語句體 …… } 執行過程:
四、break、cont inue 語句 break 退出所在循環 : int stopHere = 5;for(int i=1;i<8;i++){ if(i == stopHere){ break;} System.out.println(“i = ” + i);
黑馬程序員合肥中心 編著
} //打印結果:5,6,7,8均沒有打印出來。
需要注意的一個問題: int stopHere = 5;for(int i = 1;i < 8;i + +){ if(i = = stopHere){ / /語句體 } break;System.out.println(“i = ” + i);} 這個時候編譯器會報錯:無效的 System.out 輸出語句。冷靜分析一下:
break 語句會結束循環,所以不會再去執行 System.out 輸出語句。編譯會認為你在多此一舉,sorry 報個錯!
continue 退出本次循環,不會退出整個循環: int skipHere = 5;for(int i = 1;i < 8;i + +){ if(i = = skipHere){ continue;}
黑馬程序員合肥中心 編著
System.out.println(“i = ” + i);} / /打印結果:除了5沒有打印出來。
i = 1 i = 2
五、switch 語句 一般形式: switch(常量){ case 表達式1:語句體1;break;case 表達式2:語句體2;break;.....default : 語句體n;break;}
執行過程: 執行過程:
case 根據自己的表達式看是否匹配常量,如果匹配就執行語句體,否則執行 default 語句。
case 執行類似于并行操作,不是順序操作。所以各個表達式的值不可以相同。
黑馬程序員合肥中心 編著
哪個 case 匹配常量就會執行自己的語句體,不會再去尋找其他 case 語句。注意:
<1> case 穿透:省去break關鍵字
[AppleScript] 純文本查看 復制代碼 ?
01 /**
02 * @author 傳智播客 03 */
04 int i = 10;05 switch(i){ 06 case 10:
07 System.out.println(“ A”);08 //break;09 case 5: System.out.println(“ B”);11 //break;12 case 7: System.out.println(“ C”);14 //break;15 default : System.out.println(“ error”);17 break;18 }//打印結果:A B C error
<2> 在 Java 編程中 switch 括號中的常量的數據類型只可以為 int 類型或者是 byte、char、short(因為 byte、char、short 可以自動提升為 int),常量類型不可以是 long、float 和 double 等數據類型。<3> 多個 case 可以合并 , 相當于 “ 或 ”,例如下面 i 等于 10、5、7 都可以執行打印語句。
[AppleScript] 純文本查看 復制代碼 ?
01 /**
02 * @author 傳智播客 03 */
04 int i = 5;05 switch(i){ 06 case 10: 07 case 5: 08 case 7:
09 System.out.println(“ C”);10 break;11 default : System.out.println(“ error”);13 break;
黑馬程序員合肥中心 編著 }//打印結果:C <4> default 語句可以省,但是不推薦,他后面的 break 可省 <5> case 或者 default 子句中可以寫多條語句 case 7: System.out.println(“ C”);if(i == 5){ System.out.println(“ i = ” +i);} break;<6> case 或者 default 子句中還可以嵌套 switch 或者其他語句
六、return 語句
終止方法的運行并指定要返回的數據。兩種形式:
<1> return 表達式;
<2> return ;沒有任何數據直接返回,結束函數(方法)的執行。
七、if 語句
一般形式:
1.if(條件表達式){ 語句體} 2.if(條件表達式){ 語句體} else{語句體 } 3. if(條件表達式1){ 語句體} else if(條件表達式2){語句體 } else {語句體 }
特別注意:形式3,else與其最近的上個if 配對。例子:
[AppleScript] 純文本查看 復制代碼 ?
黑馬程序員合肥中心 編著
01 /**
02 * @author 傳智播客 03 */
04 public class TestIF {
05 public static void main(String[] args){ 06 int i = 30;07 if(i < 20){
08 System.out.println(“<20”);09 } else if(i < 50){ System.out.println(“<50”);11 } else if(i < 80){ System.out.println(“<80”);13 } else System.out.println(“>=80”);15 System.out.println(“黑馬程序員!”);16 }
如果大家想學習java基礎的知識,歡迎大家可以去傳智播客官網http://www.tmdps.cn/去了解java基礎知識!
黑馬程序員合肥中心 編著
第二篇:【黑馬程序員】Java基礎總結
【黑馬程序員】Java基礎總結
黑馬程序員的javaEE課程主要分為2個部分:java基礎+java就業。今天就簡單的給大家總結一下咱們java基礎的知識。
注:Java采用Unicode符號集,每個字符占2個字節,無論英文還是中文還是其他字符。
標識符
為變量、類或方法起的名稱 以字母,下劃線、或者$符號開頭 由字母、數字、下劃線或者$符號開頭 區分大小寫,沒有長度限制,不能使用關鍵字 盡量取得容易辨識,見名知意
如:identifier、userName、user_Name、_sys_varl、$change
基本數據類型
Java定義了8中基本數據類型
[AppleScript] 純文本查看 復制代碼
?
/**
* @author 傳智播客 1 */ 2 布爾值----boolean(只有true和false兩種類型)3 字符-------char(16 位的Unicode字符 用單引號('')標注;'a'表示字母4 a
't' 表示制表符
'u'中?用確切的代替
申明5 并且初始化: char c = 'A'
申明變量 char ch1,ch2)6 整數--------byte(8位)short(16)int(32)long(64)【以0開7 頭表示八進制 ;以0x開始表示16進制】 浮點型-----float double
變量
必須在類的內部【可以在方法外也可以在方法類】 在方法類定義的變量叫做局部變量,需要顯示的初始化
黑馬程序員合肥中心 編著
成員變量和類變量【對象】自動初始化【數字初始化為0,對象初始化為null】
常量
在程序運行中,其值保持不變的量
不同數據類型間的相互轉換【封裝Wrapper類】 Java中類的定義:
[AppleScript] 純文本查看 復制代碼
? /**
2* @author 傳智播客
3*/ 4 <修飾符> Class <類名>{ <屬性申明>;6
<構造器申明>;7
<方法申明>;8 }
成員變量申明:
[AppleScript] 純文本查看 復制代碼
? <修飾符> <類型> <名稱>;修飾符:
[AppleScript] 純文本查看 復制代碼
? /** 2
* @author 傳智播客 3
*/ 4 final:修飾常量,常量的值不能被修改【例如 final int CONSTANT = 50;】 5 static:申明靜態變量[類變量] static int nCount;方法的申明:
[AppleScript] 純文本查看 復制代碼
? /** 2
* @author 傳智播客
黑馬程序員合肥中心 編著
3*/ 4 <修飾符> <返回值類型> <名稱>[參數列表]{ 5
語句;6 }
方法參數的傳遞方式:
1、值傳遞:形參是基本數據類型,方法調用時,實際參數把值傳遞給形式參數,形式參數只是用實際參數的值初始化自己的存儲單元內容;是兩個不同的存儲單元,所以方法執行中,形式參數值的改變不會影響實際參數的值。
2、引用傳遞:形參類型是引用數據類型【傳遞地址】,方法調用時,實際參數是對象或者數組,這時,形式參數和實際參數指向的是同一地址,方法執行中,對形式參數的操作實際上是對實際參數的操作,這個結果在方法結束后被保留了下來,所以對形式參數的操作實際上就是對實際參數的操作。構造器申明:
[AppleScript] 純文本查看 復制代碼
?
/** 1 * @author 傳智播客 2 */ 3 <修飾符> <類名>[參數列表]{ 4
語句;5 } 6 注釋:構造器沒有返回值,void也不行;如果有返回值,方法會被當做普通函7 數執行; 構造器函數特點:
1、作用:完成對類對象的初始化
2、名稱必須和類名相同
3、不能有返回值,不能有 return 語句
4、一般申明為Public類型 構造器的使用:
黑馬程序員合肥中心 編著
1、不能現實的調用
2、在創建一個類的對象時,系統自動調用構造器為該對象初始化
3、構造器只能和new關鍵字一起使用
格式:
類名 對象名 = new 構造函數名稱(成員變量的初始值);
默認構造器:
1、每個類至少有一個構造器
2、如果不編寫構造函數,系統自動添加默認的構造函數【默認構造函數不帶參數,默認構造函數函數體為空】
3、不必編寫構造函數就能使用new XXX()
創建實例
對象創建格式:
<對象名> = new <類名>(實參)
對象的清除:
對象為null時,Java自動調用垃圾回收機制清除對象,釋放對象占用的內存空間 手動編寫finalize()方法撤銷對象--不提倡
對象的內存模型:
棧內存:方法中定義的變量(基本類型和引用類型)。超過變量的作用域,自動釋放變量的內存
堆內存:new 創建的對象(包括數組),由系統自動回收
類的繼承【僅支持單繼承】
[AppleScript] 純文本查看 復制代碼
? /**
2* @author 傳智播客
3*/ 4 <修飾符> class <名稱> extends <父類>{ 申明;6 }
黑馬程序員合肥中心 編著
子類可以繼承父類中非private的方法和屬性;子類可以添加新的屬性和方法;【程序代碼重,減少冗余】 方法的重載(overload):
1、一個類中有多個同名的方法
2、條件:參數的個數不同;參數的類型不同
3、如果兩個方法只有返回值不一樣,不是重載,會報錯
方法的覆蓋(override):
1、子類可以修改父類繼承過來的行為
2、子類可以創建和父類的方法不同功能的方法,但是下面必須相同:【方法名、返回值、參數列表】
super關鍵字:
往往在覆蓋方法時,真正不目的不是代替現有的行為,而是在某些方面擴展那些行為; 類中使用super關鍵字指向父類的成員 包括數據和方法; 3中使用方法:
super.方法名([參數表]);----調用父類的方法 super.成員變量名;----訪問父類的成員變量 super([參數表]);----調用父類的構造函數
構造函數不能被繼承:
子類從父類繼承所有的方法和變量 子類不能繼承父類的構造函數
有兩種方式可以獲取構造函數:
1、使用默認的構造函數
2、編寫1個或者多個構造函數
調用父類的構造函數:
要調用父類的構造函數,必須在子類構造函數的第一行使用super關鍵字
黑馬程序員合肥中心 編著
要調用特定的父類的構造函數,必須為super提供參數
如果沒有this或者super調用,編譯器會插入一個對父類無參數構造函數的隱式調用: super();
變量的多態:
類型為X的參考變量,指向的對象類型既可以是X,也可以是X的子類; 如: Employee x = new Manager();Employee y = new Employee();
實例方法能夠被覆蓋,靜態(static)方法不能被覆蓋 原因:
靜態方法在編譯時候,根據調用該方法的類或者對象所屬的類決定 實例方法在運行時根據對象所屬的類決定
如:Super s = new Sub();編譯時候S是Super類的對象,運行時 S 指向Sub類的對象;
instanceof操作符:
可以根據對象所屬的類進行不同的處理 抽象類:只能被繼承,不能被實例化的類 定義格式:
[AppleScript] 純文本查看 復制代碼
? /**
2* @author 傳智播客
3*/ 4 abstract class 類名{ abstract 返回值類型
方法名[參數列表];6
...7 } 說明:
抽象類中可以包含抽象方法和非抽象方法,也可以不包含抽象方法和非抽象方法;只要有一個抽象方法,就屬于抽象類;
[AppleScript] 純文本查看 復制代碼
黑馬程序員合肥中心 編著
?
01 /** 02
* @author 傳智播客 03
*/ 04 abstract class Animal{ 05
public abstract void eat();06
} 07
class Dog extends Animal{ 08
public void eat(){System.out.println(“狗吃骨頭”);} 09
} 10class Cat extends Animal{ 12
public void eat(){System.out.println(“貓吃老鼠”);} 13 } 115 class Wolf extends Animal{ 16
public void eat(){System.out.println(“狼吃羊”);} 17 } 說明:不能創建抽象類的對象,即不能被實例化;
使用時,必須用起創建子類
子類可以定義自己的成員變量和方法,但是必須將父類的所有抽象方法代碼寫完;
如果子類只是實現了部分抽象的方法,那么,該類仍然是抽象類; 最終類:
final 類不能被子類化;如Java.lang.String 是final 類,這樣做是基于安全的考慮; 標記為final的方法不能被覆蓋;處于安全的考慮,如果方法的實現不應改變,而且對對象的一致性要求比較高,則可以創建一個final方法。
標記為final的變量代表常量,只能一次賦值; 接口:
使用interface關鍵字申明,可以支持多重繼承 接口中只能包含: 抽象方法;
黑馬程序員合肥中心 編著
常量(默認為 public static final)【用得較少】 說明:
1、接口本身只是提供定義,使用時,必須通過類實現接口(implements)實現接口時,必須實現所有的方法。否則該類還是抽象類(abstract class)。
2、一個雷尅實現多個接口。
3、擴展子句(extends)必須在實現子句(implements)之前
包:
package <頂層包名>[.<子包名>]*;
如:package shipping.domain;說明:
1、如果有包申明,必須在源文件開始處申明。他的前面只能有空白和注釋,不能有其他語句;
2、每個源文件只能有一個包申明;
3、如果沒有包申明,則該類屬于“默認”包(沒有名稱的包)
4、包的名稱有層次,且用.分開;
import語句: 基本語法:
import <包名>[.<子包名>].<類名> 或者import <包名>[.<子包名>].*;
其實在學習java過程中基礎還是比較容易,如果大家想學習java基礎的知識,歡迎大家可以去傳智播客官網http://www.tmdps.cn/去了解java基礎知識!
黑馬程序員合肥中心 編著
第三篇:黑馬程序員:Java集合簡單總結
黑馬程序員:Java集合簡單總結
在Java語言中,學好集合是非常重要的,下面簡單的對集合進行總結,以便大家學習,有
問題再相互交流。
集合框架圖
在集合框架圖中可以看出,Collection接口中主要有兩個子接口,分別是List和Set。List集合的特點是元素有序、包含重復元素,Set集合的特點是元素無序、不包含重復元素。Map集合中存儲的是鍵值映射關系,元素都是成對出現的。Map接口的主要子接口有HashMap和TreeMap。
總結ist有順序有重復沒有排序,set無重復有排序,map的key也和set一樣。
List接口
List : 特點是元素有序、可以包含重復元素。它有兩個實現類分別是:ArrayList和LinkedList。
ArrayList : 內部維護一個數組結構,允許對元素進行快速隨機訪問,但是向List中間插入與移除元素的速度很慢。
LinkedList : 內部維護了一個雙向鏈表結構,即通過節點之間彼此連接來實現的,每一個節點都包含前一個節點和后一個節點的引用。當一個新節點插入時,只需要修改其中保持先后關系的節點引用即可,這樣的存儲結構保證了LinkedList集合在增刪元素時效率非常高。
Set接口
Set具有與Collection完全一樣的接口,因此沒有任何額外的功能,不像前面的List。實際上Set就是Collection只是行為不同,也就是說Set集合并沒有對Collection接口進行擴充,只是比collection接口要求更加嚴了。
Set : 存入Set的每個元素都必須是唯一的,因為Set不保存重復元素。加入Set的元素必須定義equals()方法以確保對象的唯一性。
HashSet : 為快速查找設計的Set。存入HashSet的對象必須定義hashCode()。
TreeSet : 保存有序的Set, 底層為樹結構。使用它可以從Set中提取有序的序列。
LinkedHashSet : 具有HashSet的查詢速度,且內部使用鏈表維護元素的順序。于是在使用迭代器遍歷Set時,結果會按元素插入的次序顯示。
Map接口
Map用于保存具有映射關系的數據,因此Map集合里存儲兩組值,一組用于保存Map里的key,另一組用于保存Map中的value,key和value都可以是任意引用類型數據,其中,作為key的值是不允許重復的,而value中可以出現重復。Map : 維護“鍵值對”的關聯性,使你可以通過“鍵”查找“值”。
HashMap就是使用對象的hashCode()進行快速查詢的。此方法能夠顯著提高性能。HashMap集合是基于哈希表的Map接口實現,并允許使用null鍵null值,但必須保證鍵的唯一性。
LinkedHashMap : 類似于HashMap,但是迭代遍歷它時,取得“鍵值對”的順序是其插入次序。而在迭代訪問時發而更快,因為它使用鏈表維護內部次序。
TreeMap : 基于紅黑樹數據結構的實現。查看“鍵”或“鍵值對”時,它們會被排序(順序由Comparabel或Comparator決定)。TreeMap的特點在于,你得到的結果是經過排序的。
Hashtable線程安全,但是存取速度很慢,且不允許存放null鍵null值,目前基本上被hashMap類所取代。Hashtable有一個重要的子類Properties。
Properties:java.util.Properties;key和value都是String類型,用來讀配置文件。繼承自Hashtable,比 Hashtable 更嚴格 屬性列表中每個鍵及其對應值都是一個字符串。常用方法 String getProperty(String?key)和 setProperty(String key,String value);
用法:我在D盤下建了一個名為 AA.dat 的文件,文件的內容為:
name=ch
password=12345
執行以下程序,輸出 ch,可見用 Properties 可以很方便的解析配置文件 Properties p = new Properties();p.load(new FileInputStream(“D:AA.dat”));System.out.println(p.getProperty(“name”))
第四篇:java程序員
如何迅速成為Java高手[Tomjava原創]
很多網友問我學習Java有沒有什么捷徑,我說“無他,唯手熟爾”。但是我卻很愿意將自己學習的一些經驗寫出來,以便后來者少走彎路,幫助別人是最大的快樂嘛!
要想學好Java,首先要知道Java的大致分類。我們知道,自從Sun推出Java以來,就力圖使之無所不包,所以Java發展到現在,按應用來分主要分為三大塊:J2SE,J2ME和J2EE,這也就是Sun ONE(Open Net Environment)體系。J2SE就是Java2的標準版,主要用于桌面應用軟件的編程;J2ME主要應用于嵌入是系統開發,如手機和PDA的編程;J2EE是Java2的企業版,主要用于分布式的網絡程序的開發,如電子商務網站和ERP系統。J2SE開發桌面應用軟件比起VC,VB,DEPHI這些傳統開發語言來說,優勢好象并不明顯。J2ME對于初學者來說,好象又有點深奧,而且一般開發者很難有開發環境。所以現在應用最廣泛又最好學的就是J2EE了。J2EE又包括許多組件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要學習起來可不是一兩天的事。
那么又該如何學習J2EE呢?當然Java語法得先看一看的,I/O包,Util包,Lang包你都熟悉了嗎?然后再從JSP學起。如果你學過HTML,那么事情要好辦的多,如果沒有,那你快去補一補HTML基礎吧。其實JSP中的Java語法也不多,它更象一個腳本語言,有點象ASP。然后你就該學一學Servlet了。Servlet就是服務器端小程序,他負責生成發送給客戶端的HTML文件。JSP在執行時,也是先轉換成Servlet再運行的。雖說JSP理論上可以完全取代Servlet,這也是SUN推出JSP的本意,可是Servlet用來控制流程跳轉還是挺方便的,也令程序更清晰。接下來你應該學習一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代碼的混亂方式了,這種方式跟ASP又有什么區別呢?還好,SUN提供了Javabean可以把你的JSP中的Java代碼封裝起來,便于調用也便于重用。接著就是EJB了,EJB就是Enterprise JavaBean,看名字好象它是Javabean,可是它和Javabean還是有區別的。它是一個體系結構,你可以搭建更安全、更穩定的企業應用。它的大量代碼已由中間件(也就是我們常聽到的Weblogic,Websphere這些J2EE服務器)完成了,所以我們要做的程序代碼量很少,大部分工作都在設計和配置中間件上。至于JDBC,就不用我多說了,你如果用java編過存取數據庫的程序,就應該很熟悉。還有,如果你要用Java編發送電子郵件的程序,你就得看看Javamail了。
好了,對Java和J2EE有了一些基本概念之后,你就應該編一些程序了,千萬不要紙上談兵哦。最好找一些有實例且帶光盤的書來看,這樣看到好的程序就可以直接Ctrl+C再Ctrl+V,也不用勞您老大架再親自把它再輸一遍吧,再說直接復制還不用怕出錯,何樂而不為呢!還有就是要經常上一些好的Java編程文章,有好的文章要Cut下來,有問題盡管問,只要問題不是太傻,一般高手都會回答你的。下面介紹幾個好的Java方面的編程網站:
CSDN論壇 http:///那里Java資料比較全;
java.com.cnhttp://.cn/看這域名就知道有多牛,注冊用戶快接近一萬了,同時在線人數也在一千左右,人氣很旺的;
IBM的開發者網絡http://IBM永遠的藍色巨人;
那么我書也看了,程序也做了,別人問我的問題我都能解決了,是不是就成為高手了呢?當然沒那么簡單,這只是萬里長征走完了第一步。不信?那你出去接一個項目,你知道怎么下手嗎,你知道怎么設計嗎,你知道怎么組織人員進行開發嗎?你現在腦子里除了一些散亂的代碼之外,可能再沒有別的東西了吧!你現在最缺的是實際的工作經驗,而不是書本上那些
憑空想出來的程序。所以你快去找一份Java的編程工作來做吧(如果是在校學生可以去做兼職?。趯嵺`中提高自己,那才是最快的。不過你得祈禱在公司里碰到一個高手,而且他還愿意不厭其煩地教你,這樣好象有點難哦!
還有一個辦法就是讀開放源碼的程序了。我們知道開放源碼大都出自高手,他們設計合理,考慮周到,再加上有廣大的程序員參與,代碼的價值自然是字字珠嘰,鏗鏘有力(對不起,偶最近《金裝四大才子》看多了)。學Java必讀的兩個開源程序就是Jive和Pet Store.。Jive是國外一個非常著名的BBS程序,完全開放源碼。論壇的設計采用了很多先進的技術,如Cache、用戶認證、Filter、XML等,而且論壇完全屏蔽了對數據庫的訪問,可以很輕易的在不同數據庫中移植。論壇還有方便的安裝和管理程序,這是我們平時編程時容易忽略的一部份(中國程序員一般只注重編程的技術含量,卻完全不考慮用戶的感受,這就是我們與國外軟件的差距所在)。Jive的資料在很多網站上都有,大家可以找來研究一下。相信你讀完代碼后,會有脫胎換骨的感覺。遺憾的是Jive從2.5以后就不再無條件的開放源代碼,同時有licence限制。不過幸好還有中國一流的Java程序員關注它,外國人不開源了,中國人就不能開源嗎?這里向大家推薦一個漢化的Jive版本—J道。Jive(J道版)是由中國Java界大名鼎鼎的banq在Jive 2.1版本基礎上改編而成, 全中文,增加了一些實用功能,如貼圖,用戶頭像和用戶資料查詢等,而且有一個開發團隊在不斷升級。你可以訪問banq的網站http:///去下載,或到同濟技術論壇的服務器上ftp://nro.shtdu.edu.cn去下,安裝上有什么問題,可以到論壇上去提問。Pet Store.(寵物店)是SUN公司為了演示其J2EE編程規范而推出的開放源碼的程序,應該很具有權威性,想學J2EE和EJB的朋友不要錯過了。
你一定會高興地說,哈哈,原來成為Java高手就這么簡單啊!記得Tomjava也曾碰到過一個項目經理,號稱Java很簡單,只要三個月就可以學會。其實說這種話的人就如當年小日本號稱“三個月拿下中國”一樣大言不慚。不是Tomjava潑你冷水,你現在只是學到了Java的骨架,卻還沒有學到Java的精髓。接下來你得研究設計模式了。設計模式是高級程序員真正掌握面向對象核心思想的必修課。設計模式并不是一種具體“技術”,它講述的是思想,它不僅僅展示了接口或抽象類在實際案例中的靈活應用和智慧,讓你能夠真正掌握接口或抽象類的應用,從而在原來的Java語言基礎上躍進一步,更重要的是,設計模式反復向你強調一個宗旨:要讓你的程序盡可能的可重用。關于設計模式的資料,還是向大家推薦banq的網站http:///,他把GOF的23種模式以通俗易懂的方式詮釋出來,純Java描述,真是經典中的經典。有時間再研究一下MVC結構(把Model-View-Control分離開的設計思想)吧,現在很流行的Structs就是它的一種實現方式,不過Structs用起來實在是很繁,我們只要學習其精髓即可,我們完全可以設計自己的MVC結構。然后你再研究一下軟件Refactoring(重整)和極限XP編程,相信你又會上一個臺階。
做完這些,你不如整理一下你的Java代碼,把那些經典的程序和常見的應用整理出來,再精心打造一番,提高其重用性和可擴展性。你再找幾個志同道合的朋友成立一個工作室吧,你可以去承接一些項目做了,一開始可能有些困難,可是你有技術積累,又考慮周全,接下項目來可以迅速作完,相信大家以后都會來找你的,所以Money就嘩啦啦的來了。。。當然你也可以參加一些開源項目,一方面可以提高自己,另一方面也是為中國軟件事業做貢獻嘛!開發者在互聯網上用CVS合作開發,用QQ,MSN,E-mail討論聯系,天南海北的程序員分散在各地卻同時開發同一個軟件,是不是很有意思呢?
下面介紹兩個好的開源項目網站:
湖北省軟件公共開發平臺http://gro.clinux.org/
共創聯盟http://cosoft.org.cn/
哇,好高興哦,我終于成為高手了!非也,非也。古人云:“識時務者為俊杰”。你知道計算
機界現在的發展形勢嗎?你知道微軟的.NET藍圖和SUN ONE計劃之間的明爭暗斗嗎?你知道計算機技術將向何處發展嗎?其實從各大計算機廠商最近的動作,都可以看出來“Web服務將是下一代互聯網應用的制高點”,而微軟的.NET藍圖和SUN ONE計劃的斗爭焦點,也就是Web服務。Web服務就是一個嶄新的分布式計算模型,它是一系列標準的綜合(XML,SOAP,UDDI,WSDL和WSFL等)。它使得不同語言編寫的軟件能夠輕易的集成起來,使網絡資源和Web站點變成一種服務而不是混亂的垃圾場。不遠的將來,我們就可以在家里點擊一下鼠標,就可以完成出門旅游的全部準備工作,包括定飛機票,定旅游線路,定好房間等。請注意,這所有的一切都是Web站點間自動完成的,再也不用象現在一樣,表面上是電子商務,實際上很多環節都是人工操作。也許你會覺得這是天方夜談,不過就近的說,你也很有可能承接一個項目,要集成兩個企業的ERP系統。很有可能上游企業的系統是用Dephi編的,而下游企業的系統是用Java編的。你說你是Java高手,大家都看者你怎么做呢。所以啊,你還得學習新技術,如Web服務,而且你Dephi也要懂一點吧(Dephi6現在已經提供Web服務的控件了)。你編的Java系統,可能要和.NET集成,所以你.NET要懂一點吧?到最后,你可能發現你已經成為Java高手了,但很多時間卻在搞別的技術。太極張三豐里說,最厲害的招式就是沒有招式,可能就是這個道理吧!
因為剛剛興起,所以網上Web服務的資料不是很多,我還是給大家推薦幾個網站吧: 中國UDDI技術聯盟http:///developerWorks/cn/xml/index.shtml?csdnIBM可是Web服務的力推者
嗚?你費勁千心萬苦,總算成為Java高手了,怎叫人不由喜極而泣呢!是啊,真不容易,真不簡單,真叫人感動??!那么打個電話告訴我吧,什么?我的電話號碼是多少?昏到,你打電話問不就知道了嗎,真是的??
第五篇:黑馬程序員java培訓就業班筆記:day05總結
Day05 上午:
1、數組的靜態初始化
多種定義格式:
Int[] arr=new int[]//標準格式,可以明確數組的數據類型,和數組名,但是不知道數組的長度
Int arr[]=new int[] Int[] arr=new int[]{2,1,3,4,5,}//通過大括號可以標示出數組中的內容,此處最好別寫長度,因為容易出錯,因為即初始化實體,又初始化實體中的元素。
Int[] arr={2,1,3,4,5};//可以明確數組的數據類型,和數組名,也可以知道數組中的內容。
2、arr.length:方便獲取數組中的元素個數的方式。
3、操作數組的最基礎的思想以及核心思想:
a)最基礎的思想:就是遍歷。什么是遍歷。
Eg:int[] arr = new int[3];int[] arr = {4,8,9,2,6,9};//明確了數組的類型和長度,并明確了數組中元素的內容。
// int[] arr1 = new int[]{4,8,9};//方便獲取數組中的元素個數的方式,可以使用數組實體一個屬性。length System.out.println(“len:”+arr.length);
for(int x=0;x if(x%2==1) System.out.println(“arr[”+x+“]=”+arr[x]);//arr[0] = 4;} 這就是遍歷的思想,獲取數組中的元素,通常會用到遍歷。 b)核心思想:就是操作數組中元素的角標,角標即索引,因為存數據的最終目的就是取出數據使用,就是操作角標,操作動作: 1、給數組角標上的元素賦值,2、獲取角標上元素的值,存儲都得用角標 4、數組中常見的操作: a)獲取最值: 思路: 1、首先我們要定義一個功能完成獲取數組中最大值的動作; 2、定義個函數來實現這一功能;明確結果,整數數組中的最大值,int,明確是否有未知內容參與運算,參數列表中有一個參數,數組類型int[],一定要注意這里是數組類型,不是int型; 3、如何實現功能細節呢? 1、對數組中的元素進行比較,將比較后比較大的值進行記錄,并參與下一次比較,當數組中的元素都比較完成后,最大值就已經被記錄下來了。 2、每次比較的較大的值不確定,定義一個變量進行記錄,該變量如何初始化呢?只要初始化為數組中的人一個元素即可。 3、應該讓數組中的元素自動和該變量記錄的元素進行比較,所以可以使用遍 歷,獲取數組中的每一個元素。 4、當遍歷到元素比較變量中的記錄的元素大,用該變量記錄住更大的元素。 5、遍歷結束后,變量存儲就是數組中的最大值。實現代碼:eg: Public static int getMax(int arr){ /.定變量記錄較大的值; Int max=arr[0];//初始化數組中的任意個元素; //對數組進行遍歷比較 For(int x=1;x Max=arr[x];} Return max;} 同樣有另外一種方式獲取最大值 Public static int getMax(int[] arr){ Int maxIndex=0;//初始化為數組中一個元素的角標 For(int x=1;x maxIndex=x;} Return arr[maxIndex];} b)排序: 1、選擇排序: 首先通過數組中元素的比較方式來分析: 用數組中第一個角標的元素與數組中第二個角標的元素進行比較,發現9比6大,進行位置置換,此處應該定義一個三方變量,用來記錄住置換過程的元素值,然后再用第一個角標的元素與下一個角標元素進行比較,按照全面的原則進行置換位置,如果前者小于后者,則不置換位置,一次比較,當第一輪結束之后第一個角標出能取的該數組中最小的元素的值,然后再用第一個角標的元素開始和下一個角標的元素進行比較,同理,當第二輪結束后,第二個角標處獲取了該數組中的第二小的值。所以我們發現當依次這樣比較下去,就可以對數組中的元素進行排序,當比較到arr.length-1元素時,發現只剩下這一個元素,沒有其他元素和它進行比較了。思路: 1、首先定義一個功能函數對數組進行排序,2、明確結果,沒有返回值,因為它只是對數組進行排序的一個動作,明確是否有未知內容參與運算,有,數組類型int[] arr 實現代碼: Public static void selectSort(int[] arr){ For(int x=0;x if(arr[x]>arr[y]){ Int temp=arr[x];Arr[x]=arr[y];Arr[y]=temp;} } } } 優化后的選擇排序: 從上面的排序圖中我們可以知道,對數組中元素進行置換位置的次數過多,也就是對堆內存的操作頻繁,降低了性能,下面我們可以通過這種方式對性能優化。 思路: 在棧內存中我們定義兩個變量,分別用來記錄較小的元素的值和較小元素的角標,然后對其進行初始化,至于初始化的值只要是數組中的任意元素即可,然后拿數組中的元素與它進行比較,如果發現拿去比較的元素比變量中記錄的數值要小,那么就進行位置置換,并記錄下較小的元素的角標,依次把數組中的元素遍歷完,就可以獲取數組中的最小元素的值和角標,然后我們拿初始化的值和獲取的最小的元素進行位置的置換,這樣以來當我們獲取了數組中的元素的最小的時候,堆內存中的只用操作一次位置即可,這樣的就提高性能。實現代碼: Public static void selectSort_2(int[] arr){ For(int x=0;x Num=arr[y];Index=y;} If(index!=x){ int temp = arr[x];arr[x] = arr[index];arr[index] = temp; } } } 注意:復習的時候添加注釋 2、冒泡排序: 首先通過排序方式來分析其步驟: 通過排序方式,可以知道是用數組中的元素挨個比較,如果前面的元素的值比它下一個角標的元素大,則進行位置置換,然后再用第二個角標的元素與下一個角標的元素進行比較,同樣如果下一個角標的元素比它小,則進行位置置換,這樣當比較到arr.length-1個元素時已經沒有 和它進行的比較的元素了,當第一輪比較結束后,我們可以知道最后一個角標的元素為該數組中的最大值,按照同樣的原理進行下一次比較,依次獲取了比較大的元素的值。 實現代碼: Public static void bubbleSort(int[] arr){ For(int x=0;x If(arr[y]>arr[y+1]){ //位置置換 } } } } c)折半查找: 首先分析數組元素的查找方式: 首先要明確數組時有序的。 首先定義三個變量min、mid、max分來用來記錄最小角標、中間角標、最大角標,中間角標的獲取為(min+max)/2;獲取中間角標之后,就可以獲取中間角標對應的元素arr[mid];用我們所需要查找的key與中間角標運算進行比較,如果key>arr[mid];那么此時min的位置就是mid的下一個角標,min=mid+1;然后再次獲取中間角標的元素,mid=(min+max)/2,同時也獲取了中間角標對應的數組元素,arr[mid],然后同理,拿key與中間角標的元素進行比較.同樣的原則,依次比較,直到key==arr[mid]的時候獲取key.如果當出現了min>max或者時候則說明我們要查找的key在該數組中布存在,return-1; 實現代碼: Public static void binarySearch(int[] arr int key){ Int min,mid,max;Min=0;Max=arr.length-1;Mid=(min+max)>>1//相當于/2,右移的效率比它要高 While(arr[mid]!=key){ If(key>arr[mid])Min=mid+1;Else if(key Min=mid-1;If(max Return mid;} 注意:復習的添加代碼注釋 總結:折半查找也稱二分查找,這種查找可以提高效率,但是被查找的數組的額元素必須是有序的。不能對無序的數組進行排序后再用折半查找,因為這時候數組中元素的角標已經發生變化了。 5、查表法思想: a)什么時候使用查表法? 當元素很多,而且這些元素與數組有對應關系,而且這些數字都有角標的規律的時候。 擴展:什么時候使用數組? 當同一類型的元素較多時,就使用數組這個容器對數據進行存儲。b)查表法思想的代碼體現: 0 1 2 3 4 5 6 7 10 11 12 13 14 15 '0', '1', '2', '3', '4','5', '6',' 7', '8', '9','A',' B', 'C' ,'D', 'E' ,'F' 我們發現十六進制中一共有16個元素,而且每通過&15獲取的數字都再15之內,都有對應的十六進制元素,而且元素對應的數字正好有規律,而且符合了數組這種容器的特點角標,那么可以將十六進制的元素都存儲到數組中,將每次&15的結果作為角標去查這個數組,就可以獲取到十六進制的對應的元素。這就是查表思想。 代碼體現: Public static void searchList(int num){ //定義一個十六進制的元素表 Char[] arr={'0', '1', '2', '3', '4','5', '6',' 7', '8', '9','A',' B', 'C' ,'D', 'E' ,'F'};//定義一個char類型元素的數組,用于存儲每次獲取到的十六進制值。Char[] chs=new char[8];Int pos=chs.length;While(num!=0){ Int temp=num&15;Chs[--pos]=arr[temp];Num=num>>>4;} For(int x=pos;x 通過上面我們可以知道那么是否可以定義這樣的一個功能函數呢?用來對十進制、二進制、八進制、十六進制進行轉換? 思路: 1、明確結果,沒有返回值,只是對給定的數據轉換的功能。 2、明確是否有未知內容參與運算,有,是什么?求的數值num,十六進制是&15,八進制是&7,二進制是&1,那么&的這個是不確定的,我們定義為變量 base,當這個數值通過&上這些數據后,要取出后面的數值,我們通過右移來實現,但是各個進制的不一樣右移的位置數也是不一樣的,十六進制是無條件右移四位,八進制是無條件右移三位,二進制是無條件右移1位,所以這個數也是不確定的,定義變量 offset 實現代碼: //十進制--二進制 public static void toBin(int num){ trans(num,1,1);} //十進制--八進制 public static void toOctal(int num){ trans(num,7,3);} //十進制--十六進制 public static void toHex(int num){ trans(num,15,4);} Public static void trans(int num,int base,int offset){ If(num==0){ Sop(0);;Return;} //定義一個十六進制的元素表 Char[] arr={0', '1', '2', '3', '4', '5', '6', ' 7', '8', '9', 'A',' B', 'C' ,' D', 'E' ,'F'};Char[] chs=new char[32];Int pos=chs.length;While(num!=0){ Int temp=num&base;Chs[--pos]=arr[temp];Num=num>>>offset;} For(ingt x=pos;x System.outr.println(chs[x]);} } 注意:復習的添加代碼注釋。 這一章節自己還不是很熟悉,能理解,但是不能獨立寫出代碼,在以后的幾天內要每天都要一遍,并自己獨立寫出代碼,做到思想理解透徹。先要產生一天的宏觀思想。復習方法: 首先總結當天學習的方法。遇到不會的先放到一邊。每天晚上睡著覺之前要回憶一遍。