




已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JAVA學(xué)習(xí)筆記配置java環(huán)境變量:JAVA_HOME:配置JDK的目錄(變量名就是JDK的安裝目錄)CLASSPATH:指定到哪里去找運(yùn)行時(shí)需要用到的類代碼(字節(jié)碼)PATH:指定可執(zhí)行程序的位置LINUX系統(tǒng)(在 .bash_profile 下的環(huán)境變量設(shè)置)JAVA_HOME=/opt/jdk1.5.0_06CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jarPATH=$PATH:$JAVA_HOME/bin:.export JAVA_HOME CLASSPATH PATH (將指定的環(huán)境變量聲明為全局的)windows系統(tǒng):右擊我的電腦-屬性-高級(jí)-環(huán)境變量Java的運(yùn)行過程:編譯:生成可執(zhí)行文件,如C+中利用g+生成a.out,效率高,但不跨平臺(tái)解釋:解釋器把源文件逐行解釋,跨平臺(tái)但效率不高在java中:先編譯后解釋,把.java文件編譯成.class字節(jié)碼文件Java源代碼文件(.java文件)-Java編譯器(javac)-Java字節(jié)碼文件(.class文件,平臺(tái)無關(guān)的)-Java解釋器(java),執(zhí)行Java字節(jié)碼Java的垃圾回收:由一個(gè)后臺(tái)線程gc進(jìn)行垃圾回收虛擬機(jī)判定內(nèi)存不夠的時(shí)候會(huì)中斷代碼的運(yùn)行,這時(shí)候gc才進(jìn)行垃圾回收缺點(diǎn):不能夠精確的去回收內(nèi)存java.lang.System.gc();建議回收內(nèi)存,但系統(tǒng)不一定回應(yīng),他會(huì)先去看內(nèi)存是否夠用, 夠用則不予理睬,不夠用才會(huì)去進(jìn)行垃圾回收內(nèi)存中什么算是垃圾:不在被引用的對(duì)象(局部變量,沒有指針指向的)Java的安全性:沙箱機(jī)制:只能做沙箱允許的操作通過下面環(huán)節(jié),實(shí)現(xiàn)安全加載有用的類文件,不需要的不加載校驗(yàn)字節(jié)碼,查看允許的操作查看代碼和虛擬機(jī)的特性是否相符查看代碼是否有破壞性查看是否有違規(guī)操作,如越界查看類型是否匹配,類型轉(zhuǎn)換是否能正確執(zhí)行源程序:package mypack;/相當(dāng)于一個(gè)目錄public class HelloWorldpublic static void main(String args)System.out.println(“Hello World”); 注:1、文件名必須和public修飾的類名一致,以.java作為文件后綴,如果定義的類不 是public的,則文件名與類名可以不同。2、一個(gè).java文件中可以有多個(gè)class,但是只有一個(gè)public修飾的類。3、java源代碼文件編譯后,一個(gè)類對(duì)應(yīng)生成一個(gè).class文件4、一個(gè)java應(yīng)用程序應(yīng)該包含一個(gè)main()方法,而且其簽名是固定的,它是應(yīng)用 程序的入口方法,可以定義在任意一個(gè)類中,不一定是public修飾的類編譯:javac -d . HelloWorld.java 含有包的類,在編譯的時(shí)候最好用上面的格式,-d指的是讓該類生成的時(shí)候按 照包結(jié)構(gòu)去生成, . 指的是在當(dāng)前路徑下生成; 如果不用上面的格式,也可以用javac HelloWorld.java,但是需要注意的是包結(jié)構(gòu) 就要由自己去建立,然后將生成的.class文件放到該目錄下。執(zhí)行:java mypack.HelloWorld 將字節(jié)碼文件交給Java虛擬機(jī)去解釋執(zhí)行 需要注意的事,必須使用包名.類名去解釋執(zhí)行包(package):把源文件放在目錄下由于工程的需要,將不同的源文件放在不同的目錄下,從而引入了包。包可以看作就是一個(gè)存放java源文件的目錄。在源碼中聲明一個(gè)包名:package p;(只能放在第一行,且最多只能是一行)如果指定多層包,那么在包名之間我們可以用.作為分隔符:package p1.p2.p3.p4;用“javac HelloWorld.java d 絕對(duì)路徑”,編譯后生成的字節(jié)碼文件就會(huì)放在指定的包結(jié)構(gòu)下執(zhí)行該程序需要用 java 包名.類名 引進(jìn)包中的某個(gè)類:import 包名.類名;引進(jìn)包中的所有類:import 包名.*;注釋:/單行注釋, 到本行結(jié)束的所有字符會(huì)被編譯器忽略/* */多行注釋, 在/* */之間的所有字符會(huì)被編譯器忽略/* */ 文檔注釋, java特有的,在/* */之間的所有字符會(huì)被編譯器忽略可以用javadoc把java源程序中這種注釋抽取出來形成html頁面(只有寫在包,類,屬性,方法,構(gòu)造器,引入之前的注釋才可以進(jìn)行抽取) 標(biāo)識(shí)符:命名規(guī)則:(1) 由字母、數(shù)字、下劃線、$組成,不能以數(shù)字開頭(2) 大小寫敏感(3) 不得使用java中的關(guān)鍵字和保留字關(guān)鍵字:都是小寫的,jdk1.2多了strictfp(經(jīng)準(zhǔn)浮點(diǎn)型)關(guān)鍵字,jdk1.4多了assert(斷言)關(guān)鍵字, jdk1.5多了enum(枚舉) 關(guān)鍵字隨著學(xué)習(xí)進(jìn)度,會(huì)慢慢接觸到的true、false、null嚴(yán)格說不應(yīng)該算關(guān)鍵字,應(yīng)稱其為保留字更合適習(xí)慣:(1) 標(biāo)識(shí)符要符合語義信息(2) 包名所有字母小寫(3) 類名每個(gè)單詞首字母大寫,其它小寫 /TarenaStudent(4) 變量和方法:第一個(gè)單詞小寫,從第二個(gè)單詞開始首字母大寫 /tarenaStudent(5) 常量:所有字母大寫,每個(gè)單詞之間用 _ 連接基本數(shù)據(jù)類型:8種1) 整型 byte 1B 8位 -128到127 short 2B 16位 -215到(215)-1 int 4B 32位 -231到(231)-1 long 8B 64位 -263到(263)-1 2) 浮點(diǎn)類型 float 4B 32位 double 8B 64位 3) 字符類型 char 2B16位 4) 布爾型 1Bboolean false/true注:1、Java中的自動(dòng)類型提升問題。1)、正向過程:從低字節(jié)到高字節(jié)可以自動(dòng)轉(zhuǎn)換。byte-short-int-long-float-double2)、逆向過程:從高字節(jié)到低字節(jié)用強(qiáng)制類型轉(zhuǎn)換。例:int a = (int)4.562;注:逆向轉(zhuǎn)換將丟失精度。 2、boolean:只有true和false。3、char:Java中用 u四位十六進(jìn)制的數(shù)字 (即使在注釋中出現(xiàn)u,后面如果跟的不是4個(gè)數(shù)字,也會(huì)報(bào)錯(cuò))表示將字符轉(zhuǎn)換成對(duì)應(yīng)的unicode編碼,字符類型要用單引號(hào)括起來。 4、黙認(rèn)浮點(diǎn)類型為double,float數(shù)據(jù)類型有一個(gè)后綴為 f 或 F 。 5、long類型有一個(gè)后綴,為 l 或者 L 引用數(shù)據(jù)類型:類、接口、數(shù)組引用類型 變量名 = new 引用類型名(參數(shù));/new后面一般跟的都是類的構(gòu)造器成員:寫在類體括號(hào)里面的內(nèi)存空間的分配:內(nèi)存分為:棧:存放簡(jiǎn)單數(shù)據(jù)類型變量(值和變量名都存在棧中),存放引用數(shù)據(jù)類型的變量名以及它所指向的實(shí)例的首地址堆:存放引用數(shù)據(jù)類型的實(shí)例局部變量:不是聲明在類體括號(hào)里面的變量(1)必須要先賦值,后使用,否則通不過編譯,局部變量沒有默認(rèn)初始化值(2)作用范圍:定義開始到定義它的代碼塊結(jié)束(3)同一范圍內(nèi),不允許2個(gè)局部變量命名沖突參數(shù)傳遞時(shí),簡(jiǎn)單類型進(jìn)行值轉(zhuǎn)遞(參數(shù)進(jìn)行傳遞時(shí)都會(huì)先去棧中生成一個(gè)副本的,使用結(jié)束后釋放)自動(dòng)類型提升:byte a = 1;byte b = 2;a = a+b; /編譯出錯(cuò)自動(dòng)類型提升成inta += b; /自加沒有自動(dòng)類型提升問題類型自動(dòng)提升規(guī)則:a和b作某種運(yùn)算a和b中有double,結(jié)果就是doublea和b中有float,結(jié)果就是floata和b中有l(wèi)ong,結(jié)果就是long除此之外,結(jié)果都是int把高字節(jié)轉(zhuǎn)成低字節(jié),需要作強(qiáng)制類型轉(zhuǎn)換. byte c=(byte)a+b;移位運(yùn)算符:效率最高 有符號(hào)右移,補(bǔ)符號(hào)位 移負(fù)數(shù)位,則將該數(shù)值加32后再進(jìn)行移位 數(shù)值的2進(jìn)制是按照補(bǔ)碼保存的 右移后高位都補(bǔ)0邏輯運(yùn)算符:&/|也可以作為邏輯運(yùn)算符&先判斷前面一個(gè)條件,如果為假,則不用計(jì)算后一個(gè)條件|先判斷前面一個(gè)條件,如果為真,則不用計(jì)算后一個(gè)條件 + 運(yùn)算符:兩個(gè)操作的對(duì)象是數(shù)值時(shí),是加法如果有一個(gè)是字符串時(shí),則是字符串的連接流程控制語句:同Core C+switch中的變量類型只能是byte、 short、int、char四種類型數(shù)組:聲明數(shù)組: 數(shù)組能以下列形式聲明: 類型 array; 類型 array; 注:JAVA中推薦用:類型 array;一個(gè)數(shù)組是一個(gè)對(duì)象聲明一個(gè)數(shù)組沒有創(chuàng)建一個(gè)對(duì)象聲明時(shí)不用指定長(zhǎng)度創(chuàng)建數(shù)組:創(chuàng)建基本數(shù)據(jù)類型數(shù)組:int i = new int2; 創(chuàng)建引用數(shù)據(jù)類型數(shù)組:Student s = new Student100; 數(shù)組創(chuàng)建后其中的元素有初始值類型 黙認(rèn)值 byte 0 short 0 int 0 long 0l float 0.0f double 0.0d char u0000boolean false reference types null注:創(chuàng)建時(shí)一定要指定長(zhǎng)度int i2=new int; /error初始化數(shù)組: 聲明、創(chuàng)建、初始化分開: int i; /定義數(shù)組i = new int2; /分配空間i0 = 0; /初始化i1 = 1; 聲明、創(chuàng)建、初始化在同一時(shí)間 :int i = 0,1; /顯示初始化 中有幾個(gè)值,則數(shù)組長(zhǎng)度為幾Student s = new Student(),new Student(); 注:int i=new int1,2,3; /后面中不可以寫數(shù)值 int i1=new int31,2,3; /error 二維數(shù)組:(其實(shí)是一個(gè)一維數(shù)組,它的每一個(gè)元素又是一個(gè)一維數(shù)組)int i1 = new int23; int i4 = 1,1,1,2,2,2,3,3,3;int i3 = new int3;/不允許高維沒分配空間而先給低維分配空間int i2 = new int2; i20 = new int2;i21 = new int3; 數(shù)組長(zhǎng)度:數(shù)組的屬性length數(shù)組長(zhǎng)度一旦確定,不可改變 int i = new int5; 則i.length= 5數(shù)組拷貝:系統(tǒng)類System提供的static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) src: 源數(shù)組srcPos: 從源數(shù)組哪個(gè)位置開始拷貝(位置指的是元素的下標(biāo))dest: 目標(biāo)數(shù)組destPos: 拷貝的元素放到目標(biāo)數(shù)組的起始位置length: 拷貝多少個(gè)數(shù)組排序:自己實(shí)現(xiàn)一個(gè)排序方法來進(jìn)行排序或者調(diào)用java.util.Arrays.sort(Object o)類和對(duì)象:類:主觀抽象,是對(duì)象的模板,可以實(shí)例化對(duì)象習(xí)慣上類的定義格式:package xxx;import xxx;public class Xxxx屬性(成員變量) ;構(gòu)造器(構(gòu)造方法或構(gòu)造函數(shù)) ;方法(成員方法) ;定義屬性:實(shí)例變量格式: 修飾符 類型 變量名 = ? 實(shí)例變量定義在類中但在任何方法之外。實(shí)例變量有默認(rèn)值:各種各樣的0。(同數(shù)組)實(shí)例變量的作用域至少在本類內(nèi)部,受訪問控制符的限制。在重合作用域,實(shí)例變量和局部變量允許有命名沖突,“局部?jī)?yōu)先”。定義方法:格式: 修飾符 返回類型 方法名( 參數(shù)列表 ) throws 異常 java中所有參數(shù)都是值傳遞。 當(dāng)沒有值返回時(shí),返回類型必須被定義為void。 返回類型必須與方法名相鄰,其他修飾符可以調(diào)換位置。構(gòu)造器:在創(chuàng)建對(duì)象的過程中調(diào)用的方法。構(gòu)造器沒有返回類型。構(gòu)造器的名字與類名相同。格式為: 修飾符 類名( 參數(shù)列表 ) ,修飾符可以是private、 protected、 default、private在一個(gè)對(duì)象的生成周期中構(gòu)造器只用一次,由系統(tǒng)自動(dòng)調(diào)用,不允許手工調(diào)用。程序員沒有提供一個(gè)構(gòu)造器,系統(tǒng)會(huì)自動(dòng)提供一個(gè)無參的構(gòu)造器。獲得對(duì)象的方式:通過new(在堆空間中申請(qǐng)分配空間),new 類名(),可以通過這種形式或的一個(gè)對(duì)象,這時(shí)的對(duì)象是無法使用,必須把他的地址存放進(jìn)一個(gè)對(duì)象變量才能夠使用。例如 :Car c=new Car();注意:最好在寫類時(shí)提供一個(gè)無參的構(gòu)造器。this關(guān)鍵字:this是個(gè)隱式參數(shù),代表當(dāng)前對(duì)象;publie class Studentprivate String name;public void setName(String name)=name;/為當(dāng)前對(duì)象的成員變量如果某個(gè)構(gòu)造方法的第一個(gè)語句具有形式this( ),那么這個(gè)構(gòu)造方法將調(diào)用同一類中的其他構(gòu)造方法。注意:在構(gòu)造器中this(.)必須放在該構(gòu)造器的第一行。this不能出現(xiàn)在靜態(tài)方法里面。類、對(duì)象、實(shí)例三者的關(guān)系:類:是對(duì)象的模板,可以實(shí)例化對(duì)象對(duì)象:類的個(gè)體實(shí)例:實(shí)現(xiàn)的對(duì)象student s;s=new student();其中 Student為類,s為對(duì)象,new Student()為實(shí)例,s賦值后也是實(shí)例了。方法重載:方法名相同,參數(shù)表不同,不考慮返回值類型(但最好還是使返回類型一致)。編譯器根據(jù)參數(shù),選擇一個(gè)方法,如果沒有完全匹配的,對(duì)于參數(shù)表采用“向上就近匹配原則”,但不允許模棱兩可。方法重載屏蔽了一個(gè)對(duì)象的同一類方法由于參數(shù)不同所造成的差異。封裝:類的屬性加private修飾符,來限制只能夠在類的內(nèi)部進(jìn)行訪問,有效的保護(hù)數(shù)據(jù)。對(duì)于類中的私有屬性,要對(duì)其給出一對(duì)方法getXxx(),setXxx()訪問私有屬性,保證對(duì)私有屬性的操作的安全性。方法公開的是方法的聲明,即只須知道參數(shù)和返回值就可以調(diào)用該方法,隱藏方法的實(shí)現(xiàn)的細(xì)節(jié)。一個(gè)對(duì)象和外界的聯(lián)系應(yīng)當(dāng)通過一個(gè)統(tǒng)一的接口,應(yīng)當(dāng)公開的公開,應(yīng)當(dāng)隱藏的隱藏。繼承:父類到子類是從一般到特殊的關(guān)系。泛化:將不同子類中的共性抽象成父類的過程。特化:在原有父類的基礎(chǔ)上加入一些個(gè)性的過程。原則:父類放共性,子類放個(gè)性。繼承的關(guān)鍵字:extendsJava只支持單繼承:一個(gè)類最多只有一個(gè)直接的父類。方法覆蓋:方法名:相同參數(shù)表:相同訪問限制符:相同或者更寬返回值類型:相同或者子類返回的類型是父類返回的類型的子類(在JDK5.0以后)拋出的異常:不能比父類更寬。 super關(guān)鍵字:super()表示調(diào)用父類的構(gòu)造器super()也和this()一樣必須放在方法的第一句super()和this()不能同時(shí)出現(xiàn) super可以屏蔽子類屬性和父類屬性重名時(shí)帶來的屬性遮蓋,super. 表示調(diào)用父類的方法或?qū)傩栽谧宇惖臉?gòu)造器中如果沒有指定調(diào)用父類的哪一個(gè)構(gòu)造器,那么就會(huì)調(diào)用父類的無參構(gòu)造器,即super()注意: 父類的構(gòu)造器不能被子類繼承 方法和屬性可以被繼承,權(quán)限不限制能否繼承過來,限制的是能否直接訪問 先構(gòu)造父類,后構(gòu)造子類,先this后super多態(tài):多態(tài)分為兩種:編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。編譯時(shí)類型:主觀概念,把它看作什么。運(yùn)行時(shí)類型:客觀概念,實(shí)際它是什么。 例:Animal a=new Dog(); /指著狗問,這個(gè)動(dòng)物是什么? 運(yùn)行時(shí)多態(tài)的三原則:1:對(duì)象類型不變。2:只能對(duì)對(duì)象調(diào)用編譯時(shí)類型中定義的方法。3:在程序的運(yùn)行時(shí),根據(jù)對(duì)象的運(yùn)行時(shí)類型,找覆蓋后的方法來調(diào)用。(運(yùn)行時(shí)動(dòng)態(tài)類型綁定)多態(tài)的作用:把不同的子類對(duì)象都當(dāng)作父類來看,可以屏蔽不同子類對(duì)象之間的差異,寫出通用的代碼,做出通用的編程,以適應(yīng)需求的不斷變化。強(qiáng)制類型轉(zhuǎn)換: 一定沒有新對(duì)象生成。(父類的引用賦值給子類的引用需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換) 關(guān)鍵字:instanceof 用法:引用 instanceof 類名 判斷這個(gè)引用所指向的對(duì)象是否屬于這個(gè)類。 用在強(qiáng)制轉(zhuǎn)換之前,避免類型轉(zhuǎn)換異常。if(a instanceof Dog)Dog d=(Dog)a;內(nèi)部類:定義:定義在另外一個(gè)類中的類,就是內(nèi)部類。編譯后生成的兩個(gè)獨(dú)立的類:Outer.class 和Outer$Inner.class。內(nèi)部類的分類:靜態(tài)內(nèi)部類:靜態(tài)內(nèi)部類定義在類中,任何方法外,用static修飾靜態(tài)內(nèi)部類只能訪問外部類的靜態(tài)成員。在外部類的外部,要?jiǎng)?chuàng)建一個(gè)靜態(tài)內(nèi)部類對(duì)象不需要外部類對(duì)象:Outer.Inner in = new Outer.Inner();在本類內(nèi)部生成內(nèi)部類對(duì)象的方式:Inner in = new Inner();成員內(nèi)部類:作為外部類的一個(gè)成員存在,與外部類的屬性、方法并列在內(nèi)部類中可以直接訪問外部類的私有屬性。內(nèi)部類和外部類的實(shí)例變量允許命名沖突。在內(nèi)部類中訪問實(shí)例變量:this.屬性在內(nèi)部類訪問外部類的實(shí)例變量:外部類名.this.屬性在外部類的外部,要?jiǎng)?chuàng)建一個(gè)成員內(nèi)部類對(duì)象,要首先建立一個(gè)外部類對(duì)象,然后再創(chuàng)建一個(gè)成員內(nèi)部類對(duì)象。 Outer out = new Outer(); Outer.Inner in = out.new Inner(); 在本類內(nèi)部生成內(nèi)部類對(duì)象的方式:在靜態(tài)方法中:Inner in = new Outer().new Inner();在非靜態(tài)方法中:Inner in = this.new Inner();成員內(nèi)部類不可以有靜態(tài)成員,這是因?yàn)殪o態(tài)屬性是在加載類的時(shí)候創(chuàng)建,這個(gè)時(shí)候內(nèi)部類還沒有被創(chuàng)建。局部?jī)?nèi)部類:在外部類的方法中定義的內(nèi)部類與局部變量類似,在局部?jī)?nèi)部類前不可以加修飾符public和private,其作用域?yàn)槎x它的代碼塊。局部?jī)?nèi)部類不僅可以訪問外部類的實(shí)例變量,還可以訪問外部類的局部變量,但要求外部類的局部變量必須為final的。 配合接口使用,來做到強(qiáng)制弱耦合。 在外部類的外部不可創(chuàng)建局部?jī)?nèi)部類對(duì)象,只能在局部?jī)?nèi)部類所在的方法中創(chuàng)建:Inner in = new Inner();匿名內(nèi)部類:一種特殊的局部?jī)?nèi)部類沒有名字,也沒有class、extends、implements關(guān)鍵字用一種隱含的方式實(shí)現(xiàn)一個(gè)接口或繼承一個(gè)類,并且只能創(chuàng)建一次實(shí)例。實(shí)現(xiàn)方式:在某個(gè)語句中,new 父類/父接口名字() 類體中實(shí)現(xiàn)方法 例如:TreesSet ts = new TreeSet(new Comparator()public int compare(Object o1, Object o2) return 0; );匿名內(nèi)部類屬于局部?jī)?nèi)部類,那么局部?jī)?nèi)部類的所有限制都對(duì)其生效。匿名內(nèi)部類是唯一一種無構(gòu)造方法的類,因?yàn)闃?gòu)造器的名字必須合類名相同,而匿名內(nèi)部類沒有類名。修飾符static: 把對(duì)象相關(guān)的變成類相關(guān)的,它可以修飾屬性、方法、代碼塊和內(nèi)部類static修飾屬性(類變量):那么這個(gè)屬性就可以用 類名.屬性名 來訪問,也就是使這個(gè)屬性成為本類的類變量,為本類對(duì)象所共享。類加載的過程,類本身也是保存在文件中(字節(jié)碼文件保存著類的信息)的,java會(huì)通過I/O流把類的文件讀入JVM(java虛擬機(jī)),這個(gè)過程稱為類的加載。JVM會(huì)通過類路徑(CLASSPATH)來找字節(jié)碼文件。需要的時(shí)候才會(huì)進(jìn)行類加載,生成對(duì)象時(shí)是先加載后構(gòu)造類變量,會(huì)在加載時(shí)自動(dòng)初始化,初始化規(guī)則和實(shí)例變量相同。注意:類中的實(shí)例變量是在創(chuàng)建對(duì)象時(shí)被初始化的static修飾的屬性,是在類加載時(shí)被創(chuàng)建并進(jìn)行初始化,類加載的過程只進(jìn)行一次,也就是類變量只會(huì)被創(chuàng)建一次。static修飾方法(靜態(tài)方法):會(huì)使這個(gè)方法成為整個(gè)類所公有的方法,可以用 類名.方法名 訪問。static修飾的方法,不能直接訪問本類中的非靜態(tài)成員,但本類的非靜態(tài)方法可以訪問本類的靜態(tài)成員。 在靜態(tài)方法中不能出現(xiàn)this關(guān)鍵字。父類中是靜態(tài)方法,子類中不能覆蓋為非靜態(tài)方法,在符合覆蓋規(guī)則的前提下,在父子類中,父類中的靜態(tài)方法可以被子類中的靜態(tài)方法覆蓋,但是沒有多態(tài)。(在使用對(duì)象調(diào)用靜態(tài)方法時(shí)其實(shí)是調(diào)用編譯時(shí)類型的靜態(tài)方法)java中的main方法必須寫成static的原因:在類加載時(shí)無法創(chuàng)建對(duì)象,而靜態(tài)方法可以不通過對(duì)象調(diào)用,所以在類加載時(shí)就可以通過main方法入口來運(yùn)行程序。static修飾初始代碼塊:這時(shí)這個(gè)初始代碼塊就叫做靜態(tài)初始代碼塊,這個(gè)代碼塊只在類加載時(shí)被執(zhí)行一次??梢杂渺o態(tài)初始代碼塊初始化一個(gè)類。動(dòng)態(tài)初始代碼塊,寫在類體中的“”,這個(gè)代碼塊是在生成對(duì)象時(shí)運(yùn)行,這種代碼塊叫動(dòng)態(tài)初始代碼塊。單例設(shè)計(jì)模式:一個(gè)類只允許有一個(gè)對(duì)象,保證所有引用的對(duì)象都是同一個(gè)對(duì)象。因?yàn)橹辉试S存在一個(gè)對(duì)象,則不允許在外面直接new出新的對(duì)象,所以應(yīng)該把構(gòu)造器設(shè)為private,。在類內(nèi)定義一個(gè)公開的靜態(tài)方法,讓使用者進(jìn)行調(diào)用,通過該方法去獲得一個(gè)實(shí)例。例:public calss Singletonprivate static Singleton s;private Singleton()public static Singleton newInstance()if ( s = null)s = new Singleton();return s;修飾符final:不允許改變,可以修飾變量、方法、類final修飾變量:被fianl修飾的變量就會(huì)變成常量,一旦賦值不能改變常量可以在初始化時(shí)直接賦值,也可以在構(gòu)造方法里賦值,只能在這兩種方法里二選一,不能不為常量賦值常量不會(huì)有默認(rèn)初始值鎖定棧,使棧中的數(shù)據(jù)不可以改變靜態(tài)常量只能在初始化時(shí)直接賦值final修飾方法:被final修飾的方法將不能被其子類覆蓋,保持方法的穩(wěn)定不能被覆蓋final修飾類:被final修飾的類將不能被繼承final類中的方法也都是final的注意:final不能用來修飾構(gòu)造方法訪問權(quán)限控制:private:本類內(nèi)部可以訪問不能繼承到子類default:本類內(nèi)部可以訪問,同包其他類也可以訪問。同包可繼承protected:本類內(nèi)部可以訪問,不同包的子類也可以訪問,同包其他類也可以訪問。能繼承到子類public:任何地方都可以訪問 能繼承到子類修飾符abstract:抽象的,定義框架不去實(shí)現(xiàn),可以修飾類和方法abstract修飾類:會(huì)使這個(gè)類成為一個(gè)抽象類,這個(gè)類將不能生成對(duì)象實(shí)例,但可以做為對(duì)象變量聲明的類型,也就是編譯時(shí)類型抽象類就相當(dāng)于一個(gè)類的半成品,需要子類繼承并覆蓋其中的抽象方法,這時(shí)子類才又創(chuàng)建實(shí)例的能力,如果子類沒有實(shí)現(xiàn)父類的抽象方法,那么子類也要為抽象類。abstract修飾方法:會(huì)使這個(gè)方法變成抽象方法,也就是只有聲明而沒有實(shí)現(xiàn),實(shí)現(xiàn)部分以;代替,需要子類繼承實(shí)現(xiàn)。抽象方法代表了某種標(biāo)準(zhǔn),定義標(biāo)準(zhǔn),定義功能,在子類中去實(shí)現(xiàn)功能(子類繼承了父類并需要給出從父類繼承的抽象方法的實(shí)現(xiàn))。方法一時(shí)間想不到怎么被實(shí)現(xiàn),或有意要子類去實(shí)現(xiàn)而定義某種標(biāo)準(zhǔn),這個(gè)方法可以被定義為抽象。注意:有抽象方法的類一定是抽象類。但是抽象類中不一定都是抽象方法,也可以全是具體方法。接口(interface):接口的定義:接口從本質(zhì)上說是一種特殊的抽象類。關(guān)鍵字interface。在接口中,所有的方法為公開、抽象的方法:public abstract在接口中,所有的屬性都是公開、靜態(tài)的常量:public static final接口與接口之間可以多繼承,用extends,多個(gè)之間用逗號(hào)隔開。接口中沒有構(gòu)造方法,不能用“new 接口名”來實(shí)例化一個(gè)接口,但可以聲明一個(gè)接口。接口的實(shí)現(xiàn):關(guān)鍵字implements一個(gè)類實(shí)現(xiàn)一個(gè)接口必須實(shí)現(xiàn)接口中所有的方法,否則其為抽象類,并且在實(shí)現(xiàn)類中的方法要加上public(不能省略)。類中的默認(rèn)修飾符:default。接口中的默認(rèn)修飾符:public。一個(gè)類除了繼承另一個(gè)類外(只能繼承一個(gè)類),還可以實(shí)現(xiàn)多個(gè)接口(接口之間用逗號(hào)分隔)。接口的作用:間接實(shí)現(xiàn)多繼承:用接口來實(shí)現(xiàn)多繼承并不會(huì)增加類關(guān)系的復(fù)雜度。因?yàn)榻涌诓皇穷?,與類不在一個(gè)層次上,是在類的基礎(chǔ)上進(jìn)行再次抽象。接口可以抽象出次要類型,分出主、次關(guān)系類型,符合看世界的一般方法。接口隔離,與封裝性有關(guān)。一個(gè)對(duì)象都有多個(gè)方面,可以只展示其中幾個(gè)方面,其他的都隱藏。因此可以看為“更高層次的封裝”,把一個(gè)大接口做成若干個(gè)小接口。通過接口制定標(biāo)準(zhǔn)(最重要的作用)接口:制定標(biāo)準(zhǔn)。接口的調(diào)用者:使用標(biāo)準(zhǔn)。接口的實(shí)現(xiàn)類:實(shí)現(xiàn)標(biāo)準(zhǔn)。解耦合作用:把使用標(biāo)準(zhǔn)和實(shí)現(xiàn)標(biāo)準(zhǔn)分開,使得標(biāo)準(zhǔn)的制定者和實(shí)現(xiàn)者解除偶合關(guān)系,具有極強(qiáng)的可移植性例:sun公司提供一套訪問數(shù)據(jù)庫(kù)的接口(標(biāo)準(zhǔn)),java程序員訪問數(shù)據(jù)庫(kù)時(shí)針對(duì)數(shù)據(jù)庫(kù)接口編程。接口由各個(gè)數(shù)據(jù)庫(kù)廠商負(fù)責(zé)實(shí)現(xiàn)。接口編程的原則盡量針對(duì)接口編程(能用接口就盡量用接口)接口隔離原則(用若干個(gè)小接口取代一個(gè)大接口)注意:接口中沒有構(gòu)造器,也沒有main方法封裝類:Java為每一個(gè)簡(jiǎn)單數(shù)據(jù)類型提供了一個(gè)封裝類。除int和char,其余類型首字母大寫即成封裝類。int Integerchar Character最常用的兩個(gè)封裝類Integer和Doublejdk1.4之前基本類型和封裝類的轉(zhuǎn)化是需要構(gòu)造器去轉(zhuǎn)化的,到了jdk1.5是自動(dòng)進(jìn)行轉(zhuǎn)化的int、Integer和String之間的轉(zhuǎn)化(最常用的)int i=1;Integer in = new Integer(i);/int - Integer int i = Value();/Integer - int String str = String.valueOf(i);/Int - Stringint ii = Integer.parseInt(str);/String - intString s = in.toString();/Integer - StringInteger inte = Integer.valueOf(str);/String - Integer Object類:hashCode():返回該對(duì)象的哈希碼值hashCode 的常規(guī)協(xié)定是: 在 Java 應(yīng)用程序執(zhí)行期間,在同一對(duì)象上多次調(diào)用 hashCode 方法時(shí),必須一致地返回相同的整數(shù),前提是對(duì)象上 equals 比較中所用的信息沒有被修改。如果根據(jù) equals(Object) 方法,兩個(gè)對(duì)象是相等的,那么在兩個(gè)對(duì)象中的每個(gè)對(duì)象上調(diào)用 hashCode 方法都必須生成相同的整數(shù)結(jié)果。 toString():返回該對(duì)象的字符串表示。通常,toString 方法會(huì)返回一個(gè)“以文本方式表示”此對(duì)象的字符串。結(jié)果應(yīng)是一個(gè)簡(jiǎn)明但易于讀懂。建議所有子類都重寫此方法。equals():指示某個(gè)其他對(duì)象是否與此對(duì)象“相等”。 equals 方法在非空對(duì)象引用上實(shí)現(xiàn)相等關(guān)系: 自反性:對(duì)于任何非空引用值 x,x.equals(x) 都應(yīng)返回 true。 對(duì)稱性:對(duì)于任何非空引用值 x 和 y,當(dāng)且僅當(dāng) y.equals(x) 返回 true 時(shí),x.equals(y) 才應(yīng)返回 true。 傳遞性:對(duì)于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 應(yīng)返回 true。 一致性:對(duì)于任何非空引用值 x 和 y,多次調(diào)用 x.equals(y)始終返回 true 或始終返回 false,前提是對(duì)象上 equals 比較中所用的信息沒有被修改。對(duì)于任何非空引用值 x,x.equals(null) 都應(yīng)返回 false。 注意:當(dāng)此方法被重寫時(shí),通常有必要重寫 hashCode 方法,以維護(hù) hashCode 方法的常規(guī)協(xié)定,該協(xié)定聲明相等對(duì)象必須具有相等的哈希碼。 String、StringBuffer和StringBulder:String: 不可改變的Unicode字符序列池化思想,把需要共享的數(shù)據(jù)放在池中,用一個(gè)存儲(chǔ)區(qū)域來存放一些公用資源以減少存儲(chǔ)空間的開銷。在String類中,以字面值創(chuàng)建時(shí),會(huì)到Java方法空間的串池中去查找,如果沒有則會(huì)在串池里創(chuàng)建一個(gè)字符串對(duì)象,并返回其地址賦給對(duì)象變量,如果有就返回串池中字符串的地址,并把這個(gè)地址賦給對(duì)象變量。如果是new,則會(huì)在堆空間中創(chuàng)建String類的對(duì)象,不會(huì)有上述的過程如:String s1= abc;/新創(chuàng)建,字符串常量池中沒有該串,則會(huì)在池中創(chuàng)建一個(gè)串a(chǎn)bcString s2=abc;/串池中已經(jīng)存在abc,則s2會(huì)去指向abc而不會(huì)去創(chuàng)建一個(gè)新的String s3=new String(abc);/直接在堆中去開辟一個(gè)新的空間,而不會(huì)去池中查找String的低層實(shí)現(xiàn)是用的char數(shù)組類中的具體方法查看下API文檔。調(diào)用任何String中的方法,不會(huì)改變String自身,除非重新賦值。StringBuffer: 可改變的Unicode字符序列允許并發(fā)操作,是線程安全的String類在進(jìn)行字符串連接時(shí)會(huì)顯得效率很低,就是因?yàn)樗a(chǎn)生的對(duì)象的屬性是不能夠修改的,當(dāng)連接字符串時(shí)也就只能創(chuàng)建新的對(duì)象。對(duì)于很多字符串連接時(shí),應(yīng)當(dāng)使用StringBuffer類,使用這個(gè)類的對(duì)象來進(jìn)行字符串連接時(shí)就不會(huì)有多余的中間對(duì)象生成,從而優(yōu)化了效率。例:對(duì)于字符串連接String str = A + B + C + D;產(chǎn)生:AB、ABC、ABCD在串池中產(chǎn)生的AB、ABC明顯是多余對(duì)象,浪費(fèi)空間。在J2ME中應(yīng)少使用String,最好用StringBuffer取代。 解決方案: String s = null; StringBuffer sb = new StringBuffer(A); sb.append(B); sb.append(C); sb.append(D); s = sb.toString();StringBulder: 可改變的Unicode字符序列操作同StringBuffer,只是不支持并發(fā)操作,非線程安全的異常:異常的分類: Java會(huì)將所有的異常封裝成對(duì)象,其根本父類為Throwable。 Throwable有兩個(gè)子類:Error 和Exception。Error:一個(gè)Error對(duì)象表示一個(gè)程序錯(cuò)誤,指的是底層的低級(jí)的不可恢復(fù)的嚴(yán)重錯(cuò)誤遇到Error,程序一定會(huì)退出,因?yàn)橐呀?jīng)失去了運(yùn)行所必須的物理環(huán)境。對(duì)于Error我們無法進(jìn)行處理,因?yàn)槲覀兪峭ㄟ^程序來應(yīng)對(duì)錯(cuò)誤的,可是程序已經(jīng)退出了。 Exception:由特定因素,導(dǎo)致程序無法繼續(xù),但不影響虛擬機(jī)的正常執(zhí)行。未檢查異常(Runtime Exception):是因?yàn)槌绦騿T沒有進(jìn)行必要的檢查,由于程序員的疏忽而引起的異常。對(duì)于未檢查異??梢圆惶幚恚幾g可以通過,應(yīng)對(duì)未檢查異常的方法就是養(yǎng)成良好的檢查習(xí)慣已檢查異常(非Runtime Exception):是不可避免的,對(duì)于已檢查異常必須處理,否則編譯不通過。異常處理的機(jī)制:當(dāng)一個(gè)方法中有一條語句出現(xiàn)了異常,它就會(huì)throw(拋出)一個(gè)異常對(duì)象(throw 異常對(duì)象),然后后面的語句不會(huì)執(zhí)行,而返回上一級(jí)方法,其上一級(jí)方法接受到了異常對(duì)象之后,有可能對(duì)這個(gè)異常進(jìn)行處理(進(jìn)行處理則不會(huì)上拋),也可能將這個(gè)異常傳到它的上一級(jí),如果最上一級(jí)(main方法)不處理就會(huì)傳給虛擬機(jī),虛擬機(jī)就會(huì)終止程序的運(yùn)行。異常的處理方式:throws和try-catch方法(在J2ME中try.catch也是占用資源的語句,如果事先明白他會(huì)有什么異常盡量用if.else來進(jìn)行處理)try-catch處理方式:try/一個(gè) (1)可能出現(xiàn)異常的語句 catch(XxxException e /*捕獲的異常*/) /0或n個(gè) (2)處理異常的代碼 finally/0或1個(gè) (3)必須要執(zhí)行的代碼(4)方法中的其他代碼如果代碼正確,那么程序不經(jīng)過catch語句直接向下運(yùn)行;如果代碼不正確,則將返回的異常對(duì)象和e進(jìn)行匹配,如果匹配成功,則處理其后面的異常處理代碼。try中如果發(fā)現(xiàn)錯(cuò)誤,即跳出try塊去匹配catch,那么try后面的語句就不會(huì)被執(zhí)行。一個(gè)try可以跟多個(gè)catch語句,用于處理不同情況,但是不能將父類型的exception的位置寫在子類型的excepiton之前。在try-catch后還可以再跟一子句finally。其中的代碼語句論有沒有異常都會(huì)被執(zhí)行(因?yàn)閒inally子句的這個(gè)特性,所以一般將釋放資源,關(guān)閉連接的語句寫在里面)。finally中的代碼和try-catch中的代碼沖突時(shí),finally中的代碼一定會(huì)被執(zhí)行且會(huì)忽略try-catch中的代碼。但是如果try-catch中有System.exit(0);(虛擬機(jī)退出語句),則不會(huì)去執(zhí)行fianlly中的代碼。throws/throw處理方式:throw 寫在方法內(nèi),后面跟一個(gè)異常對(duì)象。throws 在方法的定義中說明方法可能拋出的異常,后面跟異常類的名字,聲明這個(gè)方法將不處理異常,把異常交給上一級(jí)方法處理。調(diào)用時(shí),調(diào)用者不能拋出范圍更小的異常。對(duì)于方法a,如果它定義了throws Exception。那么當(dāng)它調(diào)用的方法b返回異常對(duì)象時(shí),方法a并不處理,而將這個(gè)異常對(duì)象向上一級(jí)返回,如果所有的方法均不進(jìn)行處理,返回到主方法,如主方法也不進(jìn)行處理,則到虛擬機(jī)中,程序中止。如果在方法的程序中有一行throw new Exception(),那么其后的程序不執(zhí)行,如果沒有對(duì)這個(gè)可能出現(xiàn)的檢查結(jié)果進(jìn)行處理,那么程序就會(huì)報(bào)錯(cuò)。throws和throw沒有必然的聯(lián)系。注意:方法的覆蓋中,如果子類的方法拋出的例外是父類方法拋出的例外的父類型,那么編譯就會(huì)出錯(cuò):子類無法覆蓋父類。子類拋出的例外或者與父類拋出的例外一致,或者是父類拋出例外的子類型,或者子類型不拋出例外。如果父類型無throws時(shí),子類型也不允許出現(xiàn)throws。此時(shí)只能使用try catch。多線程:進(jìn)程與線程:進(jìn)程:同一個(gè)操作系統(tǒng)中執(zhí)行的一個(gè)子程序,包含了三部分虛擬CPU、代碼、數(shù)據(jù)多進(jìn)程:同一個(gè)操作系統(tǒng)中執(zhí)行的多個(gè)并行的子程序。可以提高cpu的使用率線程:在同一個(gè)進(jìn)程當(dāng)中執(zhí)行的子程序流多線程:同一個(gè)進(jìn)程當(dāng)中并發(fā)執(zhí)行的多個(gè)子程序流??梢蕴岣遚pu的使用率 進(jìn)程與線程的區(qū)別:進(jìn)程有獨(dú)立的進(jìn)程空間,進(jìn)程中的數(shù)據(jù)存放空間(堆空間和棧空間)是獨(dú)立的。 線程的堆空間是共享的,棧空間是獨(dú)立的,線程消耗的資源也比進(jìn)程小,相互之間 可以影響的。Java中如何調(diào)進(jìn)程:調(diào)用本地程序的兩個(gè)類RuntimeRuntime.getRuntime.exec(.);/執(zhí)行一個(gè)程序其返回值就是Process類型Process注意:只有運(yùn)行狀態(tài)的線程才有機(jī)會(huì)執(zhí)行代碼,主線程的中止不會(huì)影響其他的正在運(yùn)行中 的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全電工考試試題及答案
- 確??记爸R(shí)掌握的高效方法試題及答案
- 網(wǎng)絡(luò)安全審計(jì)的關(guān)鍵點(diǎn)試題及答案
- 機(jī)電工程建筑設(shè)備試題及答案
- 創(chuàng)新備考的網(wǎng)絡(luò)工程師試題及答案
- 行業(yè)專家對(duì)考生的建議和指導(dǎo)試題及答案
- 公共政策的可行性研究方法試題及答案
- 安全員考核理論考試復(fù)習(xí)測(cè)試卷含答案
- 西方政治制度中的透明與問責(zé)試題及答案
- 網(wǎng)絡(luò)工程師的職場(chǎng)競(jìng)爭(zhēng)力提升試題及答案
- 三支一扶試題及答案
- 2025-2030中國(guó)保鮮盒行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025年江蘇省無錫市宜興市中考二模英語試題(含答案)
- 2025年福建省中考地理沖刺卷模擬檢測(cè)卷(含答案)
- 2025年中國(guó)鲅魚市場(chǎng)研究分析與投資建議策略報(bào)告
- 有責(zé)任有擔(dān)當(dāng)?shù)暮诵乃仞B(yǎng)培養(yǎng)
- 法制移植與本土化交融研究
- 2025山東濟(jì)南先行投資集團(tuán)有限責(zé)任公司及權(quán)屬公司社會(huì)招聘169人筆試參考題庫(kù)附帶答案詳解
- 綜合呈現(xiàn)2025年入團(tuán)考試試題及答案
- 2025屆廣西壯族自治區(qū)部分學(xué)校高三下學(xué)期三模英語試題(原卷版+解析版)
- 《建筑電氣工程施工》課件
評(píng)論
0/150
提交評(píng)論