第10次 對象拷貝、常用標準類_第1頁
第10次 對象拷貝、常用標準類_第2頁
第10次 對象拷貝、常用標準類_第3頁
第10次 對象拷貝、常用標準類_第4頁
第10次 對象拷貝、常用標準類_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

TelBook(通訊錄)類publicclassTelBook{//電話通訊錄類privateStringname;

//姓名privateStringtel;

//電話號碼TelBook(Stringn,Stringt){

name=newString(n);tel=t;}

voidsetVar(Stringn,Stringt){name=newString(n);tel=newString(t);}StringgetName(){returnname;}StringgetTel(){returntel;}

}1Test類publicclassTest{//測試類

publicstaticvoidmain(String[]args){

TelBookt=newTelBook("王軍",);System.out.println(“name:”++”\t”+"tel:"+t.tel);}}是否正確?修改后運行結果是233.5靜態(tài)成員3.5.1類變量的定義及初始化在類中定義成員變量時,如果在訪問屬性修飾符之后,加上static修飾符,它們就屬于靜態(tài)成員。例如:publicstaticintstaticMember;與非靜態(tài)成員變量的區(qū)別:靜態(tài)成員變量只在加載類時內(nèi)存中只創(chuàng)建一個副本,不管未來創(chuàng)建多少個這個類的對象,都將共享這一個副本。EmployeepublicclassEmployee{//工人類 Stringname;//姓名

doublesalary;//工資intid;//編號staticintnextId=1;//類成員變量

publicEmployee(Stringn,doubles){//含有兩個參數(shù)的構造方法name=n;salary=s;id=nextId++;}publicStringgetName(){returnname;}//返回姓名

publicdoublegetSalary(){returnsalary;}//返回工資

publicintgetId(){returnid;}//返回編號

publicstaticintgetNextId(){//靜態(tài)成員方法,返回下一個新的編號returnnextId;}}4StaticTestclassStaticTest{//測試類publicstaticvoidmain(String[]args){Employeestaff[]=newEmployee[3];//創(chuàng)建長3名為staff的Employee數(shù)組

staff[0]=newEmployee(“Zhanglin”,4000.0);//創(chuàng)建第1個對象staff[1]=newEmployee("Wangliang",6000.0);staff[2]=newEmployee("Lili",5000.0);for(inti=0;i<staff.length;i++){ System.out.println(staff[i].getId()+“\t”+staff[i].getName()+“\t”+staff[i].getSalary());}//輸出各工人的Id、姓名和工資;}}5靜態(tài)變量與非靜態(tài)變量的區(qū)別操作:某個對象只能獲取或修改自己存儲空間中的那個非靜態(tài)變量的值,而不能操作其他對象的。而對于靜態(tài)變量,如果有一個對象修改了它的值,那么其他對象獲取的靜態(tài)變量值也會發(fā)生變化,即:非靜態(tài)變量是所有對象共享的。67在該類沒有創(chuàng)建對象的時候,類變量也已經(jīng)存在。所以如果該類沒有創(chuàng)建對象時引用類變量,就只能用類名作為前綴。如果創(chuàng)建了該類的對象,則既可以通過類名引用類變量,也可以通過對象名引用類變量。靜態(tài)變量的引用練習:靜態(tài)變量的使用。classStaticDemo{

staticintx;inty;staticpublicintgetX(){returnx;}staticpublicvoidsetX(intnewX){x=newX;}publicintgetY(){returny;}publicvoidsetY(intnewY){y=newY;}}publicclassShowDemo{publicstaticvoidmain(String[]args){System.out.println("靜態(tài)變量x="+StaticDemo.getX());System.out.println("實例變量y="+StaticDemo.getY());

StaticDemoa=newStaticDemo();StaticDemob=newStaticDemo();a.setX(1);a.setY(2);b.setX(3);b.setY(4);

System.out.println(“靜態(tài)變量a.x="+a.getX());

System.out.println(“實例變量a.y="+a.getY());

System.out.println("靜態(tài)變量b.x="+b.getX());

System.out.println("實例變量b.y="+b.getY());}}練習:靜態(tài)變量的使用。10類方法也稱為靜態(tài)成員方法。特征是:在訪問屬性修飾符之后,加上static修飾符即可。在類方法中,只能對該方法中的局部變量或靜態(tài)變量進行操作,而不能引用實例變量或調(diào)用實例方法。publicstaticintgetMember(){returnstaticMember;}3.5.2類方法課堂練習1、請看下面的程序段classTest{privateintm;publicstaticvoidfun(){//somecode}}方法fun()如何來訪問變量m()A.將privateintm改成protectedintmB.將privateintm改成publicintmC.將privateintm改成staticintm D.將privateintm改成intm課堂練習2.下面程序運行后的輸出結果為()classA{staticinty=3;

voidshowy(){System.out.println("y="+y);}}classtestA{publicstaticvoidmain(Stringaaa[]){Aa1=newA();

A.y+=1;a1.y++;

a1.showy();}}133.6對象拷貝對于基本數(shù)據(jù)類型的變量,賦值操作的含義是將賦值號右側表達式的計算結果賦給賦值號左側的變量。例如:inta=1;intb=a;對于引用型變量,賦值操作實際上是引用的相互賦值。14Employeee1,e2;e1=newEmployee(“Zhang”,3000);e2=e1;

引用變量的賦值對象本身內(nèi)容的淺拷貝Pointp1=newPoint(5,10);Pointp2=newPoint(10,5)Rectr1=newRect(p1,p2);Rectr2=r1.clone();//淺拷貝,直接調(diào)用Object類中的clone方法15x=5;y=10;p1x=10;y=5;p2leftToprightBottomr1leftToprightBottomr2對象本身內(nèi)容的深拷貝Pointp1=newPoint(5,10);Pointp2=newPoint(10,5)Rectr1=newRect(p1,p2);Rectr2=r1.clone();//深拷貝,覆蓋Object類中的clone方法,再調(diào)用;P11116x=5;y=10;p1x=10;y=5;p2leftToprightBottomr1leftToprightBottomr2x=5;y=10;p1x=10;y=5;p217Cloneable接口用來支持淺拷貝和深拷貝方式的對象克隆。如果希望某個類對象具有克隆功能,就應該讓這個類實現(xiàn)Cloneable接口,并對標準Object類的clone方法進行重載。隨后就可以利用類似于下面的賦值語句進行對象克隆。e2=(Employee)e1.clone();Cloneable接口183.7幾個JavaAPI中的標準類包描述java.awt包含了所有與圖形用戶界面及事件處理有關的類javax.swing包含了所有與圖形用戶界面及事件處理有關的類java.beans包含了所有與JavaBeans組件模型有關的類java.io包含了與輸入輸出有關的類和接口java.lang包含了許多Java語言的核心類java.math包含了支持高精度的整數(shù)和浮點數(shù)運算的類包含了支持與其他系統(tǒng)進行網(wǎng)絡連接的類和接口java.util包含了大量實用工具類和接口19隨機數(shù)類Random在Random類中有一個private的long類型的成員變量seed,它記錄了每個對象對應的隨機數(shù)發(fā)生器的“種子”,“種子”決定了隨機數(shù)發(fā)生器產(chǎn)生隨機數(shù)時所采用的算法。不同的“種子”值將產(chǎn)生不同的隨機數(shù)序列。20構造方法不帶參數(shù)的默認型構造方法,它將以計算機時鐘的當前時間作為“種子”值創(chuàng)建隨機數(shù)發(fā)生器對象。帶有一個long類型的參數(shù)作為“種子”值,使用這個構造方法可以顯式地為隨機數(shù)發(fā)生器指定“種子”值。21成員方法描述nextInt()返回一個int類型的隨機數(shù),每次調(diào)用這個方法返回的數(shù)值將均勻地分布在int類型的取值范圍內(nèi)nextInt(intlimit)返回一個大于或等于0且小于limit的int類型的隨機數(shù)。這個方法常用于產(chǎn)生隨機的數(shù)組下標,limit為數(shù)組的上界nextLong()返回一個long類型的隨機數(shù)。每次調(diào)用這個方法返回的數(shù)值將均勻地分布在long類型的取值范圍內(nèi)nextFloat()返回一個float類型的隨機數(shù)。每次調(diào)用這個方法返回的數(shù)值將均勻地分布在大于或等于0.0f,小于1.0f的取值范圍內(nèi)nextDouble()返回一個double類型的隨機數(shù)。每次調(diào)用這個方法返回的數(shù)值將均勻地分布在大于或等于0.0,小于1.0的取值范圍內(nèi)nextBoolean()返回true或false作為隨機數(shù)值nextByte(byte[]bytes)用產(chǎn)生的隨機數(shù)為數(shù)組bytes中的每個元素賦值setSeed(longseed)將“種子”設置為seed22例3-9擲骰子游戲。這個游戲的玩法是:擲兩個骰子,如果投擲的結果都為6,則輸出“Youwin!!”,并結束應用程序的執(zhí)行;如果投擲6次還沒有取得上述結果,就輸出“Sorry,youlost..”。23importjava.util.Random;publicclassSimulator{publicstaticvoidmain(String[]args){

RandomdiceValues=newRandom();//創(chuàng)建隨機數(shù)發(fā)生器

intdie1=0;intdie2=0;System.out.println("Youhavesixthrowsofapairofdice.\n"+"Theobjectiveistogetadoublesix.Heregoes...\n");for(inti=0;i<6;i++){//最多擲6次

die1=1+diceValues.nextInt(6);//擲第一個骰子

die2=1+diceValues.nextInt(6);//擲第二個骰子

System.out.println(i+"throw:"+die1+","+die2);

if(die1+die2==12){//兩個骰子均為6

System.out.println("Youwin!!");return; }}System.out.println("Sorry,youlost...");return;}}能否改為:die1=diceValues.nextInt(7)die2=diceValues.nextInt(7)注意:原程序改為:for(inti=0;i<6;i++){

RandomdiceValues=newRandom(1);

die1=1+diceValues.nextInt(6);die2=1+diceValues.nextInt(6);}結果會怎樣?2425字符串類StringBuffer與String類的區(qū)別:可以對StringBuffer類表示的字符串進行編輯,由此被稱為可編輯字符串。在程序中,當需要對字符串進行編輯時必須選用StringBuffer類。26構造方法publicStringBuffer()無參的構造方法。默認緩沖區(qū)的大小為16個字符。publicStringBuffer(intlength)緩沖區(qū)的大小為length個字符。publicStringBuffer(Stringstr)緩沖區(qū)的大小為字符串str的長度加上16,并將str存入緩沖區(qū)中。27publicclassTryStringBuffer{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);for(;;){System.out.print("\n>");Stringline=in.nextLine();//從鍵盤輸入一行文本

if(line.equals("quit")){break;}StringBufferbuf=newStringBuffer(line);

for(inti=0;i<buf.length();i++){buf.setCharAt(i,code(buf.charAt(i)));//加密

}System.out.println(buf);//輸出加密后的結果

}}publicstaticcharcode(charc){//加密算法if((c>='A')&&(c<='Z')||(c>='a')&&(c<='z')){c+=13;}returnc;}}能否省略static?28高精度數(shù)值類BigInteger/BigDecimal當Java中的基本數(shù)據(jù)類型不能滿足精度需求時,可以使用Java提供的兩種高精度數(shù)值類。BigInteger類實現(xiàn)了任意精度的整數(shù)運算,BigDecimal類實現(xiàn)了任意精度的浮點數(shù)運算。29需要注意①這兩個類的對象所包含的值不允許改變,通常會將兩個值的運算結果用一個新對象表示。②對這兩個類對象表示的數(shù)值進行運算不會產(chǎn)生溢出。③由于用這兩個類表示的數(shù)值被封裝在對象中,所以不能直接使用人們熟悉的運算符號+、-、*、/等書寫運算過程,必須使用相應的成員方法。例3-11importjava.math.*;publicclassTryBigInteger{publicstaticvoidmain(String[]args){BigIntegervalue,result;result=BigInteger.valueOf(1);for(longi=2;i<50;i++){value=BigInteger.valueOf(i);result=result.multiply(value);}System.out.println("50!="+result);}}30補充:其他常用類Calendar類該類是對時間操作的主要類。要得到其對象引用,不能使用new,而要調(diào)用其靜態(tài)方法getInstance,之后再利用相應的對象方法。importjava.util.*;publicclassGetCurrentTime{

publicstaticvoidmain(Stringagrs[]){

Calendarcd=Calendar.getInstance();

Dated=cd.getTime();

System.out.println(d.toString());

}}31補充:其他常用類基本數(shù)據(jù)類型類數(shù)據(jù)類型類基本數(shù)據(jù)類型BooleanbooleanBytebyteCharactercharDoubledoubleFloatfloatIntegerintLonglongShortshort整數(shù)類IntegerInteger類提供的靜態(tài)常量:

staticintMAX_VALUE;

//返回Java能夠描述的最大整數(shù)231–1;

staticintMIN_VALUE;

//返回Java能夠描述的最小整數(shù)-231;整數(shù)類Integer構造方法:

Integer(intvalue);

//通過一個int的類型構造對象;

Integer(Strings);

//通過一個String的類型構造對象;例如:

Integeri1=newInteger(57); Integeri2=newInteger("1234");整數(shù)類Integer常用成員方法:publicbytebyteValue();

//取得用byte類型表示的整數(shù)publicdoubledoubleValue();

//取得該整數(shù)的雙精度表示publicintintValue();

//取得該整型數(shù)所表示的整數(shù)publiclonglongValue();

//取得該整型數(shù)所表示的長整數(shù)整數(shù)類Integer常用成員方法:publicStringtoString();

//將當前Integer對象的int量轉(zhuǎn)化成字符串publicstaticintparseInt(Strings); //將字符串轉(zhuǎn)換成整數(shù)publicstaticIntegervalueOf(Strings); //將字符串Integer類對象Integer類的使用classtest{

publicstaticvoidmain(String[]args){

Integeri1=newInteger(57);

Integeri2=newInteger("1234");

System.out.println("Java能夠描述的最大整數(shù)是:"+Integer.MAX_VALUE);doubled=i1.doubleValue();

System.out.println("i1轉(zhuǎn)換為double類型數(shù)值為"+d);

inti=Value();

System.out.println("i1轉(zhuǎn)換為int類型數(shù)值為"+i);

Strings1=i1.toString();

System.out.println("i1轉(zhuǎn)換為字符串"+s1);

inta=Integer.parseInt("-325");

System.out.println("字符串轉(zhuǎn)換為整數(shù)"+a);i1=Integer.valueOf("-325");

System.out.println("字符串轉(zhuǎn)換為Integer類對象,值為"+Value());

}}其他基本數(shù)據(jù)類型類其他基本數(shù)據(jù)類型類(Double、Float、Byte、Short、Long等)也具備的方法:

publicbytebyteValue(); publicdoubledoubleValue(); publicintintValue(); publiclonglongValue(); publicStringtoStri

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論