




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上第一階段視頻學(xué)習(xí)內(nèi)容進(jìn)入cmd 程序運行進(jìn)入F盤:f:編譯文件目錄,進(jìn)入java目錄:cd空格java目錄(存放代碼的目錄)編譯:javac空格文件名.java運行:java空格類名包:編譯:java空格-d空格.空格文件名.java 運行:java空格包名.類名一、java起源背景 1、Java起源Sun公司(Sun公司現(xiàn)在被oracle公司收購了)1995年5月23日J(rèn)ava語言問世。Java語言是在Green項目團(tuán)隊里James gosling的帶領(lǐng)下創(chuàng)建的,一開始java語言的命名為Oak語言。Java是仿照C+來編寫的,也是用C+開發(fā)的。二、Java語言的特
2、性1. 跨平臺性2. 簡單性(這個簡單性是C+對比)3. 純面向?qū)ο?. 開放性-三、語言的運行機(jī)制源文件可執(zhí)行文件 運行可執(zhí)行文件機(jī)器指令。Java源文件編譯.class字節(jié)碼文件解釋執(zhí)行真正的解釋指令。Java源文件編譯.class字節(jié)碼文件在JVM(java虛擬機(jī))中解釋執(zhí)行真正的解釋指令。(JVM虛擬機(jī)屏蔽不同操作系統(tǒng)差異)編譯的方式運行效率高解釋的方式可以夸平臺先編譯 后解釋 (java).Java 源文件 =>.class 字節(jié)碼文件 =>解釋運行.class文件:平臺中立Java是先編譯后解釋。(所以運行效率高,且可以夸平臺)JVM+解釋器=JAE(java運行環(huán)境)
3、JDK(java開發(fā)工具包)=JRE+編譯器+工具+類庫。四、Java環(huán)境變量JAVA_HOME:JDK安裝目錄【給其他軟件使用】【三個環(huán)境的作用】PATH:后追加JAVA_HOMEbin安裝目錄(加安裝目錄前加個分號)【你要運行exe軟件,它去找PATH下的根目錄,想在任何情況下運行java,就需要把bin根目錄放在PATH下】CLASSPATH:.【指示編譯器和JVM,到哪兒去找所需要的類】要使配置后的環(huán)境變量適用,必須重新打開命令行(cmd里重新開一行輸入命令:你的安裝目錄名字)之后輸入javac 名字.java。在運行中學(xué)會看錯誤:名字.java:4:需要;在語句第4行前有錯誤,需要分
4、號錯誤前的數(shù)字表示有幾處錯誤。查看目錄下的文件用dir命令。.java編譯成功會生成一個.class文件,而這個文件的名為java里編寫時取的名字.class文件如class abc public static void main(String args) System.out.println("liqin"); 產(chǎn)生一個abc.class文件(在命令符輸入javac c.java(c為你編寫程序文件取的名字)java 有1個空格后跟abc(abc為類名) 會顯示liqin)編譯 javac有1個空格后跟源文件名 一個類編譯之后,會對應(yīng)一個.class文件運行:java有1
5、個空格后跟類名。一個源文件里可以有很多的類。類前可以加public,就稱公開類(包外用,誰都可以用)。一個源文件中可以定義多個類,一個源文件中只能定義一個公開類,而且公開類的類名必須和文件名完全相同。5、 第一個程序1. 首先我們寫出 HelloWorld 程序的代碼。在硬盤上創(chuàng)建一個名為 test.java 的文件,并用記 事本打開這個文件,書寫如下內(nèi)容。注意:區(qū)分大小寫,并注意空格: class HelloWorld public static void main(String args) System.out.println("Hello World"); 2 深入
6、HelloWorld首先,第一行:class HelloWorld,這句話定義了一個名字叫做 HelloWorld 的類。其中, class 是 Java 語言的關(guān)鍵字,而 HelloWorld 則是定義的類的名字。 至于什么是類,這個概念對于初學(xué)者來說比較復(fù)雜,在此不多做介紹。對于初學(xué)者來說, 可以把類理解成:代碼的容器。也就是說,在 Java 中絕大部分代碼都要寫在類的范圍之內(nèi), 要寫代碼就必須先定義一個類。 在定義完了 HelloWorld 之后,后面有一對花括號,花括號中的內(nèi)容就表示是這個類中 的內(nèi)容。 在這個花括號里,下面的這行: public static void main(St
7、ring args) 這一行定義了一個主方法(也叫主函數(shù))。在 Java 中,主方法的定義比較長,但是非常 有用,也許你現(xiàn)在還無法理解這些內(nèi)容,隨著學(xué)習(xí)的深入,你會理解這里面的每一個單詞。 但是現(xiàn)在,照著寫并且記住主方法的寫法就行了。 那么主方法有什么用呢?我們把主方法稱之為:程序執(zhí)行的入口。也就是說,Java 程序在執(zhí)行的時候,會執(zhí)行類中的主方法,當(dāng)主方法執(zhí)行完畢之后,程序也就退出了。-6、 包 本節(jié)內(nèi)容介紹包的使用,主要包括 package 語句和 import 語句。1.1 package語句。 隨著代碼的大量增加,程序員寫的.java 源文件以及編譯產(chǎn)生的.class 字節(jié)碼文件會大量
8、的增加。如果任由這種情況發(fā)生的話,無論是查詢還是管理都會非常的不方便。為了解決這 方面的問題,Java 提供了“包”來幫助我們組織和管理類。使用 package 語句可以用來將一個特定的類放入包中。要注意的是,如果要使用 package 語句,則這個語句必須作為.java 文件的第一個語句,并寫在任何類的外面。例如,對我們 之前寫的 HelloWorld 類放入 book.corejava.chp2 包,則代碼如下: package book.corejava.chp2; public class HelloWorld public static void main(String args)
9、System.out.println(“Hello World”); 上面的這段代碼,就把 HelloWorld 類放在了 book.corejava.chp2 包下。要注意的是,在 加包之后,使用 HelloWorld 類時必須加上包名作為前綴,因此完整的寫法應(yīng)當(dāng)是: book.corejava.chp2.HelloWorld。這種在類名前面加上包名的寫法稱為類的全限定名。使用包的主要目的是為了避免類名沖突。包結(jié)構(gòu)必須和硬盤上的文件夾結(jié)構(gòu)一致。2.2 import 語句 前面的 import 語句,就好比是一個聲明。這個聲明表明,在程序接下來的代碼中,如果 遇到 HelloWorld 類,則
10、指的都是之前引入的 book.corejava.chp2.HelloWorld 類。這樣在后面 我們定義 hello 這個變量的時候,就省略了冗長的包名。此外,一個.java 文件中可以有多個 import 語句,用于導(dǎo)入多個類。 如果想要一次導(dǎo)入某個包下的所有類,則可以使用*通配符。例如,下面這個語句 import java.util.*; 表示導(dǎo)入 java.util 包內(nèi)的所有類。也就是說,當(dāng)我們用到這個包里面任何一個類的時候, 都可以省略包名。特別要提醒的是,上述語句并不能導(dǎo)入 util 包的子包,也就是說, java.util.jar、java.util.logging 等包下的類并
11、未導(dǎo)入。由于 import java.util.*能夠?qū)?java.util.ArrayList 和 java.util.HashSet 類,但不能導(dǎo)入 java.util 的子包中的類,因此 java.util.logging.Logger 類沒有導(dǎo)入,編譯器找不到這個類,因 此編譯出錯。 import 語句表示導(dǎo)入特定的類。在使用 import 語句導(dǎo)入一個類之后,使用時就能簡單的 使用類名。 另外,只能用*導(dǎo)入一個包,而不能使用 java.*或 java.*.*等語法,試圖導(dǎo)入所有以 java 為前綴的包。 最后,java.lang 包為標(biāo)準(zhǔn) Java 庫中的最常用的包,這個包中的類會
12、在所有 java 程序中自 動被導(dǎo)入。也可以理解為,在所有.java 文件中,import java.lang.*;這個語句都不用寫,編譯 器會自動導(dǎo)入這個包下的類。類:一個網(wǎng)站里包含很多類,類.class文件Java p1.HelloJVM會根據(jù)Classpath(.)在當(dāng)前目錄下,找p1子目錄,并在這個子目錄中找Hello.class。運行:java 類名一個源文件中可以定義多個類一個源文件中只能定義一個公開類,公開類的類名必須和文件名相同CLASSPATH:指示編譯器和JVM,到哪去找所需要的類。-java p1.HelloJVM會根據(jù)ClassPath,在當(dāng)前目錄下,找p1子目錄,并在
13、這個子目錄中找Hello.classjavac -d 編譯時,-d表示生成的.class文件自動的按照包結(jié)構(gòu)去存放。 -d空格.空格Hello.javaimport 引入包 避免重復(fù)的寫包名import java.lang.*; 系統(tǒng)默認(rèn)添加的*為通配符package 0-1(可以使用多個)import 0-n(可以使用多個)class 1-n (可以使用多個)公開類 0-1(只能用一個或不用)-cmd命令:cls :清屏cd JAVA :打開JAVA文件夾cd. :返回上一級目錄cd :返回主目錄dir :查看當(dāng)前文件夾的所有文件DEL D:aaaaa*.* :刪除aaaaa下所有文件(而非
14、文件夾)rd /s D:aaaaa :刪除aaaaa下的所有空文件夾- 注釋:能夠極大的增強(qiáng)代碼的可讀性。注釋指的是一些描述代碼的文字。Java 中的注釋從語法上來說主要有三種:單行注釋、多行注釋和 javadoc 注釋。1./ 單行注釋 /注釋開始,換行結(jié)束2./* */ 多行注釋/*注釋開始, */注釋結(jié)束,多行注釋里允許單行注釋,但是不允許多行注釋嵌套多行注釋。3./* */ 多行注釋 /* 注釋開始,*/注釋結(jié)束。 配合JavaDoc工具使用的,JavaDoc工具可以將你代碼里的所有注釋單獨抽取出來形成一個文檔交給用戶。只有這樣/* */形式的注釋可以被JavaDoc工具抽取出來。 j
15、avadoc 注釋,是 Java 中一種比較特殊的注釋。這種注釋用來生成 api 文檔。 程序員在對外發(fā)布 Java 代碼的時候,還應(yīng)當(dāng)對外公布這些代碼的用法。這樣,才能讓 其他的程序員能夠更加方便的利用已有的代碼。在 Java 中,我們往往使用 api 文檔,來向其 他程序員介紹代碼的組成和用法。抽取方法:javadoc空格-d空格doc空格Hello.java 注意:doc是生成的文件夾 查看index.html3 編碼規(guī)范1、 良好的注釋 2、 良好的標(biāo)識符命名 3、 良好的縮進(jìn)標(biāo)識符,指的是程序員為程序組件起的名字。起名字是一門藝術(shù),這一點對標(biāo)識符也一 樣。而所有的 Java 程序組件
16、基本分為 5 大類:包、類、變量、函數(shù)、常量。首先我們介紹一下 Java 標(biāo)識符的 命名規(guī)則。一、Java 標(biāo)識符由字母、數(shù)字、下劃線(_)、貨幣符號($)組成,其中數(shù)字不能開頭。 要注意的是,所謂“字母”,從技術(shù)上說,是一個 unicode 字符,包括中文字符。換句 話說,Java 標(biāo)識符能夠使用中文。二、Java 標(biāo)識符區(qū)分大小寫。 也就是說,helloWorld,HelloWorld,HELLOWORLD 這三個標(biāo)識符,對于 Java 來說是 完全不同的三個名字。三、不能與 Java 關(guān)鍵字重名。四、沒有長度限制習(xí)慣:1、 望文生義 這指的是說,標(biāo)識符的名字應(yīng)當(dāng)起的有意義,最好能通過名字
17、,讓人一眼就能看出標(biāo)識 符的作用。例如,變量 totalScore 肯定是用來統(tǒng)計總分,函數(shù) addStudent 肯定是用來增加一 個學(xué)生。這樣的名字是比較好的名字。它們很容易讓人理解這個標(biāo)識符的意義,從而提高程 序的可讀性。 二、大小寫規(guī)范 相比上一條規(guī)范,這一條顯得非常教條。Java 語言中,對于不同的程序組件,有著不同 的大小寫規(guī)范。羅列一下:包名:全小寫。例如 book.corejava 類名:每個單詞首字母大寫。例如 HelloWorld 變量/函數(shù)名:首單詞小寫,后面每個單詞首字母大寫。例如 helloWorld 常量名:全大寫,單詞之間用下劃線分隔。例如 HELLO_WORLD
18、 縮進(jìn)指的是在寫代碼的時候,在某些行的行首,會留出一些空白字符。良好、規(guī)范的縮進(jìn)能夠極大的提高代碼的清晰程度,讓可讀性大大增加。數(shù)據(jù)類型 變量 此外,在 Java 中,變量是強(qiáng)類型的。所謂強(qiáng)類型,指的是每一個變量都有自身的類型。 不同的變量類型,大小不同,所能存放的數(shù)據(jù)也不同。下面我們就來介紹一下 Java 語言中的變量類型。在 Java 中,所有變量類型分為兩類, 一類為基本類型,一類為對象類型。本章主要介紹的是基本類型。 基本類型,英語叫 primitive type,也有人翻譯成“原始類型”、“簡單類型”等等。這類 變量屬于編程語言中比較基礎(chǔ)的組成部分,因此也被稱之為“基本類型”。 基本
19、類型總共分為 8 種,分別為 byte、short、int、long、float、double、char、boolean。有四種類型都用來表示整數(shù),他們是 byte、short、int、long,他們之間的區(qū)別在于他們 所占的內(nèi)存空間和表示范圍。下表為這四種基本類型的參數(shù)。類型名稱 所占空間 表示范圍byte 1 個字節(jié) -128 127 Short 2 個字節(jié) -32768 32767 int 4 個字節(jié) - long 8 個字節(jié) - 可以把這四種基本類型想象成四個大小不同的飯盒,雖然空間不同,但是所裝的數(shù)據(jù)基 本上是一類的。要注意的是,表示范圍小的類型可以直接賦值給表示范圍大的類型,而反之
20、不行。字面值指的是某個類型的合法取值,或者說,可以為該類型的變量賦值的數(shù)據(jù)。例如, “int a = 5;”,在這個代碼中,a 就是變量,5 就是字面值。4.2.2 浮點數(shù)類型 在計算機(jī)術(shù)語中,小數(shù)被稱為浮點數(shù)。在 Java 語言中,浮點數(shù)有兩種,分別為 float 和 double。兩者相關(guān)參數(shù)如下: 類型名稱 所占空間 表示范圍 float 4 個字節(jié) 3.×1038 1.4×10-45 double 8 個字節(jié) 1.23157×10308 4.9×10-324 浮點數(shù)類型的符號可以是正的,也可以是負(fù)的。強(qiáng)類型 :變量類型必須和數(shù)據(jù)類型一致。定義變量
21、: 變量類型 變量名;數(shù)據(jù)類型對象類型:有無窮無限種,每一個類都可以成為對象類型(除去8種簡單類型之外都是對象類型)。簡單類型(基本類型,原始類型)8種byte short int long foalt double char boolean1、 整數(shù)類型4種:1. byte 1B(字節(jié))=8位 -128127 (自左至右左高右低)可以表示28=256個不同的數(shù)據(jù)2. short 2B(字節(jié))=16位 -32768327673. int 4B(字節(jié))=32位 -4. long 8B(字節(jié))=64位 -263 263-1 字面值byte=200是錯誤的,short=200是正確的long P=1
22、4L(大L和小l都可以,就是把14賦值給P)。5.6、浮點數(shù)(小數(shù)):float 單精度 4B float f=1.4f(系統(tǒng)默認(rèn)小數(shù)為double類型,因此要賦值給float型時后邊加小f和大F都可以但是后邊必須加f);double 雙精度 8B double d=1.4d,系統(tǒng)默認(rèn)小數(shù)為double類型后邊加不加d都可以,大D和小d一樣; double s=1.4e10 表示 1.4*10107、字符型char 2B字節(jié) unicode編碼方式 'A' 65 'u0041' (十六進(jìn)制) char可以參與整型運算。A=65a=97轉(zhuǎn)義字符 't
23、9;表示水平跳格 'n'表示換行''' 單引號 '"'雙引號 ''反斜杠String 字符串 字面值 "Hello World"只能參與加法運算 ,表示字符串連接。單引號引的是字符A,雙引號引的是字符串“abcd”。字符相加得到是數(shù) char A=65,char B=66,A+B=131,String 字符串相加得到的是字符串,“A”+“B”=“AB”。"ab"+"cd"=abcd "ab"+10="ab10"8、
24、boolean 布爾類型 4字節(jié) 字面值 true 真 false假,判斷用,布爾類型在java中不能參與運算。(c語言里能參與運算,true相當(dāng)于1,false相當(dāng)于0)-short s = 280;byte b =(byte)s; 強(qiáng)制轉(zhuǎn)換 將剩下的舍去 280 24 int i; short s;自動類型轉(zhuǎn)換 i = s;強(qiáng)制類型轉(zhuǎn)換 s = (short)i;a+b 兩個簡單類型的數(shù)參與運算就會被自動類型提升。如果a和b里邊有一個是double的 => 結(jié)果就是double如果a和b里邊有一個是float的 =>結(jié)果就是 float如果a和b里邊有l(wèi)ong的 =>結(jié)果
25、就是 long上述結(jié)果都不滿足時,=> 默認(rèn)結(jié)果是int表達(dá)式 :變量和字面值用某個運算符連接的式子,一個表達(dá)式必須有固定值。4、運算符+ - * / %(取余也叫模)= 賦值 ,+= a+=3不會進(jìn)行byte變化(a=a+3值會進(jìn)行提升變化) -= a-=3 (a=a-3) *= /=.+ - a+等同于a+=1相當(dāng)于a=a+1 如果a=4,a+為4,先取值在加1,+a為5,先加1在取值。(a的值都是5)= 在布爾運算符 a=b 判斷ab值是否一樣,判斷真假,相等為真取前邊,不等為假取后邊。= 等于 > 大于 < 小于 >=大于等于 <=小于等于 != &
26、;&與(同為真結(jié)果為真,兩邊有一個為假,結(jié)果就為假) |或(有一真結(jié)果為真 )!非(取反)位運算符&按位求與(兩個1結(jié)果為1) |按位求或(兩個里一個有1就是1) 異或(兩個相同為0,不同為1) 按位取反 - 1011 1011 1011 1011& 1001 | 1001 1001 0100 1011 1011 0010 -& 非短路 &&短路 單豎線 雙豎線邏輯求或有符號移位>> a>>1右移1位(相當(dāng)于整數(shù)除以2,高位需要補(bǔ)1位,正數(shù)移后是正,負(fù)數(shù)移后是負(fù),符號不會丟) << a<<1左移1位
27、(相當(dāng)于整數(shù)乘以2,)>> 數(shù)學(xué)移位 移完后,高位補(bǔ)以前的數(shù) 負(fù)數(shù)還是負(fù)數(shù)無符號移位 >>> <<< 移完后高位直接補(bǔ)0,正數(shù)移后是正,負(fù)數(shù)移后是正。>>> 移完后高位直接補(bǔ)0 a=10110 a>>1 01011 (前邊補(bǔ)0) a<<1 (末尾補(bǔ)0)結(jié)論:左移一位 相當(dāng)于這個整數(shù)乘以2 右移一位 相當(dāng)于這個整數(shù)除以2?: (a>b)?3:2 a>b時取3 a>b為假時,取2-局部變量 :在函數(shù)內(nèi)部定義的變量1.先賦值,后使用2.作用范圍:從定義開始,到定義它的代碼塊結(jié)束3.在重合范圍內(nèi)
28、,不允許兩個局部變量發(fā)生命名沖突=流程控制順序執(zhí)行流程條件分支流程(條件滿足執(zhí)行,不滿足不執(zhí)行)if()if() elseif() else if()elseswitch-case :(switch(表達(dá)式:只允許整型表達(dá)式。例如switch(i)i的類型只允許byte short int char)case后只能跟一個數(shù))break;跳出循環(huán)語句。子句,default(匹配所有case語句不成功后匹配default語句)習(xí)慣把default放在所有case之后。swicth(只允許整型表達(dá)式) byte short int char-循環(huán)流程while(布爾表達(dá)式) 0-N次執(zhí)行do whi
29、le(條件); 1-N次執(zhí)行(至少執(zhí)行一次)。適合用在不確定循環(huán)for 0-N次執(zhí)行(定義變量賦值語句;條件語句(布爾表達(dá)式)(條件不寫,默認(rèn)為真,一直循環(huán));語句(對循環(huán)的自加或減)循環(huán)體適合用在 確定循環(huán) 事先知道循環(huán)幾次。循環(huán)圖下break; 跳出循環(huán)continue; 跳出本次循環(huán)(繼續(xù)下一次循環(huán))雙重循環(huán) outer inner 是給for循環(huán)起名(循環(huán)的標(biāo)號)package chp2;public class jisuan public static void main(String args)outer:for(int i = 1;i<5;i+)inner:for(int
30、j = 1;j<4;j+)if(i=3)break outer;(直接跳出多層循環(huán)就給循環(huán)前取個名字,然后break outer,就跳出了整個循環(huán),break inner是跳出內(nèi)循環(huán))System.out.println("i="+i+" "+"j="+j+" ");System.out.println();有規(guī)律才能用循環(huán)。=函數(shù) :函數(shù)的三要素:返回值,函數(shù)名,參數(shù)表 定義的位置:函數(shù)必須在類中定義,必須在其中任何函數(shù)的外部。 一個類中,多個函數(shù)的順序是無關(guān)緊要的。函數(shù)的聲明:public static
31、返回值類型 函數(shù)名(標(biāo)識符)(參數(shù)表) 形式參數(shù)(形參)(定義形參,int a,int b只能這么定義,int a,b是錯誤的):相當(dāng)于函數(shù)內(nèi)部有效的局部變量。函數(shù)的實現(xiàn): 必須和聲明一致(主要指返回值類型)調(diào)用函數(shù):函數(shù)名(實際參數(shù));實參會一次給形參賦值調(diào)用函數(shù),程序流程會進(jìn)入函數(shù),函數(shù)返回,程序流程會返回到函數(shù)調(diào)用點處理返回值math.sqrt(y):給y開根號。函數(shù)的作用1.避免冗余代碼2.提高程序的可維護(hù)性3.提高程序的重復(fù)使用性4.提高程序的靈活性函數(shù)的嵌套和函數(shù)的遞歸嵌套:調(diào)用別人的函數(shù)遞歸:一個函數(shù)自己調(diào)用自己(遞歸可以寫的程序可以用循環(huán)來寫,復(fù)雜的問題用遞歸比較實用)面向過程
32、的編程思想:從程序執(zhí)行的過程入手,將完整的過程細(xì)化成多個子過程,再將子過程細(xì)化,直到完成代碼。非結(jié)構(gòu)化 goto(程序流程控制)、const結(jié)構(gòu)化 函數(shù)自頂向下 逐步求精=數(shù)組 一次性定義多個同類型的變量。數(shù)組空間在內(nèi)存中必定是連續(xù)的。數(shù)組中的一個變量被稱元素,元素有默認(rèn)值數(shù)值類型數(shù)組 默認(rèn)值: 0 boolean類型數(shù)組 默認(rèn)值: false對象類型數(shù)組 默認(rèn)值: null 數(shù)組地址是十六進(jìn)制的。a. length數(shù)值.length表示數(shù)組長度System.arraycopy(a,0,b,0,a.length)(源數(shù)組,起始下標(biāo),目標(biāo)數(shù)組,起始下標(biāo), 復(fù)制的數(shù)量)數(shù)組長度是固定的,如果需要擴(kuò)
33、充,必須創(chuàng)建新數(shù)組,原數(shù)組的元素要復(fù)制到新數(shù)組。/直接調(diào)用排序java.util.Arrays.sort(data);*數(shù)組排序(冒泡排序,執(zhí)行n-1次)相鄰兩個數(shù)對比,把大的調(diào)到最后。 (選擇排序,)依次用一個數(shù)(從第一個數(shù)開始)和后邊的每一個數(shù)比,比它打兩數(shù)交換,小的往前換。*編程思想:需求->建立思路->目標(biāo)代碼面向過程的思想:自頂向下 逐步求精面向?qū)ο蟮乃枷耄鹤钤绲恼Z言 Smalltalk對象:什么都是對象 一切客觀存在的事物屬性:這個對象有什么方法:這個對象能做什么對象的屬性可能又是一個對象對象的方法的使用者又是一個對象客觀世界是由對象組成的1.小對象組成大對象2.對象間
34、彼此方法調(diào)用解決客觀問題:1.把解決問題所需要的對象準(zhǔn)備好2.對象間如何配合 完成需求計算機(jī)需求 來源于 客觀世界解決計算機(jī)問題,同樣可以采用面向?qū)ο蟮乃枷胗嬎銠C(jī)中的對象:JVM中連續(xù)的存儲空間(數(shù)據(jù))代表生活中的對象 生活中的對象在計算機(jī)中的抽象各司其職 對象應(yīng)該保持簡單性弱耦合性 對象和對象之間的聯(lián)系應(yīng)該盡量弱化可重用性可擴(kuò)展性類1.對象共性的抽象2.客觀對象在人腦中的主觀反映 類是人對對象的認(rèn)識3.類是對象的模版如何編寫一個類屬性:實例變量 static是靜態(tài)的意思1.有默認(rèn)值 數(shù)值類型:0 布爾類型:false 對象類型:null2.作用范圍:至少是全類內(nèi)部3.可以和局部變量發(fā)生沖突,
35、沖突的時候局部變量優(yōu)先方法:方法的聲明:對象能做什么 修飾符 返回至類型 方法名(參數(shù)表) 拋出的異常方法的實現(xiàn):對象怎么做方法的重載:允許定義多個同名的方法,參數(shù)表不同1.參數(shù)個數(shù)不同2.參數(shù)類型不同3.參數(shù)類型排列不同形參名不同不算重載!由編譯器在程序編譯的時候,根據(jù)實參的類型選擇一個合適的方法調(diào)用 方法的重載還可以叫做編譯時多態(tài)向上就近匹配原則(類型相近) 避免混淆重載的作用:讓一個對象的同類方法,由于參數(shù)表的不同造成的差異,對用戶屏蔽!構(gòu)造方法1.沒有返回值類型2.方法名必須和類名相同3.不允許手工調(diào)用,在對象構(gòu)造過程中自動調(diào)用1次如果一個類沒有定義任何構(gòu)造方法,系統(tǒng)會默認(rèn)添加一個公開
36、無參的構(gòu)造方法。對象的創(chuàng)建過程:1.分配空間 所有的實例變量被賦予了默認(rèn)值2.初始化屬性 所有的實例變量被賦予初始值3.調(diào)用構(gòu)造方法 實例變量常常被第三次賦值構(gòu)造方法經(jīng)常用來為屬性賦值變量按照類型劃分:簡單變量 :存值對象變量(引用):存對象的地址Java中參數(shù)的傳遞規(guī)則:簡單類型的參數(shù) 傳值對象類型的參數(shù) 傳地址 傳引用 實參和形參指向同一個對象=this1.引用 當(dāng)前對象 當(dāng)實例變量和局部變量命名沖突的時候,用this.表示實例變量2.用在構(gòu)造方法中 this(.)調(diào)用本類的其他構(gòu)造方法 必須是構(gòu)造方法中的第一個語句*封裝:對象的邊界對對象的內(nèi)部起到保護(hù)的作用;數(shù)據(jù)隱藏public 公開的
37、 不受邊界約束private 私有的 只能在本類內(nèi)部訪問 無法突破邊界屬性私有 提供公開的setXXX/getXXX用來訪問屬性方法私有 只給自己調(diào)用 方法公開:聲明的公開 實現(xiàn)的隱藏 實現(xiàn)的改變對架構(gòu)的影響最小繼承父類子類 一般特殊父類:子類的共性抽象出來所有子類能夠訪問的父類屬性和方法,即是子類從父類中繼承到的屬性和方法從嚴(yán)到寬的順序private 私有的 本類內(nèi)部使用 無法繼承default 本類內(nèi)部+同包 同包子類可以繼承protected 受保護(hù)的 本類+同包+不同包的子類public 公開的 可以繼承構(gòu)造方法不能繼承方法的覆蓋子類用特殊的方法實現(xiàn)替換掉父類繼承給它的一般的方法實現(xiàn)返
38、回值類型 方法名 參數(shù)表相同,訪問修飾符相同或更寬泛對象的構(gòu)造過程1.分配空間 本類+父類 一并分配2.遞歸的構(gòu)造父類對象 (2-4)3.初始化本類屬性4.調(diào)用本類的構(gòu)造方法A<-B<-C創(chuàng)建C對象:(遞歸的構(gòu)造父類對象)分配空間初始化A的屬性調(diào)用A的構(gòu)造方法初始化B屬性調(diào)用B的構(gòu)造方法初始化C的屬性調(diào)用C的構(gòu)造方法super 關(guān)鍵字1.引用:父類對象 訪問父類被遮蓋的屬性或者調(diào)用父類被覆蓋的方法2.用在構(gòu)造方法中 指定調(diào)用父類的構(gòu)造方法中 必須是構(gòu)造方法的第一句如果一個構(gòu)造方法的第一句話,不是this(.),也不是super(.),系統(tǒng)會默認(rèn)添加 super();super(.)
39、常常用來把構(gòu)造參數(shù)傳給父類,去設(shè)置父類的屬性Java中的單繼承一個類最多只能有一個直接父類簡單 類之間會形成簡單的樹狀結(jié)構(gòu)子類的對象可以看作是父類的對象1.對象類型不變2.只能對引用調(diào)用其引用類型中聲明的方法3.運行時,根據(jù)對象實際類型找子類覆蓋之后的方法子類引用賦值給父類引用 可以直接賦值父類引用賦值給子類引用 必須強(qiáng)制類型轉(zhuǎn)換 保證編譯通過運行時可能發(fā)生類型轉(zhuǎn)換異常在強(qiáng)制類型轉(zhuǎn)換之前,可以用instanceof判斷,避免類型轉(zhuǎn)換異常多態(tài)的作用:將不同的子類對象統(tǒng)一看作父類對象,屏蔽了不同子類的差異多態(tài)的常見用法1.多態(tài)用在方法參數(shù)上 形參可以是父類引用,實參可以傳子類對象m(A a):可以
40、用A的任何子類對象作為參數(shù)Animal a = new Dog();2.多態(tài)用在方法的返回值上A m():m方法完全可以返回A的某個子類對象=private 可以修飾 屬性 方法 構(gòu)造方法default 可以修飾 屬性 方法 構(gòu)造方法 類protected 可以修飾 屬性 方法 構(gòu)造方法public 可以修飾 屬性 方法 構(gòu)造方法 類static 靜態(tài)的1.屬性 類變量 全類公有 允許直接用類名訪問 類加載:當(dāng)JVM第一次使用一個類時,需要通過ClassPath找到這個類對應(yīng)的.class文件,把這個文件中包含的類的信息讀入JVM并保存起來。一般的說,一個類只會加載一次! 類變量是在類加載的時
41、候分配空間,并且初始化 類加載的時機(jī): 1)創(chuàng)建類的對象 2)訪問類的靜態(tài)成員 3)加載子類必須先加載父類 4)如果僅僅是聲明引用,不會類加載2. 方法靜態(tài)方法 允許直接用類名調(diào)用在靜態(tài)方法中,只能訪問類的靜態(tài)成員靜態(tài)方法可以被子類的靜態(tài)方法覆蓋,而且沒有多態(tài)。3.初始化代碼塊 靜態(tài)初始代碼塊中的代碼,在類加載的時候執(zhí)行一次final1.變量 常量 一旦賦值 不能改變對于final屬性 系統(tǒng)不會提供默認(rèn)值如果final實例變量 可以在初始化屬性或是構(gòu)造方法中賦值如果final類變量 可以在初始化屬性或是靜態(tài)初始代碼塊中賦值2.方法 該方法不能被子類覆蓋3.類 該類不能被子類繼承abstract
42、 抽象的1.類 抽象類只能聲明引用,不能創(chuàng)建對象2.方法 抽象方法 只有聲明 沒有實現(xiàn)如果一個類中有抽象方法,這個類就必須是抽象類但是抽象類中未必有抽象方法抽象類中可以有構(gòu)造方法子類繼承抽象類,如果子類不希望也成為抽象類,就必須實現(xiàn)父類中聲明的所有抽象方法利用abstract,可以把方法聲明抽象到父類中,而方法實現(xiàn)留在子類 更好的體現(xiàn)“共性放在父類”原則修飾符組合:private static final 均不能和abstract聯(lián)用=Chp9接口特殊的抽象類1.所有的屬性都是公開靜態(tài)常量2.所有的方法都是公開抽象方法3.沒有構(gòu)造方法如果有一個抽象類,其所有屬性都是公開靜態(tài)常量,所有方法都是公
43、開抽象方法,例如 下面代碼所示。 abstract class MyAbstractClass public static final int VALUE1 = 100; /屬性是公開靜態(tài)常量 public static final int VALUE2 = 200; /第二個屬性 public abstract void m1(); /方法是公開抽象方法 public abstract void m2(int n); /第二個方法 上面的 MyAbstractClass 類,具有的兩個屬性 VALUE1 和 VALUE2 都是公開靜態(tài)常量,具 有的兩個方法 m1 和 m2 都是公開抽象方法。
44、由于 MyAbstractClass 是抽象類,因此無法創(chuàng)建對象,只能夠聲明引用。如果要創(chuàng)建對 象的話,必須要寫一個類繼承 MyAbstractClass 類,并且實現(xiàn)這個類中的 m1 和 m2 方法。例 如下面的代碼: class MySubClass extends MyAbstractClass public void m1() public void m2(int n) 要注意的是,方法覆蓋要求“子類的訪問修飾符相同或更寬”,由于 MyAbstarctClass 類 中的 m1 方法和 m2 方法都是 public 的,MySubClass 中的 m1 和 m2 方法的訪問修飾符也必
45、須是 public 的。使用關(guān)鍵字 interface 來定義接口。把 MyAbstractClass 改寫成接口,結(jié)果如下:既然接口中所有屬性都是公開靜態(tài)常量,則接口中的屬性,可以省略 public static final 關(guān)鍵字;同樣的,由于接口中所有方法都是公開抽象方法,因此可以省略 public abstract 關(guān) 鍵字。 interface MyInterface int VALUE1 = 100; int VALUE2 = 200; void m1(); void m2(int n); 注意,interface 替代了 abstract class 這兩個關(guān)鍵字。interfa
46、ce 關(guān)鍵字和 class 關(guān)鍵字類似, 一個接口編譯后會生成一個.class 文件;一個.java 文件中可以有多個接口,但是最多只能有一個公開的接口,且公開接口的接口名與文件名相同。要注意的是: 1. 一個類實現(xiàn)接口,如果不希望這個類作為抽象類,則應(yīng)該實現(xiàn)接口中定義的所有方 法。 2. 接口中所有的方法都是公開方法。因此,在實現(xiàn)接口中的方法時,實現(xiàn)類的方法也 必須寫成公開的!由于類中的方法,默認(rèn)訪問修飾符是“default”,因此,在實現(xiàn)接 口中的方法時,修飾符“public”不能省略。從語法上說,接口很類似 特殊的抽象類,只不過在接口語法中增加了兩個關(guān)鍵字:interface 和 imp
47、lements 而已。一個類去實現(xiàn)接口,如果這個類不希望也稱為抽象類,就必須實現(xiàn)接口中所有方法接口之間可以多繼承。不同于 Java 中對于類之間的單繼承的要求,接口之間沒 有這個限制。一個接口可以繼承多個接口一個類在繼承另外一個類的同時,還可以實現(xiàn)多個接口利用接口實現(xiàn)多繼承,不會破壞類之間樹狀關(guān)系的簡單性解耦合的工具 標(biāo)準(zhǔn)把標(biāo)準(zhǔn)的使用者和標(biāo)準(zhǔn)的實現(xiàn)著分離接口的回調(diào)在定義接口之后,先有接口的使用者,后有接口的額實現(xiàn)者 使用者通過接口調(diào)用實現(xiàn)者中的方法=內(nèi)部類 類中定義類成員內(nèi)部類 1)可以訪問外部類的私有成員 2)創(chuàng)建成員內(nèi)部類對象,必須先創(chuàng)建外部類對象,再通過外部類對象.new 構(gòu)造內(nèi)部類對象
48、 3)成員內(nèi)部類中不能有靜態(tài)成員 4)外部類類名.this 指向外部類的當(dāng)前對象靜態(tài)內(nèi)部類 1)靜態(tài)內(nèi)部類只能訪問外部類的靜態(tài)成員 2)創(chuàng)建靜態(tài)內(nèi)部類對象,不需要先創(chuàng)建外部類對象局部內(nèi)部類 1)使用范圍等同于局部變量 2)不僅可以訪問外部類的私有成員,還可以訪問外部類的局部變量,但是必須被聲明為final匿名內(nèi)部類 1)特殊的局部內(nèi)部類 2)繼承一個類或者實現(xiàn)一個接口 3)只會創(chuàng)建該類的一個對象 匿名內(nèi)部類無法定義構(gòu)造方法1.內(nèi)部類可以訪問外部類的私有成員,而不破壞封裝2.接口公開,接口的實現(xiàn)類作為內(nèi)部類隱藏起來,強(qiáng)制弱耦合=Object類 Java中所有類的父類 類繼承關(guān)系樹的樹根1.Obj
49、ect o; o中可以裝任何對象2.Object類中的方法 是所有對象都具有的方法1)finalize():由垃圾收集器在回收垃圾對象時,最后調(diào)用 a.垃圾回收器如何認(rèn)定垃圾對象 零引用算法 b.垃圾回收器何時釋放垃圾對象 必須釋放的時候2)getClass():返回對象的實際類型3)toString():返回對象的String形式 打印一個對象就是打印這個對象的toString方法的返回值4)boolean equals(Object o):判斷this和o內(nèi)容是否相同包裝類1.為8中簡單類型提供對象形式 讓Object統(tǒng)一所有數(shù)據(jù)2.對于數(shù)值類型的屬性,區(qū)分0和null包裝類 簡單類型 String 之間的轉(zhuǎn)換JDK5.0 自動封箱由編譯器自動完成簡單類型和包裝之間的轉(zhuǎn)換=集合框架 集合部分多做題集合:容器 一個對象,用來存儲其它多個對象接口的特點接口中的方法遍歷實現(xiàn)類Collection特點:元素是Object(對象)主要的方法:add(Object o):把對象o放入集合addAll(Collection c):把c中的所有對象放入集合clear():清空集合contains(Object o):判斷對象o在集合中是否存在isEmpty():判斷集合是否為空remove(Object o):把對象o從集合中刪去size():返回集合中對象的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 職業(yè)病培訓(xùn)大綱
- 少兒無人機(jī)課件
- 智慧生態(tài)農(nóng)業(yè)谷項目解決方案
- 非煤礦山安全生產(chǎn)知識題庫-單選題
- 濃密機(jī)培訓(xùn)課件
- 無痛胃腸鏡檢查及護(hù)理
- 煤礦職工培訓(xùn)
- 營業(yè)廳服務(wù)禮儀培訓(xùn)
- 重度胎膜早剝護(hù)理
- 計劃調(diào)度具備哪些能力培訓(xùn)
- 2025年臨床醫(yī)師定期考核必考復(fù)習(xí)題庫及答案(900題)
- 醫(yī)保藥械管理制度內(nèi)容
- 新聞、記者采編人員崗位職業(yè)技能資格基礎(chǔ)知識考試題及答案
- 憲法學(xué)與行政法考核試卷
- 山西民間美術(shù)(山西林業(yè)職業(yè)技術(shù)學(xué)院)知到智慧樹答案
- 健身房物業(yè)保潔及安保服務(wù)實施方案
- 檢察機(jī)關(guān)保密知識培訓(xùn)
- 3D打印技術(shù)與應(yīng)用知到智慧樹期末考試答案題庫2024年秋西北工業(yè)大學(xué)
- 《常州紅梅公園》課件
- 軟件正版化工作培訓(xùn)
- Dahua大華7系報警柱快速操作手冊
評論
0/150
提交評論