版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java語(yǔ)言程序設(shè)計(jì)第8章Java核心類庫(kù)
1java.lang.Object類23主要內(nèi)容Java語(yǔ)言程序設(shè)計(jì)(第4版)清華大學(xué)出版社2022java.lang.Math類java.lang.System類45基本類型包裝類案例:一個(gè)整數(shù)棧的實(shí)現(xiàn)6BigInteger和BigDecimal類7日期-時(shí)間API8案例:打印輸出年歷Java語(yǔ)言程序設(shè)計(jì)java.lang.Object類在編寫Java程序時(shí),除了使用自己定義的類,還要大量使用Java標(biāo)準(zhǔn)類庫(kù)的類和第三方定義的類。本章重點(diǎn)介紹一些最常用的Java核心類庫(kù)的類,其中包括Object類,它是Java所有類的根類,Math類、System類以及基本類型包裝類和新的日期/時(shí)間API的有關(guān)類。概述Object類是Java語(yǔ)言中所有類的根類,它定義在java.lang包中。定義類時(shí)若沒有用extends指明繼承哪個(gè)類,編譯器自動(dòng)加上extendsObject,也就是自動(dòng)繼承Object類。因此,Java中所有的類都是Object類的直接或間接子類。Object類中共定義了9個(gè)方法,所有的類(包括數(shù)組)都繼承該類中的方法,這些方法如表8-1所示。方
法
說(shuō)
明publicbooleanequals(Objectobj)比較調(diào)用對(duì)象是否與參數(shù)對(duì)象obj相等publicStringtoString()返回對(duì)象的字符串表示publicinthashCode()返回對(duì)象的哈希碼值protectedObjectclone()創(chuàng)建并返回對(duì)象的一個(gè)副本publicClass<?>getClass()返回對(duì)象所屬的完整類名protectedvoidfinalize()當(dāng)對(duì)象沒有引用時(shí)由垃圾回收器調(diào)用。該方法已廢棄publicvoidwait()publicvoidwait(longtimeout)publicvoidwait(longtimeout,intnanos)使當(dāng)前線程進(jìn)入等待狀態(tài),直到另一個(gè)線程調(diào)用notify()或notifyAll()方法publicvoidnotify()publicvoidnotifyAll()通知等待該對(duì)象鎖的單個(gè)線程或所有線程繼續(xù)執(zhí)行toString()方法是Object類的一個(gè)重要方法,調(diào)用對(duì)象的toString()方法可以返回對(duì)象的字符串表示。該方法在Object類中的定義是返回類名加一個(gè)@符號(hào),再加一個(gè)十六進(jìn)制整數(shù)。如果在Employee類中沒有覆蓋toString()方法,執(zhí)行下面的代碼:8.1.1toString()方法varemp=newEmployee("劉明",30,5000);System.out.println(emp.toString());可能產(chǎn)生類似下面的輸出:com.boda.xy.Employee@1db9742通常在類中覆蓋toString()方法,使它返回一個(gè)有意義的字符串。例如,在Employee類中按如下覆蓋toString()方法:@OverridepublicStringtoString(){return"員工信息:"+name+""+age+""+salary;}8.1.1toString()方法這時(shí),執(zhí)行語(yǔ)句:System.out.println(emp.toString());輸出結(jié)果為:
員工信息:劉明305000.0實(shí)際上,還可以僅使用對(duì)象名輸出對(duì)象的字符串表示形式,而不用調(diào)用toString()方法,這時(shí)Java編譯器將自動(dòng)調(diào)用toString()方法,例如,下面兩行等價(jià)。System.out.println(emp);System.out.println(emp.toString());在Java類庫(kù)中有許多類覆蓋了toString()方法,輸出時(shí)能夠得到可理解的結(jié)果,LocalDate類就是其一。8.1.1toString()方法equals()方法主要用來(lái)比較兩個(gè)對(duì)象是否相等,使用格式為:obj1.equals(obj2)上述表達(dá)式用來(lái)比較兩個(gè)對(duì)象obj1和obj2是否相等,若相等則返回true,否則返回false。但兩個(gè)對(duì)象比較的是什么呢?8.1.2equals()方法首先來(lái)看一下equals()方法在Object類中的定義:publicbooleanequals(Objectobj){return(this==obj);}由此可以看到,該方法比較的是兩個(gè)對(duì)象的引用,即相當(dāng)于兩個(gè)對(duì)象使用“==”號(hào)進(jìn)行比較。假設(shè)Employee類定義了id、name和salary成員變量,又假設(shè)我們要比較兩個(gè)Employee對(duì)象是否相等,如果使用下面代碼,將輸出false。varemployee1=newEmployee(101,"劉明",5000);varemployee2=newEmployee(101,"劉明",5000);System.out.println(employee1.equals(employee2));//輸出:false8.1.2equals()方法經(jīng)常需要比較兩個(gè)對(duì)象的內(nèi)容是否相等,比如對(duì)于員工的來(lái)說(shuō),如果兩個(gè)員工的id、name和salary都相等,就認(rèn)為它們相等。要達(dá)到這個(gè)目的就需要在Employee類中覆蓋equals()方法。在Employee類中可以這樣覆蓋equals()方法:@Overridepublicbooleanequals(Objectobj){if(this==obj)returntrue;if(obj==null)returnfalse;if(!(objinstanceofEmployee))returnfalse;
Employeeemployee=(Employee)obj;returngetId()==employee.getId()&&
Objects.equals(getName(),employee.getName())&&getSalary()==employee.getSalary();}如果在Employee類中按上面方式覆蓋了equals()方法,再使用該方法比較兩個(gè)Employee對(duì)象就是比較它們的id、name和salary是否都相等。這里,在比較兩個(gè)字符串是否相等,使用了java.util.Objects類的equals()靜態(tài)方法,使用該方法比較兩個(gè)字符串的好處是它可以處理null值,而不拋出NullPointerException異常。8.1.2equals()方法在Java類庫(kù)中的許多類也覆蓋了equals()方法,例如String類,因此對(duì)String對(duì)象使用equals()方法的比較是字符串的內(nèi)容是否相等?!咀⒁狻?/p>
在類的子類中,使用簽名equals(ClassNameobj)覆蓋equals()方法是一個(gè)常見的錯(cuò)誤,應(yīng)該使用equals(Objectobj)覆蓋equals()方法。hashCode()方法返回一個(gè)對(duì)象的散列碼(hashcode)值,它是一個(gè)整數(shù),主要用來(lái)比較對(duì)象的大小。在Object類中hashCode()方法的實(shí)現(xiàn)是返回對(duì)象在計(jì)算機(jī)內(nèi)部存儲(chǔ)的十進(jìn)制內(nèi)存地址。例如代碼:8.1.3hashCode()方法varemployee=newEmployee(101,"劉明",5000);System.out.println(employee.hashCode());可能的輸出結(jié)果:31168322如果為一個(gè)類覆蓋了equals()方法,則也需要覆蓋hashCode()方法,以兼容equals()方法。在覆蓋Object類的hashCode()時(shí),可以直接聯(lián)合類的每個(gè)實(shí)例變量的散列碼。例如,下面是Employee類的hashCode()方法:8.1.3hashCode()方法@OverridepublicinthashCode(){returnObjects.hash(id,name,salary);}java.util.Objects類的hash()方法的參數(shù)是可變參數(shù),該方法計(jì)算每個(gè)參數(shù)的哈希碼,并將它們組合起來(lái)。這個(gè)方法是空指針安全的。如果類包含數(shù)組類型的實(shí)例變量,比較它們的散列碼時(shí),首先使用靜態(tài)方法Arrays.hashCode()計(jì)算數(shù)組的每個(gè)元素散列碼組成的散列碼,然后將結(jié)果傳給Objects的hash()方法。下面代碼演示了自定義的equals()和hashCode()方法的效果:8.1.3hashCode()方法varemployee1=newEmployee(101,"劉明",5000);varemployee2=employee1;varemployee3=newEmployee(101,"劉明",5000);System.out.println(employee1.equals(employee2));//輸出:trueSystem.out.println(employee1.equals(employee3));//輸出:trueSystem.out.println(employee1.hashCode());//輸出:1106640718System.out.println(employee2.hashCode());//輸出:1106640718System.out.println(employee3.hashCode());//輸出:1106640718使用Object類的clone()方法可以克隆一個(gè)對(duì)象,即創(chuàng)建對(duì)象的一個(gè)副本。要使類的對(duì)象能夠克隆,類必須實(shí)現(xiàn)Cloneable接口。8.1.14clone()方法【注意】
使用Object類的clone()方法克隆對(duì)象只是做了淺拷貝。它簡(jiǎn)單地從原對(duì)象中拷貝所有實(shí)例變量到目標(biāo)對(duì)象中。如果實(shí)例變量是基本類型或不變對(duì)象(如String),將沒有問題。否則,原對(duì)象和克隆對(duì)象將共享可變的狀態(tài)。publicclassMonkeyimplementsCloneable{privateStringname;//名字privateintage;//年齡publicMonkey(Stringname,intage){=name;this.age=age;}publicStringgetName(){ returnname;}publicintgetAge(){ returnage;}程序8.1Monkey.javapublicbooleanequals(Objectobj){
if(this==obj)returntrue;if(obj==null)returnfalse;if(!(objinstanceofMonkey))returnfalse;Monkeymon=(Monkey)obj;returngetAge()==mon.getAge()&&
Objects.equals(getName(),mon.getName());}publicStringtoString(){return"猴子:name="+name+"age="+age;}publicstaticvoidmain(String[]args)throwsCloneNotSupportedException{Monkeymon=newMonkey("金絲猴",2);Monkeymon2=(Monkey)mon.clone();System.out.println(mon==mon2);System.out.println(mon.equals(mon2));System.out.println(mon.getClass().getName());System.out.println(mon.hashCode());System.out.println(mon);}Java語(yǔ)言程序設(shè)計(jì)8.2java.lang.Math類Math類中定義了一些方法完成基本算術(shù)運(yùn)算,如指數(shù)函數(shù)、對(duì)數(shù)函數(shù)、平方根函數(shù)以及三角函數(shù)等。Math類是final類,因此不能被繼承。它的構(gòu)造方法是的,因此不能實(shí)例化。private8.2java.lang.Math類Math類中定義的兩個(gè)常量PI和E以及所有的方法都static的,因此僅能通過(guò)類名訪問。Math類的常用方法如表8-2所示。方
法
說(shuō)
明staticdoublesin(doublex)staticdoublecos(doublex)staticdoubletan(doublex)返回角度x的正弦、余弦和正切的值,其中x的單位為弧度staticdoubleasin(doublex)staticdoubleacos(doublex)返回角度x的反正弦、反余弦的值,其中x的單位為弧度staticdoubleabs(doublex)返回x的絕對(duì)值,該方法另有3個(gè)重載的版本staticdoubleexp(doublex)staticdoublelog(doublex)staticdoublesqrt(doublex)staticdoublepow(doublex,doubley)返回e的x次方的值返回以e為底的自然對(duì)數(shù)的值返回x的平方根返回x的y次方的值staticdoublemax(doublex,doubley)staticdoublemin(doublex,doubley)返回x、y的最大值和最小值,另有參數(shù)為float、long和int的重載版本staticdoublerandom()返回0.0到1.0之間的隨機(jī)數(shù)(包含0.0但不包含1.0)staticdoubleceil(doublex)staticdoublefloor(doublex)返回大于或等于x的最小整數(shù)返回小于或等于x的最大整數(shù)staticdoublerint(doublex)返回與x最接近的整數(shù),如果x到兩個(gè)整數(shù)的距離相等,返回其中的偶數(shù)staticintround(floatx)返回(int)Math.floor(x+0.5)staticlonground(doublex)返回(long)Math.floor(x+0.5)staticdoubletoDegrees(doubleangrad)將弧度轉(zhuǎn)換為角度staticdoubletoRadians(doubleangrad)將角度轉(zhuǎn)換為弧度importstaticjava.lang.Math.*;importstaticjava.lang.System.*;publicstaticvoidmain(String[]args){out.println("sqrt(2)="+sqrt(2)); out.println("pow(2,5)="+pow(2,5)); out.println("rint(2.5)="+rint(2.5)); out.println("rint(-3.5)="+rint(-3.5)); out.println("round(3.5)="+round(3.5));out.println("round(-3.5)="+round(-3.5));varpi=PI;pi=round(pi*10000)/10000.0;//四舍五入到小數(shù)點(diǎn)后4位out.println("PI="+pi);}程序8.2MathDemo.javaMath類中的random()方法用來(lái)生成大于等于0.0且小于1.0(0<=Math.random()<1.0)的double型隨機(jī)數(shù)。該方法十分有用,可以用它來(lái)生成任意范圍的隨機(jī)數(shù)。例如:(int)(Math.random()*10)//返回0到9之間的隨機(jī)整數(shù)50+(int)(Math.random()*51)//返回50到100之間的隨機(jī)整數(shù)java.lang.Math類一般地,a+(int)(Math.random()*(b+1))返回a到a+b之間的隨機(jī)數(shù),包括a+b。下面程序隨機(jī)生成100個(gè)大寫字母。由于大寫字母的ASCII碼值在65('A')到90('Z')之間,因此本題只需隨機(jī)產(chǎn)生100個(gè)65到90之間的整數(shù),然后把它們轉(zhuǎn)換成字符即可。publicstaticchargetLetter(){return(char)(65+Math.random()*(26));
}publicstaticvoidmain(String[]args){for(inti=1;i<=100;i++){System.out.print(getLetter()+"");if(i%20==0)//每輸出20個(gè)字母換行System.out.println();
}
}程序8.3RandomCharacter.javaJava語(yǔ)言程序設(shè)計(jì)8.3java.lang.System類System類是一個(gè)final類,它公開一些有用的static字段和static方法,可以幫助我們完成常見任務(wù)。System類的三個(gè)staticfinsl字段是out、in和err:8.3java.lang.System類out字段是一個(gè)PrintStream對(duì)象,表示標(biāo)準(zhǔn)輸出流,默認(rèn)情況下,它與運(yùn)行Java應(yīng)用程序的控制臺(tái)相同。err字段也是一個(gè)PrintStream對(duì)象,err的目的是顯示錯(cuò)誤消息。下面代碼使用err輸出信息:System.err.println("Youhavearuntimeerror.");in字段表示標(biāo)準(zhǔn)輸入流,使用它可以接受鍵盤輸入。System類定義了許多有用的方法,它們都是靜態(tài)的,下面列出一些較重要的。java.lang.System類publicstaticvoidarraycopy(Objectsource,intsourcePos,Objectdestination,intdestPos,intlength)publicstaticvoidexit(intstatus)publicstaticlongcurrentTimeMillis():該方法返回以毫秒為單位的計(jì)算機(jī)時(shí)間。這個(gè)值表示自UTC從1970年1月1日以來(lái)經(jīng)過(guò)的毫秒數(shù)。publicstaticlongnanoTime()當(dāng)Java程序運(yùn)行時(shí),JVM會(huì)提供可以被程序使用的屬性值。每個(gè)屬性都是Hashtable的一個(gè)實(shí)例,即一個(gè)“鍵/值”對(duì)。例如,屬性表示運(yùn)行JVM的操作系統(tǒng)的名稱,user.dir屬性表示JVM將調(diào)用應(yīng)用程序的目錄名。表8-3列出了常用的系統(tǒng)屬性。java.lang.System類屬
性
說(shuō)
明java.versionJava運(yùn)行時(shí)環(huán)境版本java.vendorJava運(yùn)行時(shí)環(huán)境供應(yīng)商java.homeJava安裝目錄java.vm.versionJava虛擬機(jī)實(shí)現(xiàn)版本java.vm.vendorJava虛擬機(jī)實(shí)現(xiàn)供應(yīng)商Java虛擬機(jī)實(shí)現(xiàn)名java.class.versionJava類格式版本號(hào)java.class.pathJava類路徑j(luò)ava.library.path加載庫(kù)時(shí)要搜索的路徑列表java.io.tmpdir默認(rèn)臨時(shí)文件路徑piler要使用的JIT編譯器的名稱操作系統(tǒng)名稱os.version操作系統(tǒng)版本file.separator文件分隔符(UNIX上的“/”)用戶的賬戶名稱user.home用戶的主目錄user.dir用戶當(dāng)前工作目錄處理屬性的常用方法如下。java.lang.System類publicstaticStringgetProperty(Stringkey)publicstaticStringgetProperty(Stringkey,Stringdefault)publicstaticjava.util.PropertiesgetProperties():publicstaticvoidsetProperty(Stringproperty,StringnewValue):更改當(dāng)前屬性的值或創(chuàng)建用戶定義的屬性。Java語(yǔ)言程序設(shè)計(jì)8.4基本類型包裝類Java提供8個(gè)基本數(shù)據(jù)類型包裝類(wrapperclass),通過(guò)這些類,可以將基本類型的數(shù)據(jù)包裝成對(duì)象。這些類通常稱為基本數(shù)據(jù)類型包裝類(wrapperclass),通過(guò)這些類,可以將基本類型的數(shù)據(jù)包裝成對(duì)象。概述基本數(shù)據(jù)類型對(duì)應(yīng)的包裝類
基本數(shù)據(jù)類型對(duì)應(yīng)的包裝類booleanBooleanintIntegercharCharacterlongLongbyteBytefloatFloatshortShortdoubleDoubleCharacter類對(duì)象封裝了單個(gè)字符??梢允褂肅haracter類的靜態(tài)工廠方法創(chuàng)建Character對(duì)象,其格式為:publicstaticCharactervalueOf(charc)【提示】
從Java9開始,不推薦使用包裝類的構(gòu)造方法創(chuàng)建對(duì)象,而推薦使用包裝類的靜態(tài)工廠方法valueOf()創(chuàng)建包裝類對(duì)象。8.4.1Character類下面代碼創(chuàng)建了幾個(gè)Character對(duì)象并演示了有關(guān)方法的使用。vara=Character.valueOf('A');varb=Character.valueOf('π’);charc='中';//c是char類型System.out.println(pareTo('D'));//輸出:-3System.out.println(Character.isJavaIdentifierStart(b));//輸出:trueSystem.out.println(Character.isDigit(c));//輸出:falseCharacter類的常用方法有:publiccharcharValue():返回Character對(duì)象所包含的char值。publicintcompareTo(CharacteranotherChar):比較兩個(gè)字符對(duì)象。publicstaticbooleanisDigit(charch):返回參數(shù)字符是否是數(shù)字。publicstaticbooleanisLetter(charch):返回參數(shù)字符是否是字母。publicstaticbooleanisLowerCase(charch):返回參數(shù)字符是否是小寫字母。publicstaticbooleanisUpperCase(charch):返回參數(shù)字符是否是大寫字母。publicstaticbooleanisWhiteSpace(charch):返回參數(shù)字符是否是空白字符。publicstaticchartoLowerCase(charch):將參數(shù)字符轉(zhuǎn)換為小寫字母返回。publicstaticchartoUpperCase(charch):將參數(shù)字符轉(zhuǎn)換為大寫字母返回。Boolean類的對(duì)象封裝了一個(gè)布爾值(true或false),可以使用boolean值或字符串創(chuàng)建Boolean實(shí)例:publicstaticBooleanvalueOf(booleanb):用一個(gè)boolean型值創(chuàng)建一個(gè)Boolean對(duì)象。publicstaticBooleanvalueOf(Strings):將參數(shù)s的值轉(zhuǎn)換為Boolean對(duì)象。如果字符串s不為null,且其值為“true”(不區(qū)分大小寫)就創(chuàng)建一個(gè)true值,否則創(chuàng)建一個(gè)false值。8.4.2Boolean類下面代碼定義了幾個(gè)Boolean型變量:booleanb=true;varb2=Boolean.valueOf(b);//定義一個(gè)Boolean類型變量varb4=Boolean.valueOf("Yes");//一個(gè)值為false的Boolean對(duì)象varb3=Boolean.parseBoolean("TruE");//創(chuàng)建值為true的Boolean對(duì)象8.4.2Boolean類Boolean類的常用方法有:publicbooleanbooleanValue():返回該Boolean對(duì)象所封裝的boolean值。publicstaticbooleanparseBoolean(Strings):將參數(shù)s解析為一個(gè)boolean值。如果參數(shù)不為null,且等于“true”(不區(qū)分大小寫),則返回true,否則返回false。六種數(shù)值型包裝類(Byte、Short、Integer、Long、Float和Double)都有靜態(tài)工廠方法valueOf()和parseXxx()方法。一個(gè)是以該類型的基本數(shù)據(jù)類型作為參數(shù),另一個(gè)以一個(gè)字符串作為參數(shù)。8.4.3創(chuàng)建數(shù)值類對(duì)象例如,Integer類有下面方法:valueOf(intvalue)使用int類型的值創(chuàng)建包裝類型Integer對(duì)象。要構(gòu)造一個(gè)包裝了int型值314的Integer型對(duì)象,可以使用下面方法:varintObj=Integer.valueOf(314);每種數(shù)值類都定義了若干實(shí)用方法,下面是Integer類的一些常用方法。publicstaticStringtoBinaryString(int
i):返回i用字符串表示的二進(jìn)制序列。publicstaticStringtoHexString(int
i):返回i用字符串表示的十六進(jìn)制序列。publicstaticStringtoOctalString(int
i):返回i用字符串表示的八進(jìn)制序列。publicstaticintreverse(int
i):返回將整數(shù)i的二進(jìn)制序列反轉(zhuǎn)后的整數(shù)值。publicstaticintsignum(int
i):返回整數(shù)i的符號(hào)。若i大于0,返回1,若i等于0,返回0,若i小于0則返回-1。publicstaticinthighestOneBit(int
i):返回整數(shù)i的二進(jìn)制補(bǔ)碼的最高位1所表示的十進(jìn)制數(shù)。如7(111)的最高位的1表示的值為4。publicstaticintlowestOneBit(int
i):返回整數(shù)i的二進(jìn)制補(bǔ)碼的最低位1所表示的十進(jìn)制數(shù)。如10(1010)的最低位的1表示的值為2。8.4.3創(chuàng)建數(shù)值類對(duì)象System.out.println(Integer.toBinaryString(13));System.out.println(Integer.toHexString(13));System.out.println(Integer.toOctalString(13));System.out.println(Integer.toBinaryString(Integer.reverse(13)));System.out.println(Integer.highestOneBit(13));System.out.println(Integer.lowestOneBit(13));程序8.5IntegerDemo.java每個(gè)數(shù)值包裝類都定義了SIZE、BYTES、MAX_VALUE、MIN_VALUE常量。SIZE表示每種類型的數(shù)據(jù)所占的位數(shù),BYTES表示數(shù)據(jù)所占的字節(jié)數(shù)。MAX_VALUE表示對(duì)應(yīng)基本類型數(shù)據(jù)的最大值。對(duì)于Byte、Short、Integer和Long來(lái)說(shuō),MIN_VALUE表示byte、short、int和long類型的最小值。對(duì)Float和Double來(lái)說(shuō),MIN_VALUE表示float和double型的最小正值。8.4.4數(shù)值類的常量除了上面的常量外,在Float和Double類中還分別定義了POSITIVE_INFINITY、NEGATIVE_INFINITY、NaN(notanumber),它們分別表示正、負(fù)無(wú)窮大和非數(shù)值。請(qǐng)看下面代碼:vard=5.0/0.0;System.out.println(d);//輸出:Infinity,表示正無(wú)窮大System.out.println(d==Double.POSITIVE_INFINITY);//輸出:trueSystem.out.println(-5.0/0.0);//輸出:-Infinity,表示負(fù)無(wú)窮大System.out.println(0.0/0.0);//輸出:NaN,表示不是一個(gè)數(shù)(NotaNumber)為方便基本類型和包裝類型之間轉(zhuǎn)換,Java5版提供了一種新的功能,稱為自動(dòng)裝箱和自動(dòng)拆箱。自動(dòng)裝箱(autoboxing)是指基本類型的數(shù)據(jù)可以自動(dòng)轉(zhuǎn)換為包裝類的實(shí)例,自動(dòng)拆箱(unboxing)是指包裝類的實(shí)例自動(dòng)轉(zhuǎn)換為基本類型的數(shù)據(jù)。8.4.5自動(dòng)裝箱與自動(dòng)拆箱例如,下面表達(dá)式就是自動(dòng)裝箱:Integervalue=308;//自動(dòng)裝箱該賦值語(yǔ)句將基本類型數(shù)據(jù)308自動(dòng)轉(zhuǎn)換為包裝類型,然后賦值給包裝類的變量value。下面的語(yǔ)句是自動(dòng)拆箱:intx=value;//自動(dòng)拆箱自動(dòng)裝箱和自動(dòng)拆箱在很多上下文環(huán)境中都是自動(dòng)應(yīng)用的。除了上面的賦值語(yǔ)句外,在方法參數(shù)傳遞中也適用。例如,當(dāng)方法需要一個(gè)包裝類對(duì)象(如Character)時(shí),可以傳遞給它一個(gè)基本數(shù)據(jù)類型(如char),傳遞的基本類型將自動(dòng)轉(zhuǎn)換為包裝類型。8.4.5自動(dòng)裝箱與自動(dòng)拆箱publicclassUseBoxing{booleango(Integeri){BooleanifSo=true;//
boxingShorts=300;//
boxingif(ifSo){System.out.println(++s);//unboxing}return!ifSo;//unboxing}publicstaticvoidmain(String[]args){UseBoxingu=newUseBoxing();u.go(5);//boxing}}自動(dòng)裝箱與自動(dòng)拆箱將字符串轉(zhuǎn)換為基本數(shù)據(jù)類型,可通過(guò)包裝類的parseXxx()靜態(tài)方法實(shí)現(xiàn),這些方法定義在各自的包裝類型中。例如,在Integer類中定義了parseInt()靜態(tài)方法,該方法將字符串s轉(zhuǎn)換為int型數(shù)。publicstaticintparseInt(String
s)8.4.6字符串與基本類型轉(zhuǎn)換如果s不能正確轉(zhuǎn)換成整數(shù),拋出NumberFormatException異常。例如,將字符串“314”轉(zhuǎn)換成int型值,可用下列代碼:intd=Integer.parseInt("314");其他包裝類中定義的相應(yīng)方法如下:publicstaticbyteparseByte(Stringstr):將字符串參數(shù)str轉(zhuǎn)換為byte類型值。publicstaticshortparseShort(Stringstr):將字符串參數(shù)str轉(zhuǎn)換為short型值。publicstaticintparseInt(Stringstr):將字符串參數(shù)str轉(zhuǎn)換為int類型值。publicstaticlongparseLong(Stringstr):將字符串參數(shù)str轉(zhuǎn)換為long類型值。publicstaticfloatparseFloat(Stringstr):將字符串參數(shù)str轉(zhuǎn)換為float類型值。publicstaticdoubleparseDouble(Stringstr):將字符串參數(shù)str轉(zhuǎn)換為double類型值。publicstaticbooleanparseBoolean(Stringstr):將字符串參數(shù)str轉(zhuǎn)換為boolean類型值。8.4.6字符串與基本類型轉(zhuǎn)換若要將基本類型的值轉(zhuǎn)換為字符串,可以使用String類中定義的valueOf()靜態(tài)方法,比如,下面方法將參數(shù)的基本類型double值轉(zhuǎn)換為字符串。publicstatic
String
valueOf(double
d)8.4.6字符串與基本類型轉(zhuǎn)換String類中還定義了其他多個(gè)重載的valueOf()方法。下面代碼將double值3.14159轉(zhuǎn)換為字符串。vard=3.14159;Strings=String.valueOf(d);//將double值轉(zhuǎn)換為字符串Java語(yǔ)言程序設(shè)計(jì)8.5案例:一個(gè)整數(shù)棧的實(shí)現(xiàn)棧(stack)是一種后進(jìn)先出(LastIn,FirstOut,LIFO)的數(shù)據(jù)結(jié)構(gòu),在計(jì)算機(jī)領(lǐng)域應(yīng)用廣泛。例如,編譯器就使用棧來(lái)處理方法調(diào)用。問題描述本案例要求定義一個(gè)類模擬棧結(jié)構(gòu)。為簡(jiǎn)單起見,設(shè)棧中存放Integer類型值,用數(shù)組存儲(chǔ)棧元素。為棧類定義默認(rèn)構(gòu)造方法和帶參數(shù)構(gòu)造方法。定義棧的操作方法,包括入棧方法push(),出棧方法pop()、返回棧頂元素方法peek()、判空方法empty()以及返回棧大小的方法geiSize()。根據(jù)問題描述,本案例的設(shè)計(jì)思路如下:(1)用數(shù)組實(shí)現(xiàn)棧的功能,棧元素存放在elements數(shù)組元素中。數(shù)組下標(biāo)為0的元素作為棧底,即第一個(gè)元素保存為下標(biāo)為0的元素,添加下一個(gè)元素時(shí),保存在下標(biāo)為1的元素中。棧頂元素是下標(biāo)為size-1的元素。設(shè)計(jì)思路(2)當(dāng)創(chuàng)建棧對(duì)象時(shí)將同時(shí)創(chuàng)建一個(gè)數(shù)組對(duì)象。使用默認(rèn)構(gòu)造方法創(chuàng)建的棧包含10個(gè)元素,也可以使用帶參數(shù)構(gòu)造方法指定數(shù)組初始大小。變量size用來(lái)記錄棧中元素個(gè)數(shù),下標(biāo)為size-1的元素為棧頂元素。如果???,size值為0。(3)實(shí)現(xiàn)棧的常用方法,其中包括push()將一個(gè)整數(shù)存入棧中;pop()方法元素出棧方法;peek()方法返回棧頂元素但不出棧;empty()方法返回棧是否為空;getSize()方法返回棧中元素個(gè)數(shù)。設(shè)計(jì)思路publicclassIntStack{privateInteger[]elements;privateintsize=0;publicstaticfinalintDEFAULT_CAPACITY=10;publicIntStack(){this(DEFAULT_CAPACITY);}publicIntStack(intcapacity){elements=newInteger[capacity];}程序8.6IntStack.java
publicvoidpush(Integervalue){if(size>=elements.length){//創(chuàng)建一個(gè)長(zhǎng)度是原數(shù)組長(zhǎng)度2倍的數(shù)組Integer[]temp=newInteger[elements.length*2];//將原來(lái)數(shù)組元素復(fù)制到新數(shù)組中System.arraycopy(elements,0,temp,0,elements.length);elements=temp;}elements[size++]=value;}publicIntegerpop(){returnelements[--size];}publicIntegerpeek(){returnelements[size-1];}publicbooleanempty(){returnsize==0;}publicintsize(){returnsize;}publicstaticvoidmain(String[]args){varstack=newIntStack();varrand=newRandom();
//向棧中存入11個(gè)隨機(jī)生成的整數(shù)for(inti=0;i<=10;i++){varn=Integer.valueOf(rand.nextInt(100));System.out.print(n+"");stack.push(n);}System.out.println();System.out.println("棧大小為:"
+stack.size());程序8.7IntStackDemo.java//彈出棧中的所有元素while(!stack.empty()){System.out.print(stack.pop()+"");}}Java語(yǔ)言程序設(shè)計(jì)8.6BigInteger和BigDecimal類如果在程序中需要非常大的整數(shù)或非常高精度的浮點(diǎn)數(shù),可以使用java.math包中定義的BigInteger類和BigDecimal類。這兩個(gè)類都擴(kuò)展了Number類并實(shí)現(xiàn)了Comparable<T>接口,它們的實(shí)例都是不可變的。8.6BigInteger和BigDecimal類可以使用newBigInteger(String)和newBigDecimal(String)創(chuàng)建BigInteger和BigDecimal實(shí)例,然后使用add()、subtract()、multiply()、divide()以及remainder()等方法執(zhí)行算術(shù)運(yùn)算,還可以使用compareTo()方法比較它們的大小。下面代碼創(chuàng)建兩個(gè)BigInteger實(shí)例然后對(duì)它們相乘:vara=newBigInteger("9223372036854775807");//long型最大值varb=newBigInteger("2");varc=a.multiply(b);System.out.println(c);//輸出:18446744073709551614publicstaticBigIntegerfactorial(longn){varresult=BigInteger.ONE;//BigInteger.ONE常量,表示1for(longi=1;i<=n;i++){result=result.multiply(newBigInteger(i+""));}returnresult;}publicstaticvoidmain(String[]args){System.out.println("50的階乘是:\n"+factorial(50));}程序8.8LargeFactorial.java對(duì)BigDecimal對(duì)象,其精度沒有限制。使用divide()方法時(shí),如果運(yùn)算不能終止,將拋出ArithmeticException異常。但是,可以使用重載的divide(Bigdecimald,intscale,introundingMode)方法來(lái)指定精度和圓整的模式以避免異常,這里,scale為小數(shù)點(diǎn)后的最小的位數(shù)。8.6BigInteger和BigDecimal類下面代碼創(chuàng)建兩個(gè)BigDecimal對(duì)象,然后執(zhí)行除法運(yùn)算,保留20位小數(shù),圓整模式為BigDecimal.ROUND_UP。vara=newBigDecimal(10.0);varb=newBigDecimal(6.0);varc=a.divide(b,20,RoundingMode.HALF_UP);System.out.println(c);//輸出:1.66666666666666666667調(diào)用BigDecimal的valueOf(n,e)返回BigDecimal實(shí)例,其值為n×10-e。下面表達(dá)式輸出精確結(jié)果0.9。也可以使用字符串構(gòu)造函數(shù)創(chuàng)建BigDecimal實(shí)例。8.6BigInteger和BigDecimal類vara=BigDecimal.valueOf(2,0);varb=BigDecimal.valueOf(11,1);System.out.println(a.subtract(b));//輸出:0.9Java語(yǔ)言程序設(shè)計(jì)8.7日期與時(shí)間API時(shí)間是自然界無(wú)處不在的客觀屬性。在自然界中,時(shí)間每時(shí)每刻都存在、連續(xù)發(fā)生一去不復(fù)返的。為了方便在計(jì)算機(jī)中表示時(shí)間,人們使用時(shí)間軸表示時(shí)間點(diǎn),時(shí)間點(diǎn)是時(shí)間軸上離散的點(diǎn),相鄰時(shí)間點(diǎn)之間距離等于一個(gè)最小不可分割的時(shí)間單位。概述JavaSE8開始提供了一個(gè)新的日期-時(shí)間API,它們定義在java.time包中。常用的類包括LocalDate、LocalTime、LocalDateTime、YearMonth、MonthDay、Year、Instant、Duration及Period等類。LocalDate對(duì)象用來(lái)表示帶年月日的日期,它不帶時(shí)間信息。使用LocalDate對(duì)象可記錄重要的事件,如人的出生日期,產(chǎn)品的出廠日期等。可使用下列方法創(chuàng)建LocalDate對(duì)象。8.7.1LocalDate本地日期類publicstaticLocalDatenow()publicstaticLocalDateof(int
year,int
month,int
dayOfMonth)publicstaticLocalDateof(int
year,Monthmonth,int
dayOfMonth)。publicstaticLocalDateparse(CharSequencetext):用ISO8601格式(YYYY-MM-DD)的一個(gè)字符串中構(gòu)建日期對(duì)象。下面語(yǔ)句創(chuàng)建兩個(gè)LocalDate實(shí)例。vartoday=LocalDate.now();varbirthDay=LocalDate.of(2022,Month.OCTOBER,20);8.7.1LocalDate本地日期類下面代碼使用plusYears和plusDays()方法創(chuàng)建LocalDate實(shí)例。varnewBirthday=birthDay.plusYears(18);每年的第256天是世界程序員日,下面代碼返回2022年程序員日:varprog_day=LocalDate.of(2022,1,1).plusDays(255);vartoday=LocalDate.now();System.out.println("今天的日期是:"+today);System.out.println("年:"+today.getYear());System.out.println("月:"+today.getMonthValue());System.out.println("日:"+today.getDayOfMonth());System.out.println("星期:"+today.getDayOfWeek());varbirthday=LocalDate.of(2010,Month.OCTOBER,20);System.out.println("我的出生日期是:"+birthday); System.out.println(birthday.getYear()+"年"+(birthday.isLeapYear()?"是閏年":"不是閏年"));程序8.9DateDemo.javaLocalTime對(duì)象表示本地時(shí)間,包含時(shí)、分和秒,它是不可變對(duì)象,最小精度是納秒。例如,時(shí)間“13:45.30.123456789”可以用LocalTime對(duì)象存儲(chǔ)。時(shí)間對(duì)象中不包含日期和時(shí)區(qū)。使用下面方法創(chuàng)建LocalTime對(duì)象。8.7.2LocalTime本地時(shí)間類publicstaticLocalTimenow():獲得默認(rèn)時(shí)區(qū)系統(tǒng)時(shí)鐘的當(dāng)前時(shí)間。publicstaticLocalTimeof(int
hour,int
minute,int
second):根據(jù)給定的時(shí)、分、秒創(chuàng)建一個(gè)LocalTime實(shí)例。publicstaticLocalTimeof(int
hour,int
minute,int
second,int
nanoOfSecond)publicstatic
LocalTime
parse?(CharSequence
text):從文本字符串(例如,“10:15”)獲取LocalTime的實(shí)例。該字符串必須表示有效的時(shí)間,并使用DateTimeFormatter.ISO_LOCAL_TIME進(jìn)行解析。下面代碼創(chuàng)建了兩個(gè)LocalTime對(duì)象:varrightNow=LocalTime.now();varbedTime=LocalTime.of(22,30);//或者LocalTime.of(22,30,0)8.7.2LocalTime本地時(shí)間類LocalTime類now()方法創(chuàng)建的對(duì)象默認(rèn)帶納秒時(shí)間,也可以用truncatedTo()方法將其截短,不保留納秒,如下所示。vartime=LocalTime.now();vartruncatedTime=time.truncatedTo(ChronoUnit.SECONDS);LocalDateTime類用來(lái)處理日期和時(shí)間,該類對(duì)象實(shí)際是LocalDate和LocalTime對(duì)象的組合,它用來(lái)表示一個(gè)特定事件的開始時(shí)間等,如北京奧林匹克運(yùn)動(dòng)會(huì)開幕時(shí)間是2008年8月8日下午8點(diǎn)。8.7.3LocalDateTime本地日期時(shí)間類除了now()方法外,LocalDateTime類還提供了of()方法創(chuàng)建對(duì)象,如下所示。staticLocalDateTimenow():獲得默認(rèn)時(shí)區(qū)系統(tǒng)時(shí)鐘當(dāng)前日期和時(shí)間對(duì)象。staticLocalDateTimeof(int
year,int
month,int
dayOfMonth,int
hour,int
minute):通過(guò)指定的年月日和時(shí)分獲得日期時(shí)間對(duì)象,秒和納秒設(shè)置為0。
varlocalTime=LocalDateTime.now();System.out.printf("現(xiàn)在時(shí)間:%s%n",localTime);System.out.printf("2024年10月6日11:30am:%s%n",LocalDateTime.of(2024,Month.OCTOBER,6,11,30));
//從當(dāng)前時(shí)刻獲得當(dāng)前日期時(shí)間
varldt=LocalDateTime.ofInstant(Instant.now(),ZoneId.systemDefault());System.out.printf("現(xiàn)在時(shí)刻:%s%n",ldt);
//當(dāng)前時(shí)間的6個(gè)月之后和6個(gè)月之前的時(shí)間System.out.printf("6個(gè)月之后時(shí)間:%s%n",localTime.plusMonths(6));System.out.printf("6個(gè)月之前時(shí)間:%s%n",localTime.minusMonths(6));程序8.10DateTimeDemo.javaInstant類表示時(shí)間軸上的一個(gè)點(diǎn)。Duration類和Period類都表示一段時(shí)間,前者是基于時(shí)間的(秒,納秒),后者是基于日期的(年、月、日)。8.7.4Instant類、Duration類和Period類時(shí)間軸上的原點(diǎn)是格林尼治時(shí)間1970年1月1日0點(diǎn)(1970-01-01T00:00:00Z)。從那一時(shí)刻開始時(shí)間按照每天86400秒精確計(jì)算,向前向后都以納秒計(jì)算。Instant值可以追溯到10億年前(Instant.MIN),最大值Instant.MAX是1000000000年12月31日。1.Instant類靜態(tài)方法Instant.now()返回當(dāng)前的瞬間時(shí)間點(diǎn)。Instanttimestamp=Instant.now();調(diào)用Instant類的toString()實(shí)例方法返回結(jié)果如下:2022-10-08T03:11:59.182ZInstant類定義了一些實(shí)例方法,如加減時(shí)間,下面代碼在當(dāng)前時(shí)間上加1小時(shí):InstantoneHourLater=Instant.now().plusSeconds(60*60);1.Instant類Instant類還定義了isAfter()、isBefore()方法比較兩個(gè)Instant實(shí)例。finalClockclock=Clock.systemUTC();//返回系統(tǒng)時(shí)鐘時(shí)刻Instantinstant=clock.instant();Instantnow=Instant.now().plusSeconds(5);System.out.println(instant.isBefore(now));//輸出truePeriod類表示基于日期的(年、月、日)一段時(shí)間,該類提供了getDays()、getMonths()、getYears()等方法從Period中抽取一段時(shí)間。整個(gè)時(shí)間段用年、月、日表示,如果要用單一時(shí)間單位表示,可以使用ChronoUnit.between()方法。2.Period類假設(shè)你的出生日期是2002年1月1日,下面代碼可計(jì)算你的年齡。vartoday=LocalDate.now();varbirthday=LocalDate.of(2002,Month.JANUARY,1);Periodp=Period.between(birthday,today);//計(jì)算兩個(gè)日期之間相差的天數(shù)longp2=ChronoUnit.DAYS.between(birthday,today);System.out.println("你出生"+p.getYears()+"年,"+p.getMonths()+"個(gè)月,"+p.getDays()+"天。(共"+p2+"天)");Duration對(duì)象適合表示機(jī)器時(shí)間,它的測(cè)度是基于秒、納秒的。如果創(chuàng)建Duration實(shí)例結(jié)束點(diǎn)在開始點(diǎn)之前,它的值可以為負(fù)值。為了計(jì)算兩個(gè)瞬時(shí)點(diǎn)的時(shí)間差,可以使用靜態(tài)方法Duration.between()。例如,下面代碼計(jì)算一個(gè)算法的運(yùn)行時(shí)間。3.Duration類Instantstart=Instant.now();//算法開始執(zhí)行時(shí)刻runAlgorithm();//執(zhí)行算法代碼Instantend=Instant.now();//算法執(zhí)行結(jié)束時(shí)刻DurationtimeElapsed=Duration.between(start,end);longmillis=timeElapsed.toMillis();//得到算法執(zhí)行的毫秒數(shù)除上述介紹的類外,日期-時(shí)間API還定義了一些其他表示日期和時(shí)間的類,包括Clock類、Year類、YearMonth類和MonthDay類、Month枚舉以及ZonedDateTime和OffsetDateTime等。8.7.5其他常用類Year表示一年,下面代碼使用它的isLeap()方法確定給定的年是否是閏年。2012年是閏年,代碼返回true。varvalidLeapYear=Year.of(2012).isLeap();下面代碼使用lengthOfMonth()方法確定一些年月包含的天數(shù)。vardate2=YearMonth.of(2010,Month.FEBRUARY);System.out.printf("%s:%d%n",date2,date2.lengthOfMonth());vardate3=YearMonth.of(2012,Month.FEBRUARY);System.out.printf("%s:%d%n",date3,date3.lengthOfMonth());vardate=YearMonth.now();System.out.printf("%s:%d%n",date,date.lengthOfMonth());MonthDay對(duì)象表示月日,如新年是1月1日。下面代碼使用isValidYear()方法確定2010年2月29日是否合法,代碼返回false表示2010年不是閏年。MonthDaydate=MonthDay.of(Month.FEBRUARY,29);booleanvalidLeapYear=date.isValidYear(2010);8.7.5其他常用類日期-時(shí)間API提供了parse()方法解析包含日期和時(shí)間信息,還提供了format()方法格式化時(shí)態(tài)數(shù)據(jù)。8.7.6日期時(shí)間解析和格式化LocalDate類的帶一個(gè)參數(shù)的parse(CharSequence)方法使用ISO_LOCAL_DATE格式化器將一個(gè)字符串(如"2015-07-09")解析成日期數(shù)據(jù)。若需要指定不同的格式化器,可使用帶兩個(gè)參數(shù)的parse(CharSequence,DateTimeFormatter)方法。若字符串不能解析成對(duì)應(yīng)的日期-時(shí)間數(shù)據(jù),將拋出java.time.format.DateTimeParseException異常。1.時(shí)態(tài)數(shù)據(jù)解析下面代碼使用ISO_LOCAL_DATE格式化器將“2018-07-09”解析成日期2018年7月9日。varin="2022-07-09";vardate=LocalDate.parse(in);可以使用預(yù)定義的格式化器,將它傳遞給parse()方法解析日期數(shù)據(jù)。下面代碼使用預(yù)定義的BASIC_ISO_DATE格式化器將“20220709”解析成2022年7月9日。格式化器類是java.time.format.DataTimeFormatter。1.時(shí)態(tài)數(shù)據(jù)解析varin="20220709";vardate=LocalDate.parse(in,DateTimeFormatter.BASIC_ISO_DATE);LocalDate類、LocalTiemDate類和LocalDateTime類都有format(DateTimeFormatter)方法,使用指定的格式將時(shí)態(tài)對(duì)象表示成字符串。下面代碼使用“yyyyMMdd”格式將當(dāng)前日期格式化成字符串。2.時(shí)態(tài)數(shù)據(jù)格式化vardate=LocalDate.now();varformatter=DateTimeFormatter.ofPattern("yyyy-MM-dd");vartext=date.format(formatter);System.out.printf("%s%n",text);//輸出:2021-07-27下面代碼使用“MMMdyyyhh:mma”格式將LocalDateTime實(shí)例轉(zhuǎn)換為字符串,該格式中包含了月、日、年、
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 未來(lái)五年老樅水仙企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略分析研究報(bào)告
- 未來(lái)五年婚紗攝影服務(wù)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略分析研究報(bào)告
- 未來(lái)五年青魚苗企業(yè)縣域市場(chǎng)拓展與下沉戰(zhàn)略分析研究報(bào)告
- 未來(lái)五年移動(dòng)信息化服務(wù)企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略分析研究報(bào)告
- 未來(lái)五年真空絕熱板芯材企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略分析研究報(bào)告
- 療養(yǎng)院服務(wù)質(zhì)量指標(biāo)體系構(gòu)建-洞察及研究
- 動(dòng)態(tài)多行注釋可視化分析方法-洞察及研究
- 高維空間理論-洞察及研究
- 非藥物干預(yù)方法研究-洞察及研究
- 海洋酸化對(duì)珊瑚礁的影響-洞察及研究
- 2026年黑龍江林業(yè)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能筆試備考試題含答案解析
- 生物實(shí)驗(yàn)室安全管理手冊(cè)
- 網(wǎng)絡(luò)安全與輿情培訓(xùn)簡(jiǎn)報(bào)課件
- 供應(yīng)商現(xiàn)場(chǎng)審核打分表-評(píng)分細(xì)則
- 預(yù)防葡萄膜炎復(fù)發(fā)護(hù)理策略
- (15)普通高中美術(shù)課程標(biāo)準(zhǔn)日常修訂版(2017年版2025年修訂)
- 2025年時(shí)事政治考試題庫(kù)及參考答案(100題)
- 高教主賽道創(chuàng)業(yè)計(jì)劃書
- 一年級(jí)上冊(cè)生字練字帖(僅打印)
- 委托付款三方協(xié)議中英文版
- 廣西職業(yè)師范學(xué)院教師招聘考試真題2022
評(píng)論
0/150
提交評(píng)論