版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1. 編寫程序,用數(shù)組實(shí)現(xiàn)乘法小九九的存儲(chǔ)和輸出?!咎崾荆翰捎枚鄠€(gè)一維數(shù)組?!?public class Multipation public static void main(String args) 定義一個(gè)類Student,屬性為學(xué)號、姓名和成績;方法為增加記錄SetRecord和得到記錄GetRecord。SetRecord給出學(xué)號、姓名和成績的賦值,GetRecord通過學(xué)號得到考生的成績。public class Student /* * param args */private int ID;private String name;private float score;publ
2、ic void SetRecord(int ID,String name,float score)=ID;=name;=score;public float getRecord(int ID)if(ID=return ;elsereturn -1;public static void main(String args) 編寫程序,測試字符串“你好,歡迎來到Java世界”的長度,將字符串的長度轉(zhuǎn)換成字符串進(jìn)行輸出,并對其中的“Java”四個(gè)字母進(jìn)行截取,輸出截取字母以及它在字符串中的位置。public class StringTest /* * param args */public stati
3、c void main(String args) 自己設(shè)計(jì)一個(gè)坐標(biāo)類,能提供以下方法如求當(dāng)前坐標(biāo)和其他坐標(biāo)之間的距離等方法,要求所有變量為私有變量,并提供兩個(gè)構(gòu)造函數(shù)。public class XYdistance private int x;private int y;XYdistance()setX(0);setY(0);public void setX(int x) = x;public int getX() return x;public void setY(int y) = y;public int getY() return y;public static void main(St
4、ring args) lass文件中的一些數(shù)據(jù)。JVM虛擬機(jī)為每個(gè)被裝載的類型維護(hù)一個(gè)常量池。常量池就是該類型所用到常量的一個(gè)有序集和,包括直接常量(String,Integer和 Floating point常量)和對其他類型,字段和方法的符號引用。對于String常量,它的值是在常量池中的。而JVM中的常量池在內(nèi)存當(dāng)中是以表的形式存在的, 對于String類型,有一張固定長度的CONSTANT_String_info表用來存儲(chǔ)文字字符串值,注意:該表只存儲(chǔ)文字字符串值,不存儲(chǔ)符號引用。 1、String s = "abc" 創(chuàng)建過程分析:在class文件被JVM裝載到內(nèi)
5、存中,JVM會(huì)創(chuàng)建一塊String Pool(String緩沖池)。當(dāng)執(zhí)行String s = “abc”;時(shí),JVM首先在String Pool中查看是否存在字符串對象“abc”(如何查看呢用equals()方法判斷),如果已存在該對象,則不用創(chuàng)建新的字符串對象“abc”,而直接使用String Pool中已存在的對象“abc”,然后將引用s指向該對象;如果不存在該對象,則先在String Pool中創(chuàng)建一個(gè)新的字符串對象“abc”,然后將引用s指向String Pool中創(chuàng)建的新對象。 注意:使用“字符串常量”引號創(chuàng)建的字符串對象時(shí),在編譯期就已經(jīng)確定將該對象存儲(chǔ)到String Pool中
6、了。因此,String s = “abc”只會(huì)在編譯期,在String Pool中創(chuàng)建一個(gè)對象。 例如: Java代碼 1. String s1 = "abc" 2. String s2 = "abc" = s2);返回了一個(gè)String對象,也就是說在堆中創(chuàng)建了對象。這時(shí)候會(huì)不會(huì)在池中出現(xiàn)"abc"這個(gè)對象呢(question還沒解決) 生成String s的過程中,編譯器使用sb執(zhí)行的過程:
7、創(chuàng)建一個(gè)StringBuffer對象,使用append()向此StringBuffer對象直接添加新的字符串(而不是每次制作一個(gè)新的副本)。 對于String c = "c"String s = "a" + "b" + c;,編譯器將會(huì)先將"a" + "b"作為編譯時(shí)常量,優(yōu)化生成成字面常量"ab" ,然后生成一個(gè)StringBuilder對象,接著調(diào)用兩次 append()方法,即: String s = new Builder().append("ab"
8、;).append(c) .toString(); 對于String a = "a"String s = a + "b" + "c",編譯器分析a為引用變量,后面的"b" + "c"就不會(huì)作為編譯時(shí)常量來運(yùn)算了。相當(dāng)于執(zhí)行: String s = new Builder().append(a).append("b") .append("c") .toString(); 對于String b = "b"String s = "a
9、" + b + "c",這種形式的就沒辦法優(yōu)化了,直接生成StringBuilder對象,然后調(diào)用三次 append()方法,即: String s = new Builder().append("a").append(b) .append("c") .toString(); 接著,我們再看以下代碼: Java代碼 String str1 = "abc".,只要在java里面有關(guān)鍵字new存在,不管內(nèi)容是否相同,都表示它將生成一個(gè)新的對象,new多少次,就生成多少
10、個(gè)對象,而且新生成的對象都是在Heap里面,所以它會(huì)在Heap里面生成一個(gè)內(nèi)容為abc的對象,并且將它的地址賦給了引用s3,s3就指向剛在Heap里面生成的內(nèi)容為abc的對象。所以,當(dāng)執(zhí)行完語句(3)時(shí),內(nèi)存里面一共有3個(gè)對象,其中包含了在String Pool里面一個(gè)內(nèi)容為abc的字符串對象和在Heap里面包含了兩個(gè)內(nèi)容為abc的字符串對象。 問題4:當(dāng)執(zhí)行完語句(4)(5)(6)后,它們的結(jié)果分別是什么 在java里面,對象用"="永遠(yuǎn)比較的是兩個(gè)對象的內(nèi)存地址,換句話說,是比較"="左右兩邊的兩個(gè)引用是否指向同一個(gè)對象。對于java里面的8種原生數(shù)
11、據(jù)類型來說,"="比較的是它們的字面值是不是一樣的;對應(yīng)用類型來說,比較的是它們的內(nèi)存地址是不是一樣的。在語句(1)(2)(3)中,由于s1、s2、s3指向不同的對象,它們的內(nèi)存地址就不一樣,因此可以說當(dāng)執(zhí)行完語句(4)(5)(6),它們返回的結(jié)果都是false。 問題5:當(dāng)執(zhí)行完語句(7)(8)(9)后,它們的結(jié)果分別是什么 首先,s1這個(gè)對象指向的是堆中第一次new.生成的對象,當(dāng)調(diào)用 intern 方法時(shí),如果String Pool已經(jīng)包含一個(gè)等于此 String 對象的字符串(該對象由equals(Object)方法確定),則返回指向String Pool中的字符串
12、對象的引用。因?yàn)镾tring Pool中有內(nèi)容為abc的對象,所以()返回的是String Pool中的內(nèi)容為abc的字符串對象的內(nèi)存地址,而s1卻是指向Heap上內(nèi)容為abc的字符串對象的引用。因而,兩個(gè)引用指向的對象不同,所以,s1 = () 為false,即語句(7)結(jié)果為false。 對于(),它還是會(huì)首先檢查String Pool中是否有內(nèi)容為abc的對象,發(fā)現(xiàn)有,則將String Pool中內(nèi)容為abc的對象的地址賦給()方法的返回值。因?yàn)閟2和()方法的返回值指向的是同一個(gè)對象,所以,s2 = ()的結(jié)果為true,,即語句(8)結(jié)果為true。 對于(),它首先檢查String
13、 Pool中是否有內(nèi)容為abc的對象,發(fā)現(xiàn)有,則將String Pool中內(nèi)容為abc的對象的賦給()方法的返回值。對于(),首先檢查String Pool中是否有內(nèi)容為abc的對象,發(fā)現(xiàn)有,則將String Pool中內(nèi)容為abc的對象的地址賦給()方法的返回值。因?yàn)閮烧叻祷氐牡刂范贾赶蛲粋€(gè)對象,所以,() = ()的結(jié)果為true,,即是語句(9)結(jié)果為true。 因此,當(dāng)執(zhí)行完語句(7)(8)(9)后,它們的結(jié)果分別是false、true、true。 問題6:當(dāng)執(zhí)行完語句(13)(14) (15)(16)后,它們的結(jié)果分別是什么 hello = "hello"引用h
14、ello指向的對象就是String Pool中的“hello”,即語句(13)的結(jié)果為true。 hello = "hel" + "lo"當(dāng)加號兩邊都是常量值時(shí),就會(huì)組成一個(gè)新的常量值"hello"在String Pool里面,如果String Pool已經(jīng)有相同內(nèi)容的就不會(huì)再創(chuàng)建,則直接返回String Pool里面的內(nèi)容為"hello"的字符串對象的內(nèi)存地址,所以,hello = "hel" + "lo"結(jié)果為true。 hello ="hel" +
15、lo 當(dāng)加號兩邊有一個(gè)不是常量值,會(huì)在堆里面創(chuàng)建一個(gè)新的"hello"對象,一個(gè)在String Pool中,一個(gè)在Heap中,故輸出false 。 hel + lo 同上,輸出false。 因此,當(dāng)執(zhí)行完語句(7)(8)(9)后,它們的結(jié)果分別是true、true、false、false。 例程7: Java代碼 1. String s1 = "abc" 2. String s2 = new String("abc");
16、0; 3. String s3 = new String("abc"); ();ppend("a").append(new String("bc").toString(); 思考:String s = "a" + new String("b") + "c"產(chǎn)生了那幾個(gè)對象 解:等價(jià)于String s = new StringBuilder().append("a").append(n
17、ew String("b").append("c").toString(),會(huì)在String Pool中產(chǎn)生"a"、"b"、"c"三個(gè)對象,在Heap中產(chǎn)生"b"、"abc"兩個(gè)個(gè)對象。一共5個(gè)字符串對象。 例程9: Java代碼 1. String s1 = "Hello" 2. s1 = "Java" 3
18、. String s2 = "Hello" 4. String s3 = new String("Hello"); 5. = s2); 6. = s3); String s2 = "Hello"String s3 = new String("Hello"); = s2); = s3);運(yùn)行結(jié)果如下: false
19、 false 分析這段程序的執(zhí)行過程: 首先在加載Java程序時(shí),JVM會(huì)創(chuàng)建一片的內(nèi)存空間(String Pool)專門存入string對象。 String s1 = "Hello",現(xiàn)在棧中創(chuàng)建一個(gè)字符串引用s1,然后JVM會(huì)在String Pool中查找是否存在"Hello",如果存在,則直接使用它,將其地址賦給s1,如果不存在(這時(shí)String Pool中顯然不存在"Hello"),則在String Pool中創(chuàng)建"Hello",并將其地址賦給s1。 s1 = "Java",JVM會(huì)在S
20、tring Pool中查找是否存在"Java",如果存在,則直接使用它,將其地址賦給s1,如果不存在(這時(shí)String Pool中顯然不存在"Java"),則在String Pool中創(chuàng)建"Java",并將其地址賦給s1。而原來的字符串對象"Hello"仍然在String Pool中,沒有消失,因?yàn)镾tring對象的值是不能被修改的。這里只是改變了引用的值即引用指向的對象的地址,而沒有改變它所引用的對象。 String s2 = "Hello",JVM會(huì)在String Pool里查看有沒有字符串
21、"Hello",若有,則返回它的地址給s2,否則,創(chuàng)建新的String對象"Hello", 放到String Pool里。這里由于"Hello"對象已經(jīng)創(chuàng)建,并存在于String Pool中,因而不需要重新創(chuàng)建String對象"Hello"。此時(shí)s1指向String Pool中的"Java",s2指向String Pool中的"Hello",故s1 = s2的值為false。 String s3=String("Hello"),JVM會(huì)在String Po
22、ol里查看有沒有字符串"Hello",若有,直接執(zhí)行new操作,若沒有,則先要在String Pool中創(chuàng)建"Hello",然后執(zhí)行new操作,由于遇到了new,還會(huì)在Heap上(不是String Pool里)創(chuàng)建string對象"Hello",并將Heap上的"Hello"對象的地址賦給引用s3。所以s2 = s3將返回false,因?yàn)閟2和s3不是引用同一個(gè)對象。 以上小結(jié)如理解有誤,希望各位高手指教! 寫代碼驗(yàn)證靜態(tài)代碼塊被自動(dòng)執(zhí)行,就算產(chǎn)生了類的多個(gè)實(shí)例對象,但其中的靜態(tài)代碼塊只被執(zhí)行了一次。class P
23、arent static String name = "hello""parent block");static "parent static block");public Parent() "parent constructor");class Child extends Parent static String childName = "hello""child block");static "child static block");public Child() "child constructor");public class TextStatic public static void main(String args) / TODO Auto-generated method stubnew Child();/ 語句(*)new Ch
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2020-2025年中國棉紡織設(shè)備行業(yè)競爭格局分析及投資規(guī)劃研究報(bào)告
- 2024-2030年中國涼涼膠隔熱防腐漆行業(yè)發(fā)展運(yùn)行現(xiàn)狀及投資戰(zhàn)略規(guī)劃報(bào)告
- 2025年圓柱項(xiàng)目可行性研究報(bào)告
- 2019-2025年中國速溶茶市場前景預(yù)測及投資規(guī)劃研究報(bào)告
- 2024-2025年中國公募證券投資基金市場供需格局及未來發(fā)展趨勢報(bào)告
- 重力式混凝土墻課程設(shè)計(jì)
- 2025年中國周邊旅游行業(yè)發(fā)展運(yùn)行現(xiàn)狀及投資潛力預(yù)測報(bào)告
- 2023-2029年中國餐館酒樓行業(yè)市場調(diào)查研究及發(fā)展戰(zhàn)略規(guī)劃報(bào)告
- 2024山東玻璃、陶瓷和搪瓷制品生產(chǎn)專用設(shè)備制造市場前景及投資研究報(bào)告
- 2025年強(qiáng)力腦心康膠囊項(xiàng)目可行性研究報(bào)告
- 離職分析報(bào)告
- 春節(jié)家庭用電安全提示
- 醫(yī)療糾紛預(yù)防和處理?xiàng)l例通用課件
- 廚邦醬油推廣方案
- 乳腺癌診療指南(2024年版)
- 高三數(shù)學(xué)寒假作業(yè)1
- 保險(xiǎn)產(chǎn)品創(chuàng)新與市場定位培訓(xùn)課件
- (完整文本版)體檢報(bào)告單模版
- 1例左舌鱗癌手術(shù)患者的圍手術(shù)期護(hù)理體會(huì)
- (完整)100道兩位數(shù)加減兩位數(shù)口算題(難)
- 鋼結(jié)構(gòu)牛腿計(jì)算
評論
0/150
提交評論