久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

Java編程思想讀書筆記(第5-7章)

瀏覽:5日期:2024-06-17 09:05:08
內(nèi)容: 第2章萬事萬物皆對(duì)象一.所有對(duì)象都必須由你建立1.存儲(chǔ)在哪里1.寄存器:我們?cè)诔绦蛑袩o法控制2.stack:存放基本類型的數(shù)據(jù)和對(duì)象的reference,但對(duì)象本身不存放在stack中,而是存放在Heap中3.Heap:存放用new產(chǎn)生的數(shù)據(jù)4.Static storage:存放在對(duì)象中用static定義的靜態(tài)成員5.Constant storage:存放常量6.NON-RAM:硬盤等永久存儲(chǔ)空間2.特例:基本型別基本類型數(shù)據(jù)存放在Stack中,存放的是數(shù)據(jù)。而產(chǎn)生對(duì)象時(shí),只把對(duì)象的reference存放在stack中,用于指向某個(gè)對(duì)象,對(duì)象本身存放在Heap中。3.Java中的數(shù)組當(dāng)你產(chǎn)生某個(gè)存儲(chǔ)對(duì)象的數(shù)組時(shí),真正產(chǎn)生的其實(shí)是存儲(chǔ)reference的數(shù)組。引數(shù)組建立后,其中的每一個(gè)reference都會(huì)被自動(dòng)設(shè)為null,表示“不指向任何對(duì)象。二.建立新的數(shù)據(jù)型別:Class1.?dāng)?shù)據(jù)成員和函數(shù)1.1基本成員的缺省值1)當(dāng)class的某個(gè)成員屬于基本型別時(shí),即使你沒有為它提供初值,Java仍保證它有一個(gè)缺省值。2)只有當(dāng)變量身份是“class內(nèi)的成員時(shí),Java才保證為該變量提供初值。三.函數(shù)(Mehtods),引數(shù)(arguments),返回值(return values)1.引數(shù)列當(dāng)引數(shù)傳遞的是對(duì)象時(shí),傳遞的是對(duì)象的reference。四.注解用內(nèi)嵌式文檔Java提供兩種注解風(fēng)格:/*XXXX*/、//XXXX第3章控制程序流程一.使用Java運(yùn)算符1.關(guān)系運(yùn)算符1.) 當(dāng)對(duì)兩個(gè)對(duì)象運(yùn)用關(guān)系運(yùn)算符進(jìn)行比較時(shí),比較的是object reference,如:java/lang/Integer.java.html' target='_blank'>Integer n1 = new java/lang/Integer.java.html' target='_blank'>Integer(3);java/lang/Integer.java.html' target='_blank'>Integer n2 = new java/lang/Integer.java.html' target='_blank'>Integer(3);java/lang/System.java.html' target='_blank'>System.out.println(n1==n2);結(jié)果為false,因?yàn)閮蓚€(gè)object reference(n1和n2)值是不同的2) quals()的缺省行為也是拿referenct來比較。不過Java中的class覆寫了equals方法,如:java/lang/Integer.java.html' target='_blank'>Integer n1 = new java/lang/Integer.java.html' target='_blank'>Integer(3);java/lang/Integer.java.html' target='_blank'>Integer n2 = new java/lang/Integer.java.html' target='_blank'>Integer(3);java/lang/System.java.html' target='_blank'>System.out.println(n1.quals(n2));//值為true2.邏輯運(yùn)算符1)只能將and、or、not施用于boolean值身上。如果邏輯運(yùn)算符兩邊的值存在non-boolean值,將會(huì)出錯(cuò),如:int test1 = 1;java/lang/System.java.html' target='_blank'>System.out.println((test && 1String ss){}Flower(int petals, Sting ss){//petals++;調(diào)用另一個(gè)構(gòu)造函數(shù)的語句必須在最起始的位置this(petals);//this(ss);會(huì)產(chǎn)生錯(cuò)誤,因?yàn)樵谝粋€(gè)構(gòu)造函數(shù)中只能調(diào)用一個(gè)構(gòu)造函數(shù)}}**:1)在構(gòu)造調(diào)用另一個(gè)構(gòu)造函數(shù),調(diào)用動(dòng)作必須置于最起始的位置2)不能在構(gòu)造函數(shù)以外的任何函數(shù)內(nèi)調(diào)用構(gòu)造函數(shù)3)在一個(gè)構(gòu)造函數(shù)內(nèi)只能調(diào)用一個(gè)構(gòu)造函數(shù)4.Static的意義無法在static函數(shù)中調(diào)用non-static函數(shù)(反向可行)。為什么不能呢,我們看下面的例子。例4.2.4.1假設(shè)能在static函數(shù)中調(diào)用non-static函數(shù),那么(a)處就將出錯(cuò)。因?yàn)樵跊]有產(chǎn)生Movie class實(shí)例之前,在就不存在Movie class內(nèi)的name實(shí)例,而在getName()中卻要使用name實(shí)例,顯然的錯(cuò)誤的。class Movie{java/lang/String.java.html' target='_blank'>String name = “;Movie(){}public Movie(java/lang/String.java.html' target='_blank'>String name) { this.name = name; }public static java/lang/String.java.html' target='_blank'>String getName() { return name; }}public class Test{public static void main(java/lang/String.java.html' target='_blank'>String[] args){//下面兩名先產(chǎn)生實(shí)例后再調(diào)用getName()沒有問題//Movie movie1 = new Movie(“movie1);//String name1 = movie1.getName();//下面一名將出錯(cuò)//String name2 = Movie.getname(); (a)}}三.清理(cleanup):終結(jié)(finalization)與垃圾回收(garbage collection)1)你的對(duì)象可能不會(huì)被回收只有當(dāng)程序不夠內(nèi)存時(shí),垃圾回收器才會(huì)啟動(dòng)去回收不再被使用的對(duì)象的內(nèi)存空間。某個(gè)對(duì)象所占用的空間可能永遠(yuǎn)不會(huì)被釋放掉,因?yàn)槟愕某绦蚩赡苡肋h(yuǎn)不會(huì)逼近內(nèi)存用完的那一刻,而垃圾回收器完全沒有被啟動(dòng)以釋放你的對(duì)象所占據(jù)的內(nèi)存,那些空間便會(huì)在程序終止時(shí)才一次歸還給操作系統(tǒng)3)只有在采用原生函數(shù)(native methods)時(shí),才使用finalize()。四.成員初始化(member initialization)1)函數(shù)中的變量不會(huì)被自動(dòng)初始化,如void f(){int i;i++;}將發(fā)生編譯錯(cuò)誤,因?yàn)閕沒有被初始化。2)class的數(shù)據(jù)成員會(huì)被自動(dòng)初始化,具體情況如下(見P220例子):基本型別:boolean:false、char:null(u0000)、byte:0、short:0、int:0、long:0 、float:0、double:0第6章重復(fù)運(yùn)用classes一.繼承(inheritance)1.在derived class中overriding某個(gè)函數(shù)時(shí),只能覆寫base class中的接口,即base class中的public或protected或friendly函數(shù)。如果試圖overriding一個(gè)private函數(shù),雖然編譯通過,但實(shí)際上你只是在derived class中添加了一個(gè)函數(shù)。如class Cleanser{private void prt(){//(b)java/lang/System.java.html' target='_blank'>System.out.println('Cleanser.prt()');}}public class ExplicitStatic extends Cleanser{public void prt(){java/lang/System.java.html' target='_blank'>System.out.println('ExplicitStatic.prt()');}public static void main(java/lang/String.java.html' target='_blank'>String[] args){Cleanser x = new ExplicitStatic();x.prt();//(a)}}因?yàn)镃leanser中的prt()是private,所以不能在其derived class中被覆寫。ExplicitStatic中的prt()只是ExplicitStatic中的一個(gè)函數(shù),所以當(dāng)試圖在(a)處通過多態(tài)來調(diào)用prt()時(shí),會(huì)發(fā)生錯(cuò)誤。如果把(b)處的private去掉,則結(jié)果為ExplicitStatic.prt()2.Super的使用1)通過關(guān)鍵字super可以調(diào)用當(dāng)前class的superclass(父類)。例6.1.1.1class Base{Base(){java/lang/System.java.html' target='_blank'>System.out.println('Base()');}public void scrub() { java/lang/System.java.html' target='_blank'>System.out.println(' Base.scrub()'); }}class Cleanser extends Base{private java/lang/String.java.html' target='_blank'>String s = new java/lang/String.java.html' target='_blank'>String('Cleanser');public void append(java/lang/String.java.html' target='_blank'>String a) { s+=a; }public void dilute() { append(' dilute()'); }public void apply() { append(' apply()'); }public void scrub() { append(' scrub()'); }public void print() { java/lang/System.java.html' target='_blank'>System.out.println(s); }Cleanser(){java/lang/System.java.html' target='_blank'>System.out.println('Cleanser(): ' + s);}public static void testStatic(){java/lang/System.java.html' target='_blank'>System.out.println('testStatic()');}public static void main(java/lang/String.java.html' target='_blank'>String[] args){Cleanser x = new Cleanser();x.dilute(); x.apply(); x.scrub(); x.print();}}public class ExplicitStatic extends Cleanser{ExplicitStatic(){java/lang/System.java.html' target='_blank'>System.out.println('ExplicitStatic()');}public void scrub(){append(' Detergen.scrub()');super.testStatic();super.scrub();//調(diào)用的是Cleanser.scrub()}public void foam() { append(' foam()'); }public static void main(java/lang/String.java.html' target='_blank'>String[] args){ExplicitStatic x = new ExplicitStatic();x.dilute(); x.apply(); x.scrub(); x.foam();x.print(); java/lang/System.java.html' target='_blank'>System.out.println('Test base class:');Cleanser.main(args);testStatic();}}運(yùn)行結(jié)果:Base()Cleanser(): CleanserExplicitStatic()testStatic()Cleanser dilute() apply() Detergen.scrub() scrub() foam()Test base class:Base()Cleanser(): CleanserCleanser dilute() apply() scrub()testStatic()2)通過super來調(diào)用superclass中的成員時(shí),調(diào)用的是最近成員。例6.1.1.2class Base{protected java/lang/String.java.html' target='_blank'>String baseS = 'Base';//(a)//private String baseS = 'Base';Base(){java/lang/System.java.html' target='_blank'>System.out.println('Base()');}}class Cleanser extends Base{protected java/lang/String.java.html' target='_blank'>String baseS = 'Cleanser';//(b)public java/lang/String.java.html' target='_blank'>String s = new java/lang/String.java.html' target='_blank'>String('Cleanser');Cleanser(){java/lang/System.java.html' target='_blank'>System.out.println('Cleanser(): ' + s);}Cleanser(java/lang/String.java.html' target='_blank'>String a){java/lang/System.java.html' target='_blank'>System.out.println('Cleanser(' + a + '): s = ' + s );}}public class ExplicitStatic extends Cleanser{java/lang/String.java.html' target='_blank'>String s2 = s;java/lang/String.java.html' target='_blank'>String baseS = super.baseS; //(c)ExplicitStatic(){super('ExplicitStatic');java/lang/System.java.html' target='_blank'>System.out.println('ExplicitStatic():s2 = ' + s2 + ', baseS = '+ baseS + 'super.baseS = ' + super.baseS);baseS = 'ExplicitStatic';java/lang/System.java.html' target='_blank'>System.out.println('baseS = ' + baseS + ' , super.baseS = ' + super.baseS);}public static void main(java/lang/String.java.html' target='_blank'>String[] args){ExplicitStatic x = new ExplicitStatic();}}結(jié)果1:Base()Cleanser(ExplicitStatic): s = CleanserExplicitStatic():s2 = Cleanser, baseS = Cleanser,super.baseS = CleanserbaseS = ExplicitStatic , super.baseS = Cleanser在上面例子中,在三個(gè)class中都存在String bases實(shí)例。在ExplicitStatic中如果直接調(diào)用baseS,則實(shí)際調(diào)用的是當(dāng)前類ExplicitStatic中的baseS(即(c)處的成員);如果通過super.bases來調(diào)用baseS,則調(diào)用的是離當(dāng)前類ExplicitStatic最近的baseS成員,即Cleanser class中的baseS實(shí)例(即(b)處),產(chǎn)生的結(jié)果如結(jié)果1所示。如果把(b)處語句注釋掉,則將調(diào)用Base class中的baseS,結(jié)果如結(jié)果2所示。結(jié)果2:Base()Cleanser(ExplicitStatic): s = CleanserExplicitStatic():s2 = Cleanser, baseS = Base,super.baseS = BasebaseS = ExplicitStatic , super.baseS = Base3.Base class的初始化2.1當(dāng)你產(chǎn)生derived class對(duì)象時(shí),其中會(huì)包含base class子對(duì)象(subobject)。這個(gè)子對(duì)象就和你另外產(chǎn)生的base class對(duì)象一模一樣。2.2通過super()可調(diào)用base class的構(gòu)造函數(shù),但必須放在構(gòu)造函數(shù)的第一行,并且只能在構(gòu)造函數(shù)中運(yùn)用。2.3初始化順序?yàn)椋?)加載代碼(.class文件)2)初始化class的靜態(tài)成員,初始化順序了“從里到外,即從base class開始。3)在derived class的構(gòu)造函數(shù)中調(diào)用base class的構(gòu)造函數(shù)。如果在derived class的構(gòu)造函數(shù)中沒有通過super()顯式調(diào)用調(diào)用base class的構(gòu)造函數(shù),編譯器會(huì)調(diào)用bass class的default構(gòu)造函數(shù)并自動(dòng)生成相應(yīng)的調(diào)用語句,從而產(chǎn)生一個(gè)base class實(shí)例。如果在derived class的構(gòu)造函數(shù)中通過super()顯示調(diào)用了父類的構(gòu)造函數(shù),則調(diào)用所指定的構(gòu)造函數(shù)。調(diào)用構(gòu)造函數(shù)的調(diào)用順序是“從里到外。4)調(diào)用derived class的構(gòu)造函數(shù)。**:當(dāng)base class沒有default構(gòu)造函數(shù)時(shí),必須在derived class的構(gòu)造函數(shù)中通過super顯示調(diào)用base class的構(gòu)造函數(shù)。例:下面代碼的初始化過程為:1)裝載ExplicitStatic的代碼(裝載ExplicitStatic.class文件)。2)發(fā)現(xiàn)ExplicitStatic有關(guān)鍵字extends,裝載ExplicitStatic的base class的代碼(裝載Cleanser.class文件)。3)發(fā)現(xiàn)Cleanser有關(guān)鍵字extends,裝載Cleanser的base class的代碼(裝載Base.class文件)。4)初始化Base class中的靜態(tài)成員。5)初始化Cleanser class中的靜態(tài)成員。6)初始化ExplicitStatic class中的靜態(tài)成員。如果把(c)處的代碼注釋掉,那么初始化工作到此就結(jié)束了。7)為ExplicitStatic對(duì)象分配存儲(chǔ)空間,并把存儲(chǔ)空間初始化為0。8)在ExplicitStatic class的構(gòu)造中調(diào)用super('ExplicitStatic')(在ExplicitStatic class的構(gòu)造函數(shù)中顯式調(diào)用父類的構(gòu)造函數(shù)),試圖產(chǎn)生一個(gè)Cleanser class實(shí)例。9)為Cleanser對(duì)象分配存儲(chǔ)空間,并把存儲(chǔ)空間初始化為0。10)由于Cleanser class又是繼承自Base class, Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 成人精品视频一区二区三区 | 午夜日韩在线观看 | 在线免费观看毛片 | 亚洲 中文 欧美 日韩 在线观看 | 国产视频久久久 | 久久久成人网 | 久久精品视频网站 | 日本精品一区二区三区在线观看视频 | 日韩久久久久久久久久久 | 精品1区 | 欧美性影院 | 欧美日韩国产一区二区三区在线观看 | 日一日干一干 | 精品久久久久久久人人人人传媒 | 成人午夜性a一级毛片免费看 | 久久噜噜噜精品国产亚洲综合 | 超碰国产在线 | 国产欧美一区二区精品性色 | 黄色91| 久久亚洲精品裙底抄底 | 91操碰| 日韩视频在线观看一区二区 | 一区日韩 | 人人草人人干 | 精品国产一区二区三区在线观看 | 久久久久亚洲美女啪啪 | 97视频在线| 国产成人精品999在线观看 | 91在线导航 | 999这里只有是极品 免费的一级黄色片 | 成人精品视频 | 欧美一区二区三区四区五区 | 国产福利在线观看视频 | 国产精品18久久久久久久久久久久 | 成人视屏在线观看 | 久久国产精品99久久久久久老狼 | 女人毛片a毛片久久人人 | 国产免费黄视频 | 久草国产视频 | 亚洲激情av| 国产一区二区久久 |