第一篇:Java學(xué)習(xí)日記
Java學(xué)習(xí)日記
1,一個文件里可編寫多個類,一個文件里不能有兩個public類。獨立運行的類必須有main()函數(shù)。
2,Print()不換行,println()打印新東西之前會換行。3,在set classpath前后不能有空格,不能有中文符號。
4,三種注釋方法://、/*…*/、/**….*/,/*….*/不能嵌套,注釋功能有:說明程序的功能,可以取消代碼,或者是回復(fù)代碼。
5,標(biāo)識符:由字母、數(shù)字、下劃線、美元符號組成,不能以數(shù)字、關(guān)鍵字開頭。
6,常量:不變的數(shù)值。有整型,長整型,單精度、雙精度、布爾常量、字符常量、字符號常量。單精度常量以’f’結(jié)尾。
7,變量就是系統(tǒng)為程序分配的一塊內(nèi)存單元,用來存儲數(shù)據(jù)。變量須先定義后使用,不允許嵌套定義。
8,低字節(jié)的類型可以轉(zhuǎn)換成高字節(jié)的類型,高字節(jié)的類型不可以轉(zhuǎn)換成低字節(jié)。
9,流程控制:if若有多條語句最好用大括號括起來。問號表達式:y=x>0?x:-x;若表達式為真,結(jié)果為x,反之為-x.10,Switch()語句只接受int、byte、char、short類型數(shù)據(jù),switch語句用break,多個條件執(zhí)行相同命令:case 1:
case 2:…… break;
11,while語句后若有“;”,不是不執(zhí)行該語句,而是一直在執(zhí)行空語句。12,do..while..語句不管三七二十一都執(zhí)行該語句,直到while語句為假,且while()后有“;”。
13,system.in.read():從鍵盤上讀取數(shù)據(jù);
14,定義數(shù)組:int[] x或 int x[];arraycopy數(shù)組拷貝。
15,面向?qū)ο笕筇卣鳎悍庋b、繼承、多態(tài)。一個類中方法可以訪問同類成員。若局部變量和成員變量名字一樣,則成員變量隱藏。16,一個類中方法可以訪問同類的成員變量和局部變量。
17,“==”與“equals()”的區(qū)別:“==”是比較兩個對象的值是否相同,而equals()是比較兩個對象的內(nèi)容是否相同。例如: String str1=new String(“abc”);String str2=new String(“abc”);String str3=str1;If(str1==str2)System.out.println(“true”);System.out.println(“false”);Else
則結(jié)果返回為false。因為sr1和str2在堆中首地址不一樣,而str1和str3首地址是一樣的。若 If(str1.equals(str2))
System.out.println(“true”);System.out.prinltn(“false”);Else
則結(jié)果返回的是true,因為比較的是內(nèi)容。
18,用private修飾的成員變量,在同一類中可以訪問,在其他類中不可以訪問。程序代碼要求強內(nèi)聚弱耦合
19,構(gòu)造方法:和類名一樣,無返回值,不能用return語句。實例對象一產(chǎn)生就立馬調(diào)用構(gòu)造方法,有幾個實例對象就調(diào)用幾次,一次完成對實例對象的初始化,若沒有定義構(gòu)造函數(shù),系統(tǒng)會自動生成一個空構(gòu)造函數(shù),也可以進行重載。若定義了構(gòu)造函數(shù),則不再產(chǎn)生構(gòu)造函數(shù)。了解構(gòu)造函數(shù)執(zhí)行過程。
20,finalize()方法類似于C++中析構(gòu)函數(shù),在被清除之前會調(diào)用這個函數(shù)。21,static靜態(tài)方法只能直接調(diào)用同類中其他的靜態(tài)成員,而不能訪問非靜態(tài)成員。靜態(tài)方法在使用之前不用創(chuàng)建任何對象,而非靜態(tài)對象在使用之前必須先創(chuàng)建實例對象。靜態(tài)方法不以任何方式調(diào)用this和super方法
22,內(nèi)部類:在類中直接定義內(nèi)部類,內(nèi)部類可以訪問外部類成員變量。在程序塊中均可定義內(nèi)部類。
23,類的繼承:在java中只支持單繼承,但類可以有多層繼承,子類繼承了父類所有的成員變量和成員方法,但不繼承父類的構(gòu)造方法,可使用super方法調(diào)用父類的構(gòu)造方法。
24,final()可聲明類、屬性、方法,若聲明為類,則該類不被繼承。若聲明為變量,則該變量變?yōu)槌A俊H袈暶鳛榉椒?,則該方法在子類中不能被覆蓋。25,含有抽象方法的類稱為抽象類。抽象方法:abstract int aa(int x,int y);一般方法:int aa(int x,int y){ 程序代碼 }
兩者的區(qū)別:前者必須由abstract修飾,只能聲明,不能實例化,沒有大括號;后者有大括號,說明實現(xiàn)了代碼,不是抽象方法。
26,特殊的抽象類稱為接口,接口中所有的方法都是抽象的。一個類用implements去實現(xiàn)一個接口的所有方法。27,一個類繼承了另一個類,不能使用比繼承類的訪問權(quán)限更低的權(quán)限去訪問該類。
28,del person.class 刪除person字節(jié)碼;javac *.java:編譯所有源文件。29,a instanceof B:判斷a是否是B的一個實例對象。對象的類型轉(zhuǎn)換:子類可以轉(zhuǎn)換成父類。Object是所有類的父類。
30,異常是非致命的錯誤,不是語法錯誤。對異常處理用try….catch..。用throws關(guān)鍵字拋出異常,也可以自定義異常。try后面可以跟多個catch捕獲多個異常。finally語句無論如何都要執(zhí)行,沒有異常也會執(zhí)行。
31,包,package語句,為java源文件的第一條語句,若無包則為缺省無包。同一個包中的類可以相互調(diào)用,不必寫上包名。若為類加上包,則應(yīng)將源文件中所有類都存到該包中。同一包中輛各類不一定在一個目錄上。
32,訪問控制:類本身有兩種訪問控制:public和默認(rèn)。父類不能是private和protected,否則子類無法繼承。默認(rèn)修飾的類只被同一包中的所有類訪問。33,進程:正在進行的程序。線程:一個程序內(nèi)部的一條執(zhí)行線索,每個線程上所要運行的程序代碼段是多線程,用Thread類創(chuàng)建線程。
34,后臺線程:如果對某線程對象在啟動(調(diào)用start方法)前調(diào)用了setDaemon(true)方法,這個線程就變成了后臺線程。只要還有一個前臺線程在運行,這個進程就不會結(jié)束。如果一個進程中只有后臺線程在進行,這個進程就會結(jié)束。Pp.join()的作用是把pp所對應(yīng)的線程合并到調(diào)用pp.join();語句的線程中。35,單線程和多線程的區(qū)別:必須等到run()調(diào)用后才實現(xiàn)
36,要實現(xiàn)多線程必須要編寫一個繼承了Thread類的子類,子類要覆蓋Thread類的run方法,在子類run方法中調(diào)用正在新程序中運行的程序代碼,啟動一個新線程是調(diào)用Thread類的start方法,Thread類對象的start方法產(chǎn)生一個新線程,并在該線程上運行Thread類對象中的run方法,控制線程是否結(jié)束。37,產(chǎn)生一個TestThread對象,四個tt.start()線程,共同去賣同100張車票: TestThread tt =new TestThread();tt.start();tt.start();tt.start();tt.start();
38,多個線程共享同一數(shù)據(jù)就會發(fā)生線程安全問題。
39,線程間的通信:wait():當(dāng)前線程放棄監(jiān)視器并進入睡眠狀態(tài)直到其他線程進入同一監(jiān)視器并調(diào)用notify()為止。
40,API:應(yīng)用程序編程接口。Windous API:WIndous操作系統(tǒng)提供的各種函數(shù)。Java API:JDK提供的各種java類 41,java開發(fā)工具軟件的基本特點:集成編輯軟件功能,使用工程化管理,產(chǎn)生應(yīng)用程序的基本框架,支持調(diào)試,提供各種輔助工具。
42,JCreator Pro:一個工作區(qū)可以管理多個工程,只能有一個活動工程。使用該軟件時不用完全記住函數(shù)或者參數(shù),因為有提示,43,String 類對象中的內(nèi)容一旦被初始化就不能在改變。而stringBuffer類用于封裝,內(nèi)容可以改變。
44,indexOf(int ch)方法用于返回一個字符在字符串中第一次出現(xiàn)的位置,若沒有該字符,返回-1.45,集合類,用于存儲一組對象,其中每個對象稱為元素,常用到的有:Vetor、Enumeration、ArrayList等。
46,從鍵盤上讀取數(shù)字:int b=System.in.read();Vector.addElement():向Vector中添加元素。
47,Collection,Set與List三者區(qū)別:Collection是父類,通用集合類,各元素對象無指定順序,允許有重復(fù)元素和null元素對象。Set為子類,無指定順序,不允許有重復(fù)元素,最多允許一個null元素對象。List也為子類,有指定順序,允許有重復(fù)元素和多個null元素對象。
48,Hashtable類:Hashtable像Vector一樣動態(tài)存儲一系列對象,而且對存儲的每個對象都要安排另一個對象與之相關(guān)聯(lián)。用put()存儲數(shù)據(jù): Hashtable ht=new Hashtable();Ht.put(“one”,new Integer(1));檢索數(shù)據(jù)用get方法: Integer n=(Integer)ht.get(“two”);If(n!=null){
System.out.println(“two=”+n);}
要成功檢索某個字,用作關(guān)鍵字的類必須覆蓋Object.hashtableCode()和Object.equals().49.Properties類:Hashtable類的子類,增加了講Hashtable對象中的關(guān)鍵字和值保存到文件和從文件中讀取關(guān)鍵字和值到Hashtable對象中的方法。如果要用Properties.store方法存儲Properties對象中的內(nèi)容,每個屬性的關(guān)鍵字和值都必須是String類型。
50,System類中的exit方法用于結(jié)束java虛擬機運行的程序。currentTimeMills():可以檢測程序運行的時間。Java虛擬機系統(tǒng)變量或者系統(tǒng)環(huán)境變量都是變量和值成對出現(xiàn)。getProperties方法獲取java虛擬機系統(tǒng)屬性,setProperties方法用于設(shè)置系統(tǒng)屬性。
51,Date類:日期時間的類;Calendar:日期字段相互間的操作類; Calendar.add():增加時間;Calendar.Set():設(shè)置時間;Calendar.get():獲取時間。Calendar類位于java.util包中
52.TimerTash類實現(xiàn)了Runable接口,要運行的任務(wù),由它里面實現(xiàn)的run方法來完成。
53,Math類包含了所用于幾何和三角運算的方法,Random類一個偽隨機數(shù)產(chǎn)生類。
54,F(xiàn)ile類:IO包中唯一代表磁盤文件本身信息的類,而不是文件中的內(nèi)容。File f=new File(“hello.txt”);If(f.exist()){f.delete();} Else {f.createNewFile();}
System.out.println(“File name:”+f.getName());獲取文件的名稱 System.out.println(“File path:”+f.getPath());獲取文件的路徑 System.out.println(f.exist()?”exist”:”not exist”);判斷文件是否存在
55,RandomAccessFile類提供了眾多的文件訪問方法;RandomAccessFile類支持隨機訪問,但是不能訪問其他的Io設(shè)備,如網(wǎng)絡(luò)、內(nèi)存映像等。兩種構(gòu)造方法:
new RandomAccessFile(f,”rw”);可以讀寫 new RandomAccessFile(f,”r”);只讀
56,流是字節(jié)序列的抽象概念。文件是數(shù)據(jù)的靜態(tài)存儲形式流是數(shù)據(jù)傳輸時的形態(tài)。流分為兩種:節(jié)點流類和過濾流類。57,InputStream類方法:int read();讀取方法 void close();讀取后要關(guān)閉文件
58,F(xiàn)ileInputStream inone=new FileInputStream(“hello.test”);等同于 File f=new File(“hello.test”);
FileInputStream intwo=new FileInputStream(f);
59,System.in連接到鍵盤,而System.out連接到顯示器,用-1作為鍵盤輸入的結(jié)束。
60,PipedInputStream與PipedOntputStream類:創(chuàng)建管道通信,使用管道流類,可以實現(xiàn)各個程序模塊之間的耦合通信。
61,DateOutputStream類提供了三個寫入字符串方法:-public final void writeByte(String s)-public final void writeChars(String s)
-public final void writeUTF(String s)
62,ObjectInputStream、ObjectInputStream用于從底層輸入流中讀取對象類型的數(shù)據(jù)和將對象類型的數(shù)據(jù)寫入到底層輸出流。
63,避免頻繁地在字符與字節(jié)間進行轉(zhuǎn)換,最好不要直接使用InputStreamReader和OutputStreamWriter類讀寫數(shù)據(jù),應(yīng)盡量使用BufferedWriter類包裝OutputStreamWriter類,用BufferredReader類包裝InputStreamReader。InputStreamrReader和OutputStreamWriter用于將字節(jié)轉(zhuǎn)換成字符流來讀寫的兩個類。
63,讀取一行文本用BufferredReader。
64,printStackTrace()用于將異常信息打印在標(biāo)準(zhǔn)輸出設(shè)備上。65,AWT:應(yīng)用窗口工具集;GUI:圖形用戶界面。66,將窗口從內(nèi)存中顯示出來用Frame.setViseble(true);Frame.setSize(int x,int y);設(shè)置窗口大小 Frame.add(new Button(“OK”));增加一個新按鈕
67,GUI:包括基本組件和容器。Frame.dispose()將窗口對象釋放,但線程消失,而Frame.setVisible(false);窗口不顯示但程序沒有結(jié)束。
68,事件適配器:事件監(jiān)聽器接口的最簡單的實現(xiàn)類,稱為Adapter。69,調(diào)用enableevents(long eventsToEnable))方法,可以在即使沒有注冊事件監(jiān)聽器情況下,組件也能夠?qū)δ承╊愋偷臅r間進行響應(yīng)和產(chǎn)生相應(yīng)的事件對象。70,GraPhics類與圖形繪制有關(guān)。GraPhics.draw String()方法的坐標(biāo)參數(shù)是左下面,這和其他的坐標(biāo)在左上方是不一樣的。
71,設(shè)置圖形顏色:GraPhics.setColor(Color.Red);顏色英文須大寫 72使用GraPhics.drawImage(Image img,int s,int y,imageObserver observer)方法顯示圖像。
73,與菜單相關(guān)的類:MenuBar、Menu、MenuItem。創(chuàng)建菜單的過程:先創(chuàng)建一個菜單條,再把幾個菜單掛在菜單條上,最后在每個菜單上添加菜單項。也可以在菜單上創(chuàng)建子菜單。
74Container容器類,所有容器類的父類,Container.add()用于將組件添加到容器中。
75,Dialog類用于產(chǎn)生對話框,分為模態(tài)對話框和非模態(tài)對話框兩種。76,Checkbox類用來建立單選按鈕和多選按鈕,單選按鈕和多選按鈕語義事件為ItemEvent,對應(yīng)的監(jiān)聽器接口為ItemOutstream。
77,panel容器類,產(chǎn)生空白面板,可容納多個組件,不能獨立存在。78,ScrollPane用于產(chǎn)生滾動窗口。79,布局管理器管理組件在容器中的布局。
BroderLagout:NORTH、WEST、SOUTH、EAST、CENTER FlowLagout:布局分配是從左到右從上到下
GridLagout:網(wǎng)格布局,模塊大小完全相同,也是從左到右,從上到下 cardLagout:多個組件交替顯示,只有最上面的那一個可見。Container.setLagout(null)用于取消布局管理器
Container.setBounds(x1.y1,x2,y2)用坐標(biāo)來設(shè)置組件位置
80,Swing提供了豐富的GUi組件,增強了AWT中原有組件的功能。JFC:java功能類,集合了Swing組件和其他能夠開發(fā)API類。
81,JFrame是與AWT中的Frame相對應(yīng)的Swing組件,只能有一個唯一組件——JRootPane;
82,Applet:嵌套在網(wǎng)頁中的小程序。
83,瀏覽器顯示網(wǎng)頁的原理和打開記事本方式一樣
84,Applet由瀏覽器來啟動執(zhí)行過程:1)瀏覽器載入HTML文件。2)瀏覽器載入HTML文件中引用的Applet字節(jié)碼。3)瀏覽器啟動java虛擬機執(zhí)行Applet; 85Applet需要覆蓋的方法:init()、start()、stop()、destroy()、paint()。鼠標(biāo)事件監(jiān)聽器: MouseListener()。
86,Thread.sleep(1000);語句需要捕獲異常,用try…catch….語句捕獲
87,Applet相關(guān)知識:容器與插件的程序架構(gòu)設(shè)計模式、Applet程序中的控制臺輸出。
88,Applet程序的限制:不能啟動執(zhí)行其他應(yīng)用程序,不能進行文件IO操作,不能調(diào)用本機代碼,不能與Applet所在的主機之外的其他主機進行網(wǎng)絡(luò)連接; 89,Applet標(biāo)記的詳細(xì)表:
[archive=archiveList]方括號的為可選項 Code=appletFile.class不帶方括號的為必選項
90,OBJECT標(biāo)記:使用HTMLContainer將Applet標(biāo)記轉(zhuǎn)換成OBJECT標(biāo)記。使用OBJECT標(biāo)記執(zhí)行Applet小程序的java解釋器被作為一個ActiveX插件使用。使用OBJECT標(biāo)記比Applet標(biāo)記多了自動下載和安裝java解釋器的功能。91,網(wǎng)絡(luò)協(xié)議:TCP/IP UDP
92,獲取本機IP地址:在命令行輸入:ipcongif;端口號的范圍是0-65535之間。93,TCP傳輸控制協(xié)議,是面向連接的通信協(xié)議 UDP用戶數(shù)據(jù)報協(xié)議,是無連接的通信協(xié)議
94,Socket是網(wǎng)絡(luò)驅(qū)動層提供給應(yīng)用程序編程的接口和一種機制。網(wǎng)絡(luò)編程類位于java.net包中。95,DatagramSocket類用于UDP通信,ServerSocket類用于TCP通信的服務(wù)器端。Socket類用于TCP通信的服務(wù)器端和客戶端。
96,了解DatagramSocket類三種構(gòu)造方法,close()關(guān)閉方法,send(DatagramPackage p)發(fā)送數(shù)據(jù)包方法;receive(DatagramPackage p)接受數(shù)據(jù)包方法
97,DatagramPackage提供了兩種構(gòu)造方法。getInetAddresss用于表示計算機IP地址的一個類,類中有g(shù)etByName方法,返回一個相應(yīng)的inetAddress實例對象。
98,TCP網(wǎng)絡(luò)編程工作原理,利用TCP協(xié)議進行,兩個應(yīng)用程序有主次之分,主的稱為服務(wù)器端,另一個稱為客戶端。
99,客戶端與服務(wù)器端交互過程:1)服務(wù)器程序創(chuàng)建一個ServerSocket,然后調(diào)用Accept方法等待客戶來連接。2)客戶端程序創(chuàng)建一個Socket并請求與服務(wù)器建立連接。3)服務(wù)器接受客戶的連接請求,并創(chuàng)建一個新的Socket與該客戶建立專線連接。4)建立了連接的兩個Socket在一個單獨的線程上對話。5)服務(wù)器開始等待新的連接請求,當(dāng)新的連接請求達到時,重復(fù)步驟2到5.100,TCP服務(wù)器程序必須先啟動運行,TCP客戶程序才能連接上TCP服務(wù)器,使用Windous提供的telent程序測試服務(wù)器程序,使用BufferredReader包裝類,從網(wǎng)絡(luò)輸入流中一次讀取一行文本。
101,使用netstart命令查看當(dāng)前正在被使用的TCP端口號。通過一個配置參數(shù)來指定TCP服務(wù)器程序所使用的端口號。
102,ObjectInputStream和ObjectOutputStream可以從底層輸入流中讀取對象類型的數(shù)據(jù)和將對象類型的數(shù)據(jù)寫入到底層輸出流。
103,使用ObjectInputStream和ObjectOutputStream來包裝底層網(wǎng)絡(luò)字節(jié)流,TCP服務(wù)器和TCP客戶端之間可以接受對象類型的數(shù)據(jù)。
104URL:統(tǒng)一資源定位器,由協(xié)議、主機名、端口號和資源名組成,了解相對URL和絕對URl的含義。
第二篇:JAVA學(xué)習(xí)日記
第一天
Javac –version 檢查JDK版本
Path設(shè)置技巧
JAVA_HOME環(huán)境變量 設(shè)置為bin前面的路徑 設(shè)置為Path = %JAVA_HOME%bin 避免對系統(tǒng)環(huán)境的頻繁修改造成錯誤 path只支持可執(zhí)行文件 配置臨時環(huán)境變量 set path = XXXX 增加臨時環(huán)境變量 set path=XXX;%path% 環(huán)境變量從頭開始查找
Hello World 任何事物的第一步
代碼:計算機能識別的特殊格式的單詞 class Demo{ } 源程序經(jīng)過編譯 計算機能識別的文件 一次編譯到處運行
任何程序都有入口 主函數(shù)就是入口 被虛擬機調(diào)用 保證程序的獨立運行
Javac 檢查源代碼的正確性 保證語法正確 經(jīng)驗來源于錯誤
java命令對應(yīng)虛擬機JVM 虛擬機將類文件加載入內(nèi)存
classpath 類文件路徑
將java的類文件目錄告訴JVM 未設(shè)置在當(dāng)前路徑 set classpath=c:xxxxx;加了分號虛擬機會在當(dāng)前目錄下查找類文件
閱讀性加強 set classpath=.;c:xxxxx;
找不到類文件(1)類名錯誤
(2)set classpath設(shè)置
java文件名 類名要一致
第二天
高級語言的特征:關(guān)鍵字 標(biāo)識符 注視 變量和常量 運算符 語句 函數(shù) 數(shù)組 但是表現(xiàn)形式不同 掌握兩點:(1)表現(xiàn)形式(2)什么時候用 關(guān)鍵字:被賦予特殊含義的單詞 關(guān)鍵字都是小寫 類名首字母大寫
標(biāo)示符:程序中自定義的一些名稱
標(biāo)示符組成:26個大小寫字母 數(shù)字 _ $符號(1)數(shù)字不可以開頭(2)不可以使用關(guān)鍵字 名字盡量要有意義 java中嚴(yán)格區(qū)分大小寫 標(biāo)識符可以做 類名 變量名 方法名
下劃線 美元符號的作用 用于連接某些名稱
文檔注釋可以用javadoc提取出來
多行注釋不能嵌套
注釋可以進行代碼的調(diào)試 注釋不寫入字節(jié)碼 代碼中一定要寫注釋
代碼是思想表現(xiàn)形式的一種
寫代碼前必須格式 /* 需求:XXXX 思路: 1.XXXX 2.。。。步驟: 1.XXXXX */
常量表示不能改變的數(shù)值
常量分類:整數(shù)常量 小數(shù)常量 布爾常量 字符常量 字符串常量 null常量(只有一個值null)
整數(shù)的進制表現(xiàn)形式:二進制 八進制 十進制 十六進制 八進制占二進制三位 十六進制占二進制4位 常用的是二進制和十六進制
負(fù)數(shù)在內(nèi)存中是以補碼的形式存在的 負(fù)數(shù)二進制最高位是1 整數(shù)是0 補碼的算法:負(fù)數(shù)的絕對值取反加1
變量的概念:
內(nèi)存中的一個存儲區(qū)域 該區(qū)域有自己的名稱和類型
該區(qū)域的數(shù)據(jù)可以在同一個類型的范圍內(nèi)不斷變化
作用:用來不斷的存放同一類型的常量,并可以重復(fù)使用 變量的格式
數(shù)據(jù)類型 變量名 = 初始化值 變量就如同數(shù)學(xué)中的未知數(shù) 當(dāng)數(shù)據(jù)不確定時就定義變量 Java的數(shù)據(jù)類型
變量不能重復(fù)定義 局部變量必須初始化
實例變量可以不初始化 虛擬機會為實例變量初始化
運算兩端必須都是相同類型的變量 Java整形默認(rèn)是int 浮點默認(rèn)是double 強制轉(zhuǎn)換必須小心使用,會丟失精度 int x = 2;byte b = 3;b =(byte)(x+b);ASII碼表 美國信息交換表 GB2312 國標(biāo)表 GBK 國標(biāo)擴展表
Unicode表 國際標(biāo)準(zhǔn)碼表 強轉(zhuǎn)例子: byte b = 4;b = 3+7;byte b1 = 3;byte b2 = 4;b = b1+b2;//err 精度損失
分析:byte b =4;4在java中默認(rèn)是int型 編譯器會先檢查所賦的值在-128~127范圍內(nèi),在的話自動強轉(zhuǎn)為byte類型 b = b1+b2;//err 精度損失
b1,b2 為變量范圍不確定 編譯器不能確定值,所以編譯報錯 注意:右邊無法確定則無法判斷并賦值,編譯無法通過 int 類型
int x1= Integer.MAX_VALUE;int x2 = 2;int x = x1 + x2;會產(chǎn)生精度丟失 負(fù)數(shù)只參考被取余的數(shù)
5%-2 == 1 int a = 3,b;b = a++;內(nèi)存中的過程:a變量先在內(nèi)存中劃一塊臨時區(qū)域保存a變量的值,再自增運算,最后將臨時區(qū)域的值賦值給b變量 面試小例子1:int i =3;i =i ++;//i的值為3 過程:i=i+1 i = i在臨時區(qū)域的值 面試小例子2:short s = 3;
s+=4;//加等會在底層自動轉(zhuǎn)換類型 與short s =3 類似
s = s+4;//error 損失精度
第三天 運算符
比較運算符運算完的結(jié)果必須是true或者是false 邏輯運算符:用于連接兩個boolean類型的表達式 & 與符號運算特點: true & true true true & false false false & false false 與運算兩邊只要有一邊為false結(jié)果為false 只有兩邊都為true結(jié)果為true | 或運算符特點: true | true true true | false true false | false false 或運算兩邊只要有一邊為true結(jié)果為true 只有兩邊都為false結(jié)果為false ^ 異或運算符 和或有點不一樣 true | true false true | false true false | false false 異或運算規(guī)律:相同為false 不同為true 面試細(xì)節(jié):
&& 短路與 當(dāng)左邊為false時右邊不運算 || 短路或 當(dāng)左邊為true時右邊不運算
位運算符
& 運算
可以取二進制數(shù)的某一段
^ 異或符號 一個數(shù)異或同一個數(shù)兩次,結(jié)果還是這個數(shù) 6^3^3 = 6;~ 取反
一個正數(shù)的反碼是這個正數(shù)的負(fù)數(shù)減一 6的反碼是-7
移位運算符號
>> 右移 3>>2 右移2位 符號位補最高位 右移n位其實就是該數(shù)字除以2^n次方
<< 左移 3<<2 左移兩位 最低位補零 左移n位其實就是該數(shù)字乘以2^n次方
>>> 無符號位右移
3>>>2 無符號位右移2位
對兩個值進行互換高效方法(不用第三方變量)int a = 5,b =3;a = a^b;b = a^b;a = a^b;
三元運算符
(表達式)?表達式1 : 表達式2
流程控制:順序結(jié)構(gòu) 判斷結(jié)構(gòu) 選擇結(jié)構(gòu) 循環(huán)結(jié)構(gòu) If語句時候要注意寫{ }
簡化格式簡化代碼書寫但是造成代碼可讀性變差 簡寫格式什么時候用?
當(dāng)if else運算后有具體結(jié)果時可以使用三目運算符替代
局部代碼塊可以節(jié)省內(nèi)存空間 可以定義局部變量的生命周期
代碼復(fù)用性 當(dāng)多個條件對應(yīng)一個結(jié)果時,可以講條件合并
switch表達式中的數(shù)據(jù)類型 byte short char int String enum switch{
case 1: case 2:
} switch多個對應(yīng)關(guān)系
if和switch的應(yīng)用
if:1.對具體的值進行判斷
2.對區(qū)間判斷
3.對運算結(jié)果是boolean類型的表達式進行判斷 switch:1.對具體的值進行判斷
2.值的個數(shù)通常是固定的
對于幾個固定的值判斷,建議使用switch語句,因為switch語句會將具體的答案都加載入內(nèi)存,效率相對高一些
循環(huán)結(jié)構(gòu)的代表性結(jié)構(gòu)有三個 while(){} do{} while()for(){} do{}while()特點無論條件如何循環(huán)體都要執(zhí)行
累加思想 計數(shù)器思想
for(表達式1;表達式2;表達式3){} 表達式2必須為boolean表達式 表達式1和3可以為任意表達式 for和while的區(qū)別
1.for和while可以互換
2.格式上的不同,在使用上有點小區(qū)別
控制循環(huán)的變量for只在for范圍內(nèi)有效 while在范圍大些 無限循環(huán)最簡單的形式 while(true){} for(;;)for第二個表達式默認(rèn)為true 什么時候使用循環(huán)結(jié)構(gòu)
當(dāng)對某些代碼執(zhí)行多次時,使用循環(huán)結(jié)構(gòu)完成
當(dāng)對一個條件進行一次判斷是,可以使用if語句 當(dāng)對一個條件進行多次判斷是可以使用while語句
第四天
大圈套小圈思想:有一種重復(fù)的情況,每種情況對應(yīng)其他的重復(fù)情況多次 轉(zhuǎn)義字符 n 回車 t 制表符 b 退格
r按下回車 Window系統(tǒng)中回車其實是有兩個符號組成的 rn Linux中回車符是 n 制表符 tab break:跳出
break作用范圍:要么是switch語句,要么是循環(huán)語句
記?。寒?dāng)break語句單獨存在時,下面不要定義其他語句,因為執(zhí)行不到會編譯錯誤 break跳出最近的循環(huán) continue :繼續(xù) 作用范圍:循環(huán)結(jié)構(gòu)
continue結(jié)束本次循環(huán),繼續(xù)下次循環(huán)
函數(shù)就是定義在類中的具有特定功能的小程序 函數(shù)特點:
(1)函數(shù)提高代碼的復(fù)用性,簡化書寫(2)定義函數(shù)將功能代碼封裝,(3)便于功能復(fù)用(4)函數(shù)被調(diào)用才執(zhí)行
注意:函數(shù)中只能調(diào)用函數(shù),不能定義函數(shù)
如何定義一個函數(shù) 通過兩個明確來完成
明確一:這個功能的結(jié)果是什么?
明確函數(shù)返回值
明確二:這個功能實現(xiàn) 過程中是否需要位置內(nèi)容參與?
明確參數(shù)列表
注意:返回值類型和參數(shù)類型沒有直接關(guān)系
函數(shù)內(nèi)存加載過程:
javac命令啟動java編譯器 java 命令 啟動java虛擬機
在運行時期java虛擬機尋找主函數(shù)main()
函數(shù)的重載 Overload 增強閱讀性 兩同一不同 1.同一個類中
2.相同的方法名
3.不同的參數(shù)列表
注意:函數(shù)重載與返回值無關(guān)
Java是嚴(yán)謹(jǐn)性的語言,如果函數(shù)出現(xiàn)調(diào)用的不確定性,會編譯失敗
函數(shù)重載使用動態(tài)綁定,當(dāng)程序運行時,JVM函數(shù)標(biāo)簽存入一張表中,當(dāng)調(diào)用函數(shù)時在表中查詢相應(yīng)的參數(shù)類型,即可調(diào)用相應(yīng)的方法
函數(shù)的重寫:Override: 1.在不同的類中
2.相同的方法名和參數(shù)類表
3.重寫函數(shù)的權(quán)限要比被重寫的函數(shù)權(quán)限大
4.函數(shù)的返回值是被重寫的函數(shù)的返回值的子類或者相同
數(shù)組:同一種數(shù)據(jù)類型的集合,其實數(shù)組就是一個容器 數(shù)組格式:靜態(tài)數(shù)組:int[] arr = new int[]{0,1,2,3,4};
動態(tài)數(shù)組:int[] arr = new int[length];
arr[0] = 0;
arr[1] = 1;
…………
arr[length-1] = n;JVM內(nèi)存的劃分 1.寄存器
cpu 2.本地方法區(qū)
與所在系統(tǒng)相關(guān) 3.方法區(qū)
4.棧內(nèi)存
5.堆內(nèi)存
棧內(nèi)存:存儲的都是局部變量(定義在方法中的變量),而且變量所屬的作用域一旦結(jié)束,該變量自動釋放 { }局部代碼塊 限定局部變量的生命周期
動態(tài)數(shù)組創(chuàng)建后會默認(rèn)初始化
堆內(nèi)存
存儲的是數(shù)組和對象 凡是new出來的對象 堆內(nèi)存不會隨時釋放
隊中存儲的是實體,實體中存儲多個數(shù)據(jù) 特點:
1. 每一個實體都有一個首地址值
2. 堆內(nèi)存中每一個變量都有默認(rèn)初始化值,根據(jù)類型不同而不同,整數(shù)是0,小數(shù)是0.0或0.0f boolean false char ‘u0000’(unicode碼)3. 垃圾回收機制
第五天
數(shù)組中常見的問題 1.角標(biāo)越界異常 2.空指針異常 格式一:
需要一個容器,但是不明確容器具體的數(shù)據(jù) 格式二
需要一個容器,存儲已知的具體數(shù)據(jù)
數(shù)組常見操作 基本動作:存、取
核心思想:對角標(biāo)的操作
獲取最值的思路:
1.定義一個變量存儲最值 2.比較數(shù)組的值得到最大值 3.存儲最大值
排序:
選擇排序和冒泡排序
選擇排序:大圈套小圈思想
選擇排序:
for(int i = 0;i for(int j =i+1;j for(int i = 0;i int num = arr[i]; int index = i; for(int j =i+1;j 冒泡排序: 解釋:外層循環(huán)-1 是因為最后一個數(shù)不用比較 外層循環(huán)控制比較的大次數(shù) 內(nèi)層循環(huán)-1是為了不將角標(biāo)越界 -i 是為了控制每次比較的元素數(shù)量 for(int i = 0;i 查找: public static int getIndex(int[] arr,int num){ for(int i =0,i if(arr[i] == num) return i;} return-1;} 折半查找法:二分法 數(shù)組必須是有序的 //方法一 public static int binserach(int[] arr,int key){ int left = 0; int right = arr.length-1; int mid =(left+right)/2; while(arr[mid]!=key){ if(arr[mid]>key){ right = mid-1; mid =(left+right)/2; } else if(arr[mid] left = mid+1; mid =(left+right)/2; } if(left>right)return-1; } return mid; } //方法二 public static int halfserach(int[] arr,int key){ int left = 0; int right = arr.length-1; while(left<=right){ int mid =(left+right)>>1; if(arr[mid] left = mid+1; else if(arr[mid]>key) right = mid-1; else return mid; } return-1; } 面試題: 給定一個有序的數(shù)組,如果往該數(shù)組中存儲一個元素,并保證這個數(shù)組還是有序的,那么這個元素的存儲的角標(biāo)位如何獲取 思路:用折半查找法查找保證數(shù)組有序的位置 要放的位置就是在最后一次比較left和right角標(biāo)的時候left的值 public static int halfserach(int[] arr,int key){ int left = 0; int right = arr.length-1; while(left<=right){ int mid =(left+right)>>1; if(arr[mid] left = mid+1; else if(arr[mid]>key) right = mid-1; else return mid; } return min; } Arrays.binarySerach();當(dāng)數(shù)不存在時返回插入點負(fù)值-1 將一個整數(shù)的16進制表現(xiàn)形式 public static String toHex(int num){ char[] nums = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; return nums[(num>>4)&0xf]+""+nums[num&0xf]; } 第六天 二維數(shù)組定定義方法 方法一: int[][] arr = new arr[2][3];方法二: int[][] arr = new arr[2][];arr[0] = new int [3];..........初始化 int[][] arr = {{1,2,3}, {4,5,6}, {7,8,9}}; 面向?qū)ο?/p> 面向過程:舉例:大象裝進冰箱 打開冰箱-> 存儲大象->關(guān)上冰箱 對于面向過程思想強調(diào)過程(動作)C語言 面向?qū)ο笫且环N思想 面向?qū)ο髲娬{(diào)對象(實體) 總結(jié):面向?qū)ο缶褪菍ο蟮姆椒ㄟM行封裝,不關(guān)注具體實現(xiàn)的具體步驟 C++ Java C# 特點: 1.面向?qū)ο缶褪且环N常見的思想,符合人們的思考習(xí)慣 2.面向?qū)ο蟮某霈F(xiàn),將復(fù)雜問題簡單化 3.面向?qū)ο蟮某霈F(xiàn),讓曾經(jīng)在過程中的執(zhí)行者,變成了對象中的指揮者 名詞定義法 人開門 人是一個對象 門是一個對象 類與對象的關(guān)系:用java語言對現(xiàn)實生活中的事物進行描述,通過類的形式來體現(xiàn)的 對象:其實就是該類事物實實在在存在的個體 類是某一類對象的抽象體現(xiàn) 類:事物的描述 對象:該類事物的實例,在java中通過new來創(chuàng)建的 成員:成員變量(屬性) 成員函數(shù)(行為) 一旦產(chǎn)生對象,對象中存在類中的內(nèi)容 成員變量和局部變量的區(qū)別: 1.成員變量定義在類中,整個類中都可以訪問 局部變量定義在函數(shù),語句,局部代碼塊中,只在多數(shù)的區(qū)域有效 2.成員變量存在于堆內(nèi)存對象中 局部變量存在以棧內(nèi)存的方法中 3.成員變量隨著對象的創(chuàng)建而存在,綏中對象而消亡 局部變量隨著所屬的區(qū)域執(zhí)行而存在,隨著所屬區(qū)域消亡而釋放 4.成員變量有默認(rèn)初始化值 局部變量沒有默認(rèn)初始化值必須程序員手動初始化 5.成員變量可以不初始化 局部變量必須要初始化 匿名對象 1.當(dāng)對象方法僅進行一次調(diào)用的時候,就可以簡化為匿名對象 2.匿名對象可以作為實際參數(shù)進行傳遞 面向?qū)ο笕筇匦裕悍庋b、繼承、多態(tài) 封裝: 隱藏對象的屬性和實現(xiàn)細(xì)節(jié),僅對外提供公共訪問方式 好處:將變量隔離、便于使用、提高復(fù)用性、保證數(shù)據(jù)安全 封裝原則: 將不需要對外提供的隱藏起來 注意:私有僅僅是封裝的一種體現(xiàn)而已 保證數(shù)據(jù)的安全,隱藏代碼 java最小的封裝體是函數(shù) 第七天 構(gòu)造函數(shù) 特點:1.函數(shù)名與類名一致 2.不能定義函數(shù)返回值類型 3.沒有返回值 class Human{ private String name; private int age; public Human(String name){//定義一個有參數(shù)的構(gòu)造函數(shù) this.name = name;} } 構(gòu)造函數(shù):在構(gòu)建創(chuàng)造對象時調(diào)用的函數(shù) 構(gòu)造函數(shù)作用:給對象進行初始化 創(chuàng)建對象都必須通過構(gòu)造函數(shù)初始化 一個類中如果沒有定義構(gòu)造函數(shù),那么該類中就有一個默認(rèn)的空參數(shù)構(gòu)造函數(shù) 如果在類中定義了指定的構(gòu)造函數(shù)就沒有默認(rèn)的構(gòu)造函數(shù) 一般函數(shù)和構(gòu)造函數(shù)的區(qū)別 構(gòu)造函數(shù):對象創(chuàng)建時就會調(diào)用與之對應(yīng)的構(gòu)造函數(shù),對對象初始化 一般函數(shù):對象創(chuàng)建后,需要函數(shù)功能時候才會調(diào)用 構(gòu)造函數(shù):對象創(chuàng)建時會調(diào)用,只調(diào)用一次 一般函數(shù):對象創(chuàng)建后,可以被調(diào)用多次 什么時候定義構(gòu)造函數(shù) 在描述事物時,該事物已經(jīng)存在的屬性 (Overload)函數(shù)重載:增加復(fù)用性,增強閱讀性 構(gòu)造函數(shù)內(nèi)存分配 構(gòu)造函數(shù)中有return語句 當(dāng)成員變量和局部變量重名,可以用關(guān)鍵字this來區(qū)分 this:代表對象,代表當(dāng)前函數(shù)所屬對象的引用 誰調(diào)用this代表誰 注意:一個類中的成員想要被執(zhí)行必須有對象 this也可以在構(gòu)造函數(shù)中調(diào)用其他構(gòu)造函數(shù) 注意:只能 定義在構(gòu)造函數(shù)第一行,因為初始化動作必須先執(zhí)行 只要在本類中使用本類屬性或方法使用this static關(guān)鍵字 增強代碼復(fù)用性 static特點: 1. static是一個修飾符,用于修飾成員 2. static修飾的成員被所有對象共享 3. static優(yōu)先于對象存在,因為static的成員隨著類的加載就已經(jīng)存在了 4. static修飾的成員可以以 類名.成員變量 方式調(diào)用 5. static修飾的數(shù)據(jù)是共享數(shù)據(jù),對象中的存儲是特有的數(shù)據(jù) 成員變量和類變量的區(qū)別 1.兩個變量的生命周期不同 成員變量隨著對象的創(chuàng)建而存在,隨著對象的被回收而釋放 類變量隨著類的加載而存在,隨著類的消失而消失 2.調(diào)用方式不同 成員變量只可以被對象調(diào)用 類變量可以被類名和對象調(diào)用 3.別名不同 成員變量為實例變量 靜態(tài)變量稱為類變量 4.成員變量在堆中 類變量在方法區(qū)的靜態(tài)去(共享數(shù)據(jù)區(qū)) 方法存儲在【方法區(qū)】中 方法中的代碼也存放在方法區(qū) static使用注意事項: 1.靜態(tài)方法只能訪問靜態(tài)成員。(非靜態(tài)可以訪問靜態(tài)和非靜態(tài)成員)2.靜態(tài)方法中不可以定義this和super關(guān)鍵字 3.(main)主函數(shù)是靜態(tài)的 public static void main(String[] args)主函數(shù)特殊之處: 1.格式固定 2.被JVM所識別和調(diào)用 public:因為權(quán)限必須是最大的 static:不需要對象的,直接用主函數(shù)所屬類名調(diào)用即可 void:主函數(shù)沒有具體的返回值 main:函數(shù)名,不是關(guān)鍵,只是一個JVM識別的固定的名字 String[] args:主函數(shù)的參數(shù)列表,是一個數(shù)組類型的參數(shù),而且元素都是字符串類型 主函數(shù)留參數(shù)原因:程序員將自定義的參數(shù)傳入程序,使程序自定義性更高 類加載:類在什么時候用什么時候加載 靜態(tài)什么時候用 1.靜態(tài)變量 當(dāng)分析對象所具備的成員變量的值都是相同的 當(dāng)這個成員可以被靜態(tài)修飾 2.靜態(tài)方法 該函數(shù)功能是否訪問到對象中的非靜態(tài)數(shù)據(jù) 靜態(tài)代碼塊 隨著類的加載而執(zhí)行,而且只執(zhí)行一次 作用: 用于給類進行初始化 執(zhí)行順序: 類加載->靜態(tài)代碼塊->構(gòu)造代碼塊->構(gòu)造函數(shù) 構(gòu)造代碼塊:可以對所有對象初始化 買本《java瘋狂講義》 或者 在網(wǎng)上下載下來看看主要看java語法部分和面向?qū)ο缶幊滩糠诌@些要速度過 接下來開始寫一些小例子 從例子里面學(xué)習(xí)會更快例子差不多了就開始web方面的涉獵,先學(xué)struts->jsp->servlet->hibernate->spring學(xué)習(xí)javascript .如何學(xué)習(xí)Java? 3.1 Java學(xué)習(xí)路線 3.1.1 基礎(chǔ)語法及Java原理基礎(chǔ)語法和Java原理是地基,地基不牢靠,猶如沙地上建摩天大廈,是相當(dāng)危險的。學(xué)習(xí)Java也是如此,必須要有扎實的基礎(chǔ),你才能在J2EE、J2ME領(lǐng)域游刃有余。參加SCJP(SUN公司認(rèn)證的Java程序員)考試不失為一個好方法,原因之一是為了對得起你交的1200大洋考試費,你會更努力學(xué)習(xí),原因之二是SCJP考試能夠讓你把基礎(chǔ)打得很牢靠,它要求你跟JDK一樣熟悉Java基礎(chǔ)知識;但是你千萬不要認(rèn)為考過了SCJP就有多了不起,就能夠獲得軟件公司的青睞,就能夠獲取高薪,這樣的想法也是很危險的。獲得“真正”的SCJP只能證明你的基礎(chǔ)還過得去,但離實際開發(fā)還有很長的一段路要走。 3.1.2 OO思想的領(lǐng)悟掌握了基礎(chǔ)語法和Java程序運行原理后,我們就可以用Java語言實現(xiàn)面向?qū)ο蟮乃枷肓?。面向?qū)ο?,是一種方法學(xué);是獨立于語言之外的編程思想;是 CBD基于組件開發(fā)的基礎(chǔ);屬于強勢技術(shù)之一。當(dāng)以后因工作需要轉(zhuǎn)到別的面向?qū)ο笳Z言的時候,你會感到特別的熟悉親切,學(xué)起來像喝涼水這么簡單。 使用面向?qū)ο蟮乃枷脒M行開發(fā)的基本過程是: ●調(diào)查收集需求。●建立用例模型。 ●從用例模型中識別分析類及類與類之間的靜態(tài)動態(tài)關(guān)系,從而建立分析模型?!窦?xì)化分析模型到設(shè)計模型。●用具體的技術(shù)去實現(xiàn)。●測試、部署、總結(jié)。 3.1.3 基本API的學(xué)習(xí)進行軟件開發(fā)的時候,并不是什么功能都需要我們?nèi)崿F(xiàn),也就是經(jīng)典名言所說的“不需要重新發(fā)明輪子”。我們可以利用現(xiàn)成的類、組件、框架來搭建我們的應(yīng)用,如SUN公司編寫好了眾多類實現(xiàn)一些底層功能,以及我們下載過來的JAR文件中包含的類,我們可以調(diào)用類中的方法來完成某些功能或繼承它。那么這些類中究竟提供了哪些方法給我們使用?方法的參數(shù)個數(shù)及類型是?類的構(gòu)造器需不需要參數(shù)?總不可能SUN公司的工程師打國際長途甚至飄洋過海來告訴你他編寫的類該如何使用吧。他們只能提供文檔給我們查看,Java DOC文檔(參考文獻4.4)就是這樣的文檔,它可以說是程序員與程序員交流的文檔?;続PI指的是實現(xiàn)了一些底層功能的類,通用性較強的API,如字符串處理/輸入輸出等等。我們又把它成為類庫。熟悉API的方法一是多查Java DOC文檔(參考文獻4.4),二是使用JBuilder/Eclipse等IDE的代碼提示功能。 3.1.4 特定API的學(xué)習(xí)Java介入的領(lǐng)域很廣泛,不同的領(lǐng)域有不同的API,沒有人熟悉所有的API,對一般人而言只是熟悉工作中要用到的API。如果你做界面開發(fā),那么你需要學(xué)習(xí)Swing/AWT/SWT等API;如果你進行網(wǎng)絡(luò)游戲開發(fā),你需要深入了解網(wǎng)絡(luò)API/多媒體API/2D3D等;如果你做WEB開發(fā),就需要熟 悉Servlet等API啦??傊枰鶕?jù)工作的需要或你的興趣發(fā)展方向去選擇學(xué)習(xí)特定的API。 3.1.5 開發(fā)工具的用法在學(xué)習(xí)基礎(chǔ)語法與基本的面向?qū)ο蟾拍顣r,從鍛煉語言熟練程度的角度考慮,我們推薦使用的工具是Editplus/JCreator+JDK,這時候不要急于上手JBuilder/Eclipse等集成開發(fā)環(huán)境,以免過于關(guān)注IDE的強大功能而分散對Java技術(shù)本身的注意力。過了這一階段你就可以開始熟悉 IDE了。程序員日常工作包括很多活動,編輯、編譯及構(gòu)建、調(diào)試、單元測試、版本控制、維持模型與代碼同步、文檔的更新等等,幾乎每一項活動都有專門的工具,如果獨立使用這些工具的話,你將會很痛苦,你需要在堆滿工具的任務(wù)欄上不斷的切換,效率很低下,也很容易出錯。在JBuilder、Eclipse等IDE中已經(jīng)自動集成編輯器、編譯器、調(diào)試器、單元測試工具JUnit、自動構(gòu)建工具ANT、版本控制工具CVS、DOC文檔生成與更新等等,甚至可以把UML建模工具也集成進去,又提供了豐富的向?qū)椭煽蚣艽a,讓我們的開發(fā)變得更輕松。應(yīng)該說IDE發(fā)展的趨勢就是集成軟件開發(fā)中要用到的幾乎所有工具。從開發(fā)效率的角度考慮,使用IDE是必經(jīng)之路,也是從一個學(xué)生到一個職業(yè)程序員轉(zhuǎn)變的里程碑。Java開發(fā)使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等幾種;而Eclipse、JBuilder 占有的市場份額是最大的。JBuilder在近幾年來一直是Java集成開發(fā)環(huán)境中的霸主,它是由備受程序員尊敬的Borland公司開發(fā),在硝煙彌漫的 Java IDE大戰(zhàn)中,以其快速的版本更新?lián)魯BM的Visual Age for Java等而成就一番偉業(yè)。IBM在Visual Age for Java上已經(jīng)無利可圖之下,干脆將之貢獻給開源社區(qū),成為Eclipse的前身,真所謂“柳暗花明又一村”。浴火重生的Eclipse以其開放式的插件擴展機制、免費開源獲得廣大程序員(包括幾乎所有的骨灰級程序員)的青睞,極具發(fā)展?jié)摿Α?/p> 3.1.6 學(xué)習(xí)軟件工程 對小型項目而言,你可能認(rèn)為軟件工程沒太大的必要。隨著項目的復(fù)雜性越來越高,軟件工程的必要性才會體現(xiàn)出來。參見“軟件開發(fā)學(xué)習(xí)路線”小節(jié)。 3.2學(xué)習(xí)要點 確立的學(xué)習(xí)路線之后,我們還需要總結(jié)一下Java的學(xué)習(xí)要點,這些要點在前文多多少少提到過,只是筆者覺得這些地方特別要注意才對它們進行匯總,不要嫌我婆婆媽媽啊。 3.2.1勤查API文檔當(dāng)程序員編寫好某些類,覺得很有成就感,想把它貢獻給各位苦難的同行。這時候你要使用“Javadoc”工具(包含在JDK中)生成標(biāo)準(zhǔn)的Java DOC文檔,供同行使用。J2SE/J2EE/J2ME的DOC文檔是程序員與程序員交流的工具,幾乎人手一份,除了菜鳥之外。J2SE DOC文檔官方下載地址:http://Java.sun.com/j2se/1.5.0/download.jsp,你可以到google搜索CHM版本下載。也可以在線查看:http://Java.sun.com/j2se/1.5.0/docs/api/index.html。對待DOC文檔要像毛主席語錄,早上起床念一遍,吃飯睡覺前念一遍。當(dāng)需要某項功能的時候,你應(yīng)該先查相應(yīng)的DOC文檔看看有沒有現(xiàn)成的實現(xiàn),有的話就不必勞神費心了直接用就可以了,找不到的時候才考慮自己實現(xiàn)。使用步驟一般如下: ●找特定的包,包一般根據(jù)功能組織?!裾倚枰褂妙?,類命名規(guī)范的話我們由類的名字可猜出一二?!襁x擇構(gòu)造器,大多數(shù)使用類的方式是創(chuàng)建對象?!襁x擇你需要的方法。 3.2.2 查書/google->寫代碼測試->查看源代碼->請教別人 當(dāng)我們遇到問題的時候該如何解決?這時候不要急著問別人,太簡單的問題,沒經(jīng)過思考的問題,別人會因此而瞧不起你??梢韵日艺視絞oogle中搜一下看看,絕大部分問題基本就解決了。而像“某些類/方法如何使用的問題”,DOC文檔就是答案。對某些知識點有疑惑是,寫代碼測試一下,會給你留下深刻的印象。而有的問題,你可能需要直接看 API的源代碼驗證你的想法。萬不得已才去請教別人。 3.2.3學(xué)習(xí)開源軟件的設(shè)計思想 Java領(lǐng)域有許多源代碼開放的工具、組件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive論壇、PetStore寵物店等等多如牛毛。這些可是前輩給我們留下的瑰寶呀。入寶山而空手歸,你心甘嗎?對這些工具、框架進行分析,領(lǐng)會其中的設(shè)計思想,有朝一日說不定你也能寫一個XXX框架什么的,風(fēng)光一把。分析開源軟件其實是你提高技術(shù)、提高實戰(zhàn)能力的便捷方法。 3.2.4 規(guī)范的重要性 沒有規(guī)矩,不成方圓。這里的規(guī)范有兩層含義。第一層含義是技術(shù)規(guī)范,多到http://004km.cn下載JSRXXX規(guī)范,多讀規(guī)范,這是最權(quán)威準(zhǔn)確最新的教材。第二層含義是編程規(guī)范,如果你使用了大量的獨特算法,富有個性的變量及方法的命名方式;同時,沒給程序作注釋,以顯示你的編程功底是多么的深厚。這樣的代碼別人看起來像天書,要理解談何容易,更不用說維護了,必然會被無情地掃入垃圾堆。Java編碼規(guī)范到此查看或下載http://Java.sun.com/docs/codeconv/,中文的也有,啊,還要問我在哪,請參考3.2.2節(jié)。 3.2.5 不局限于Java 很不幸,很幸運,要學(xué)習(xí)的東西還有很多。不幸的是因為要學(xué)的東西太多且多變,沒時間陪老婆家人或女朋友,導(dǎo)致身心疲憊,嚴(yán)重者甚至導(dǎo)致抑郁癥。幸運的是別人要搶你飯碗絕非易事,他們或她們需要付出很多才能達成心愿。Java不要孤立地去學(xué)習(xí),需要綜合學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)、OOP、軟件工程、UML、網(wǎng)絡(luò)編程、數(shù)據(jù)庫技術(shù)等知識,用橫向縱向的比較聯(lián)想的方式去學(xué)習(xí)會更有效。如學(xué)習(xí)Java集合的時候找數(shù)據(jù)結(jié)構(gòu)的書看看;學(xué)JDBC的時候復(fù)習(xí)數(shù)據(jù)庫技術(shù);采取的依然是“需要的時候再學(xué)”的原則。 4.結(jié)束語需要強調(diào)的是,學(xué)習(xí)軟件開發(fā)確實有一定的難度,也很辛苦,需要付出很多努力,但千萬不要半途而廢。本文如果能對一直徘徊在Java神殿之外的朋友有所幫助的話,筆者也欣慰了。哈哈,怎么聽起來老氣橫秋呀?沒辦法,在電腦的長期輻射之下,都快變成小老頭了。最后奉勸各位程序員尤其是MM程序員,完成工作后趕快遠(yuǎn)離電腦,據(jù)《胡播亂報》報道,電腦輻射會在白皙的皮膚上面點綴一些小黑點,看起來鮮艷無比…… Java學(xué)習(xí)周報 隨著時間的推移,學(xué)習(xí)Java已經(jīng)是第二周了。在這一周中,可以說是充分體驗了困難與收獲。經(jīng)過第一周的熟悉,Java學(xué)習(xí)越來越深入,許多的新知識出現(xiàn)在我的眼前。這其中有難以理解的,讓我充分認(rèn)識到了Java學(xué)習(xí)的困難,但是當(dāng)我深入學(xué)習(xí)并理解了這些知識時,又讓我感到難以言表的收獲與滿足。在這一周中,主要學(xué)習(xí)了一下內(nèi)容在: (1)學(xué)習(xí)內(nèi)容:Java面向?qū)ο缶幊碳夹g(shù),包括程序包的使用,類的繼承與訪問控制,多態(tài)性及其應(yīng)用,類成員及其應(yīng)用,方法的重載與重寫,以及關(guān)鍵字static、final的使用。 收獲:通過本章的學(xué)習(xí),我深入理解了Java面向?qū)ο缶幊碳夹g(shù),并能夠恰當(dāng)?shù)氖褂冒?、訪問控制與重載技術(shù),能夠掌握與應(yīng)用繼承、方法重寫與多態(tài)性機制實現(xiàn)對現(xiàn)有類型的擴充與改造,以滿足新的需求。 (2)學(xué)習(xí)內(nèi)容:重點學(xué)習(xí)了抽象類、接口和嵌套類。作為面向?qū)ο缶幊碳夹g(shù)中的幾種重要機制,這是必須要求掌握的,對他們的綜合應(yīng)用能夠使Java程序代碼結(jié)構(gòu)更加緊湊、簡潔。 收獲:在這一章中,我深入學(xué)習(xí)和掌握了Java高級類特性,其重點是抽象類與接口的用法,作為高層次的類型抽象,在實際應(yīng)用中應(yīng)能夠熟練應(yīng)用JDK中定義好的抽象和接口類型。而對于嵌套類則應(yīng)該理解與掌握。 (3)學(xué)習(xí)內(nèi)容:在本章中,主要了解與掌握J(rèn)ava在異常處理方面的知識,包括Java語言異常處理的內(nèi)部機制;能夠隨時及開發(fā)中常見的異常進行分類展示,并給出Java異常處理原則與具體應(yīng)用技巧。 收獲:學(xué)習(xí)完本章后,我充分理解了Java異常概念及其處理機制,能夠捕獲并處理常見的異常,或根據(jù)需要聲明拋出異常,能夠定義自己的異常類型。 (4)學(xué)習(xí)內(nèi)容:本章主要學(xué)習(xí)了Java中常見的類,包括Object類、字符串相關(guān)類型、封裝類、日期相關(guān)類型、數(shù)學(xué)相關(guān)類型。 收獲:通過本章的學(xué)習(xí),我掌握了常用的Java類及其功能方法,尤其是Object類的equals()方法、toString()方法、常用的字符串及數(shù)學(xué)操作相關(guān)方法、封裝類的自動封裝與拆封機制以及日期信息的處理。 (5)學(xué)習(xí)內(nèi)容:在以前學(xué)習(xí)的基礎(chǔ)上,這章重點學(xué)習(xí)了命令行參數(shù)、系統(tǒng)屬性、可變參數(shù)、注釋的使用。 收獲:通過本章的學(xué)習(xí),基本掌握了通過命令行參數(shù)、標(biāo)準(zhǔn)I/O和文件I/O實現(xiàn)應(yīng)用程序與外界之間的信息傳輸,理解并掌握可變參數(shù)、API及注解機制。 (6)學(xué)習(xí)內(nèi)容:本章主要學(xué)習(xí)Java框架結(jié)構(gòu)、Collection及Map接口、列表、集以及映射。 收獲:通過本章的學(xué)習(xí),全面理解了Java集合的相關(guān)概念、框架體系及其工作原理,基本能夠熟練應(yīng)用常用的Java集合類型。經(jīng)過又一周的學(xué)習(xí),使我更加深入的理解了Java,當(dāng)然,在這期間,有許多的疑難點困擾著我,比如多重繼承,比如作為Java特性之一的多態(tài)性的理解與實際使用,比如嵌套類的使用及其實現(xiàn)機制,比如人工拋出異常的具體操作方法等。但是通過自己的深入學(xué)習(xí),以及查閱資料,和詢問老師,最后在上手實際操作,基本解決了這些疑難點,這使我收獲良多。 對于未來一周的學(xué)習(xí),因為要深入到Java的具體開發(fā)技術(shù),對于前面的基礎(chǔ)知識要能夠?qū)嶋H綜合運用,在新知識的基礎(chǔ)上做到溫故而知新。第三篇:JAVA學(xué)習(xí)
第四篇:java學(xué)習(xí)
第五篇:Java學(xué)習(xí)周報