




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
JAVA語言程序設(shè)計
第二章JAVA基礎(chǔ)學(xué)習(xí)目標掌握Java符號掌握Java的數(shù)據(jù)類型與變量、常量掌握Java的運算符、表達式和語句掌握Java的數(shù)據(jù)類型的轉(zhuǎn)換要求:學(xué)習(xí)時,每一個細節(jié)都要求掌握清楚
基本成分是計算機語言能識別的具有確定含義的最小單位,Java語言的基本成分共有五種:標識符、關(guān)鍵字、分隔符、常量和運算符。數(shù)據(jù)是計算機處理的基本對象,Java語言可以處理的數(shù)據(jù)有數(shù)值型數(shù)據(jù)、文字型數(shù)據(jù)、圖形數(shù)據(jù)(靜態(tài))、圖像數(shù)據(jù)(動態(tài))和聲音數(shù)據(jù)等;數(shù)據(jù)類型反映了數(shù)據(jù)的存儲方式等基本特點,Java語言中的數(shù)據(jù)類型分基本類型、數(shù)組、類和界面;語句是對數(shù)據(jù)進行操作的指令,Java語言的語句都包含在方法體中。標識符和關(guān)鍵字
標識符identifier好像一個人生下來就要給他起個名字一樣,作為一種識別記號。計算機中的變量、常量、方法、類等也都是用名字來加以識別的,這種名字就是標識符。起名的方法有一種約定,即可以是一個字母或者是一串以字母開頭由字母、數(shù)字或符號組成的字符串。
1、符號只允許下劃線_和美元$符號
2、名字長度不限
3、注意英文字母大小寫代表不同含義
4、取名應(yīng)遵循易于理解、便于記憶的原則例如合法標識符Lotus_1wang$
非法標識符A?23ababstractdefaultgotooperatorsynchronibooleandoifouterthisbreakdoubleimplementspackagethrowbyteelseimportprivatethrowsbyvalueextendsinnerprotectedtransientcasefalseinstanceofPublictruecastfinalintresttrycatchfinallyinterfacereturnvarcharfloatlongshortvoidclassfornativestaticvolatileconstfuturenewsuperwhilecontinuegenericnullswitch關(guān)鍵字也稱保留字是程序設(shè)計語言本身已經(jīng)使用并賦予特定意義的一些標識符,編程人員在為自定義的標識起名時,不能與關(guān)鍵字同名。分隔符用來區(qū)分源程序中基本成分,便于代碼組織和理解。就像一篇文章如果沒有分隔符,文章的內(nèi)容很難理解。JAVA分隔符有注釋、空白符和普通分隔符三種注釋有三種形式即由/*注釋部分*/,/**注釋部分**/和//注釋部分空白符包括空格、回車、換行和制表符(Tab鍵)等符號JAVA普通分隔符有四種
1、花括號{}用來定義復(fù)合語句、方法體、類體及數(shù)據(jù)的初始化
2、分號;是語句的結(jié)束標志
3、逗號,分隔方法的參量和變量說明
4、冒號:說明語句標號JAVA分隔符數(shù)據(jù)類型與變量、常量數(shù)據(jù)是程序操作的對象,具有名稱、類型和作用域等特征。數(shù)據(jù)由標識符命名;數(shù)據(jù)的類型表示數(shù)據(jù)的性質(zhì)、占用內(nèi)存多少和存放形式;數(shù)據(jù)的作用域表示程序中可以使用數(shù)據(jù)的范圍。JAVA數(shù)據(jù)類型分為基本型(簡單類型)和引用類型(復(fù)合類型)兩種?;绢愋?primitivetype)包括整型(integer)、浮點型(floatingpointnumber)字符型(character)和布爾型(boolean)。引用類型(referencetype)包括數(shù)組型(array)、類(class)和接口(interface)數(shù)據(jù)類型所占字節(jié)表示范圍long(長整型)8-9223372036854775808~
9223372036854775807int(整型)4-2147483648~2147483647short(短整型)2-32768~32767byte(位)1-128~127char(字符)10~255boolean(布爾)1布爾值只能使用true或falsefloat(單精度)4-3.4E38~3.4E38double(雙精度)8-1.7E308~1.7E308Java的基本數(shù)據(jù)類型常量
常量是指在程序運行過程中其值始終保持不變的量。根據(jù)數(shù)據(jù)類型劃分對應(yīng)有整型常量、浮點型常量、布爾型常量和字符串常量等。
整型類型又細分為long,int,short和byte四種類型,對應(yīng)也有這四種整型常量,長整型常量后面要加上字母L或l。
計算機中數(shù)的表示廣泛采用十進制、八進制和十六進制三種形式。十進制數(shù)即為通常使用的形式八進制數(shù)必須以0開頭,如034,099等十六進制數(shù)以0x開頭,如0xAB,0xF2等變量
變量就是在程序運行過程中其值可以被改變的量。在程序設(shè)計過程中,要想使用變量,首先要對變量進行聲明,聲明有兩點,第一是聲明變量的名稱,第二是聲明變量的數(shù)據(jù)類型。變量要先經(jīng)過聲明,然后才能進行賦值和使用。類型名是由關(guān)鍵字決定的整型有l(wèi)ongintshortbyte浮點型有floatdouble默認為double單精數(shù)后面加f字符型為char字符串為String字符串用雙引號括住“”布爾型為boolean//輸出JAVA整數(shù)類型數(shù)據(jù)publicclassInteger2_1{publicstaticvoidmain(Stringargs[]){bytea=015;//八進制數(shù)
byteb=20;//十進制數(shù)
bytec=0x25;//十六進制數(shù)
shortx=30;//短整型
longy=1234567890123l;//長整型
System.out.println("a="+a+""+"b="+b+""+"c="+c);System.out.println("x="+x+""+"y="+y);}}輸出結(jié)果是:a=13b=20c=37X=30y=1234567890123//輸出給定的JAVA單精度和雙精度類型數(shù)據(jù)publicclassFloating2_2{publicstaticvoidmain(Stringargs[]){floata=35.45f;doubleb=3.56e18;System.out.println("a="+a);System.out.println("b="+b);}}輸出結(jié)果如下a=5.45b=3.56E18//輸出給定的JAVA字符類型常數(shù)publicclassCharacter2_3{publicstaticvoidmain(Stringargs[]){charch1='a';charch2=80;charch3='\n';charch4='\070';//八進制Unicode碼
charch5='\u0050';//十六進制Unicode碼
System.out.println("ch1="+ch1+"ch2="+ch2+ch3);System.out.println("ch4="+ch4+"ch5="+ch5);}}運行結(jié)果如下ch1=ach2=p(ch3是回車符)
ch4=8ch5=p//輸出給定的JAVA字符串數(shù)據(jù)類型以及運算結(jié)果publicclassCharacter2_4{publicstaticvoidmain(Stringargs[]){Stringstr1="abc";Stringstr2="\n";Stringstr3="80\070\u0050";System.out.println("str1="+str1+"str2="+str2);System.out.println("str3="+str3);}}運行結(jié)果如下str1=abcstr2=str3=808p//輸出給定的JAVA邏輯類型數(shù)據(jù)publicclassLogic2_5{publicstaticvoidmain(Stringargs[]){booleaninstance1=true;booleaninstance2=false;System.out.println("邏輯狀態(tài)1="+instance1);System.out.println("邏輯狀態(tài)2="+instance2);}}運行結(jié)果如下邏輯狀態(tài)1=true邏輯狀態(tài)2=falseJAVA的運算符
JAVA語言按運算符對數(shù)據(jù)的運算結(jié)果分類有算術(shù)運算符、邏輯運算符、關(guān)系運算符、賦值運算符和位運算符;按運算符運算的數(shù)據(jù)個數(shù)分類可分為一元運算符、二元運算符和三元運算符。算術(shù)運算符有五種加+減–乘
*除
/取余%其中除減號可作為一元運算符外均為二元運算符另外兩個經(jīng)常使用的一元運算符是加一運算++和減一運算--i++相當于i變量加1再放入i中;先使用后加一。++i相當于i變量加1再放入i中;先加一再使用。i--相當于i變量加1再放入i中;先使用后減一。--i相當于i變量加1再放入i中;先減一再使用。語句與表達式
語句是構(gòu)成程序的基本單位,語句具有獨立完整的含義,可以對計算機發(fā)出操作命令,每一條語句都必須以分號;作為結(jié)束符。
表達式是用運算符把操作數(shù)(變量、常量和方法)連接起來表達某種運算或含義的式子。一個表達式可以同時包括多個操作,而操作的順序由各運算符的優(yōu)先級及括號來決定。其中運算符是算術(shù)運算符稱為算術(shù)表達式;運算符為邏輯運算符稱為邏輯表達式。語句和表達式的區(qū)別與聯(lián)系
1、語句是程序的組成部分;表達式是語句的組成部分
2、語句有結(jié)束符;表達式?jīng)]有結(jié)束符
3、語句是針對程序而言的;表達式是數(shù)學(xué)上的計算概念
4、算式的計算結(jié)果=號在右邊;賦值語句=號在表達式左邊//JAVA整數(shù)類型數(shù)據(jù)除法演示publicclassTwo_perate2_6{publicstaticvoidmain(Stringargs[]){inta=15;intb=7;intc=b/a;intd=a/b;inte=15%7;System.out.println("a="+a+""+"b="+b+""+"c="+c);System.out.println("d="+d+""+"e="+e);}}計算結(jié)果如下:c=0d=2//將一元操作符放在變量的前或后,輸出其操作結(jié)果publicclassOne_Oparate2_7{publicstaticvoidmain(Stringargs[]){inti=15,j;j=i++;System.out.println("i++="+j);j=++i;System.out.println("++i="+j);j=--i;System.out.println("--i="+j);j=i--;System.out.println("i--="+j);j=-i;System.out.println("-i="+j);System.out.println("i="+i);}}運行結(jié)果是i++=15++i=17--i=16i--=16–i=-15i=15運算符運算舉例含義~位反~x將x逐位取反&位與x&yx、y逐位進行與操作|位或x|yx、y逐位進行或操作^位異或x^yx、y逐位進行相同取0相異取1<<左移x<<yx向左移動,位數(shù)是y>>右移x>>yx向右移動,位數(shù)是y>>>不帶符號右移x>>>yx向右移動,位數(shù)是y,空位補0位運算符運算符運算舉例含義運算符運算舉例含義+=加法x+=yx=x+y&=與x&=yx=x&y-=減法x-=yx=x-y|=或x|=yx=x|y*=乘法x*=yx=x*y^=異或x^=yx=x^y/=除法x/=yx=x/y<<=左移x<<=yx=x<<y%=取余x%=yx=x%y>>=右移x>>=yx=x>>y>>>=不帶符號右移x>>>=yx=x>>>y二元算術(shù)運算符、邏輯運算符和位運算符的簡捷使用運算符描述優(yōu)先級結(jié)合性.[]()域、數(shù)組、括號1從左至右++---!~一元操作符2從右至左*/%乘、除、取余3從左至右+-加、減4從左至右<<>>>>>位運算5從左至右<<=>>=關(guān)系運算6從左至右==!=邏輯運算7從左至右&按位與8從左至右^按位異或9從左至右|按位或10從左至右&&邏輯與11從左至右||邏輯或12從左至右?:條件運算符13從右至左=*=/=%=+=-=,<<=>>=>>>=&=^=|=賦值運算符
14從右至左運算符的優(yōu)先級//輸出JAVA加減乘除混合運算的結(jié)果,注意算術(shù)運算符的//優(yōu)先級publicclassExcellence2_8{publicstaticvoidmain(Stringargs[]){inta=20;intb=7;intd=b*++a;inte=(a/(++b));System.out.println("a="+a+""+"b="+b);System.out.println("d="+d+""+"e="+e);}}運行結(jié)果d=147e=2//通過對給定常數(shù)進行大小比較,將比較結(jié)果作為邏輯值輸出publicclassLogical2_9{publicstaticvoidmain(Stringargs[]){intx=15;inty=7;booleanc=(x>y);booleand=((float)x/y==(double)x/y);System.out.println("c="+c);System.out.println("d="+d);}}程序運行結(jié)果c=trued=false//通過比較字符串,將字符串比較結(jié)果輸出publicclassSign2_10{publicstaticvoidmain(Stringargs[]){inttime=10;Stringweek="Monday";if(week=="Sunday"|week=="Saturday")System.out.println("今天我休息");elseif(time>8&&time<12)System.out.println("今天你遲到了");}}程序運行結(jié)果今天你遲到了數(shù)據(jù)類型的轉(zhuǎn)換數(shù)據(jù)類型的轉(zhuǎn)換分為“自動類型轉(zhuǎn)換”和“強制類型轉(zhuǎn)換”。轉(zhuǎn)換要符合兩個條件
1、轉(zhuǎn)換前的數(shù)據(jù)類型與轉(zhuǎn)換后的類型兼容
2、轉(zhuǎn)換后的數(shù)據(jù)類型比轉(zhuǎn)換前的數(shù)據(jù)類型表示的范圍大強制類型轉(zhuǎn)換是程序員根據(jù)計算的需要強制數(shù)據(jù)進行類型轉(zhuǎn)換,具體辦法是在變量前加上帶括號的數(shù)據(jù)類型關(guān)鍵字。要求關(guān)鍵字必須與要強制轉(zhuǎn)換的數(shù)據(jù)類型兼容。表達式的類型轉(zhuǎn)換在不同數(shù)據(jù)類型數(shù)據(jù)進行計算時總是由表示范圍較小的數(shù)據(jù)類型轉(zhuǎn)換為表示范圍較大的數(shù)據(jù)類型//不同整數(shù)數(shù)據(jù)類型的轉(zhuǎn)換publicclassChange2_11{publicstaticvoidmain(Stringargs[]){shorta=10;intb=34567;intc=a*b;floatd=123.45f;System.out.println("c="+c);System.out.println("num="+d/b);}}程序運行結(jié)果如下:c=345670num=0.0035713252//強制整數(shù)數(shù)據(jù)類型的轉(zhuǎn)換publicclassChange2_12{publicstaticvoidmain(Stringargs[]){inta=15;intb=7;floatc=a/b;floatd=(float)a/b;inte=a/(int)d;System.out.println("c="+c+"d="+d+"e="+e);
}}計算結(jié)果如下c=2.0d=2.142857e=2作業(yè)與練習(xí)1、填空:1)_____用于說明和解釋一個程序和改善它的可讀性。2)_____類型聲明一個單精度浮點變量。3)Java語言在使用浮點數(shù)數(shù)據(jù)時默認的類型是_____類型。4)如下代碼的打印結(jié)果是什么?System.out.print(“*”);System.out.print(“***”);System.out.print(“*****”);System.out.print(“****”);System.out.println(“**”);2。判斷題:1)Java運算符是從左到右計算的。2)后面這些是合法的變量名:_under_bar_,m928134,t5,j7,her_sales$,his_$account_total,a,b$,c,z和z2。
異常是指程序運行過程中出現(xiàn)的非正?,F(xiàn)象,例如用戶輸入錯誤、除數(shù)為零、需要處理的文件不存在、數(shù)組下標越界等。由于異常情況總是難免的,良好的應(yīng)用程序除了具備用戶所要求的功能以外,還應(yīng)該具備預(yù)見并處理可能發(fā)生的各種異常的功能。這種對異常情況進行處理的技術(shù)成為異常處理。計算機系統(tǒng)對檢查異常處理通常有兩種方法,第一種是計算機系統(tǒng)本身直接檢測程序中的錯誤,遇到錯誤給出錯誤信息并終止程序的運行,第二種辦法是由程序員在程序中加入異常處理功能。異常處理一.異常的分為兩種:
1檢查型異常:是由超出程序員控制能力的外部條件所引發(fā)的。例如:在輸入和輸出過程中出現(xiàn)的異常。因此,編譯程序堅持讓程序員提供處理這些情況的代碼。2非檢查型異常:通常來自于程序員的失誤。JAVA的異常處理機制
JAVA提供了功能強大的異常處理機制,可以方便的在程序中監(jiān)視可能發(fā)生異常的程序塊,并將所有異常處理代碼集中放置在程序的某處,使完成正常功能的程序代碼與進行異常處理的程序代碼分開。
在JAVA的異常處理機制種引進了很多用來描述和處理異常的類,稱為異常類。每個異常類反映一類運行錯誤,類定義中包含了該類異常的信息和對異常進行處理的方法。每當程序運行過程中發(fā)生了某個異?,F(xiàn)象,系統(tǒng)將產(chǎn)生一個相應(yīng)的異常類對象,并交給系統(tǒng)中的相應(yīng)機制進行處理,以避免死機、死循環(huán)或其他對系統(tǒng)有害的結(jié)果發(fā)生,保證程序運行的安全性
JAVA將異常分為Exception(異常)和Error(錯誤)兩大類。Exception類解決由程序本身及環(huán)境所產(chǎn)生的異常,而Error類處理內(nèi)部系統(tǒng)錯誤。Exception類異??梢员徊东@并進行處理,而對Error類異常,程序員通常無能為力,只能在其發(fā)生時由用戶按照系統(tǒng)提示關(guān)閉程序。ObjectThrowableExceptionError異常類的繼承結(jié)構(gòu)
Exception子類的繼承關(guān)系ExceptionClassNotFoundExceptionClassNotSupportedExceptionIllegalAccessExceptionInstantiationExceptionInterruptedExceptionNoSuchMethodExceptionRuntimeExceptionArithmeticExceptionArrayStoreExceptionClassCastExceptionIllegalArgumentExceptionIllegalThreadStateExceptionNumberFormatException
IllegalMonitorStateExceptionIndexOutOfBoundsExceptionArrayIndexOutOfBoundsExceptionStringIndexOutOfBoundsExceptionNegativeArraySizeExceptionNullPointerExceptionSecurityException考察下列方法:publicvoidread(Stringfilename){FileReaderreader=newFileReader(filename);……}異常處理方法一旦編寫了可能會導(dǎo)致檢查異常的代碼時,必須采用以下兩種措施中地一種:
1.在方法頭部聲明異常2.2.處理(或捕獲)異常throwsFileJNotFoundException(1)read方法的實現(xiàn)者可能并不知道如何更正所出現(xiàn)的情況
;最理想的解決方法:將異常向上傳遞給它的調(diào)用程序。try{//可能異常的程序代碼}catch(IOExceptionexception){//對應(yīng)的異常處理代碼}(2)但是,如果不希望程序在用戶提供非法文件名時終止執(zhí)行,則需要捕獲這個異常。可用以下:(3)有時,方法還必須執(zhí)行某種操作,即使之前的語句產(chǎn)生了異常。例如釋放不再使用的資源、關(guān)閉使用完畢的文件等。這意味著read方法終止執(zhí)行,而異常則拋給了調(diào)用它的方法。finally{必須執(zhí)行的代碼}Finally塊是可選項,無論是否發(fā)生異常,該塊代碼必定執(zhí)行捕獲多個異常//捕獲數(shù)組下界越界異常,當i<=5改為i<5時執(zhí)行正常publicclassException9_1{publicstaticvoidmain(Stringargs[]){try{inta[]={1,2,3,4,5},sum=0;for(inti=0;i<=5;i++)sum+=a[i];System.out.println("sum="+sum);System.out.println("Successfully!");}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("ArrayIndexOutOfBoundsExceptiondetected");System.out.println("當i<=5改為i<5時執(zhí)行正常!");}finally{System.out.println("ProgramFinished!");}}}程序執(zhí)行結(jié)果sum=15Successfully1Programfinished!由于使用未定義的a[5]出現(xiàn)數(shù)組越界將i<=5改為i<5得出如左//捕獲算術(shù)異常publicclassException9_2{publicstaticvoidmain(Stringargs[]){try{intx,y;x=15;y=0;System.out.println("x/y="+x/y);System.out.println("Computingsuccessfully!");}catch(ArithmeticExceptione){System.out.println("ArithmeticExceptioncatched!");System.out.println("Exceptionmessage:"+e.toString());}finally{System.out.println("Finallyblock!");}}}運行該程序的屏幕輸出為:ArithmeticExceptioncatched!Exceptionmessage:java.arithmeticException:/byzeroFinallyblock!拋出異常程序員可以通過throw語句拋出異常,其格式為:thrownew異常類名(信息)異常類名可以選擇系統(tǒng)異常類名,也可以使用自定義異常類名信息項可選,若有,該信息增加在toString()方法的返回值中如果類中定義的方法本身不捕獲某種異常,將該種異常的捕獲和處理交給調(diào)用它的方法,這是需要在聲明本方法時,使用throws關(guān)鍵字拋出異常,其方法定義具體格式為:[修飾符]返回值類型方法名[(參數(shù)表)]throws異常類型名{聲明部分語句部分}這里指給出異常類型名,而不列追加信息publicclassException9_3{publicstaticintSum(intn){if(n<0)
thrownewIllegalArgumentException("n應(yīng)該為正整數(shù)");ints=0;for(inti=0;i<=n;i++)s=s+i;returns;}publicstaticvoidmain(Stringargs[]){try{intn=Integer.parseInt(args[0]);System.out.println("sum="+Sum(n));System.out.println("Successfully!");}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("命令行為:"+"javaException9_3<number>");}catch(NumberFormatExceptione2){System.out.println("參數(shù)<number>應(yīng)為整數(shù)!");}
catch(IllegalArgumentExceptione3){System.out.println("錯誤參數(shù):"+e3.toString());}finally{System.out.println("ProgramFinished!");}}}捕獲多個異常關(guān)于命令行參數(shù)遺失、類型不對的錯誤檢測//拋出異常的方法,例9_4//方法本身不對異常捕獲和處理,而由調(diào)用它的方法去處理publicclassException9_4{publicstaticintSum()throwsNegativeArraySizeException{ints=0;int[]x=newint[-4];for(inti=0;i<4;i++){x[i]=i;s=s+x[i];}returns;}publicstaticvoidmain(Stringargs[]){try{System.out.println("sum="+Sum());}catch(NegativeArraySizeExceptione){System.out.println("異常信息:"+e.toString());}}}自定義異常類自定義異常類可以通過繼承Exception類來實現(xiàn),一般格式為:class自定義異常類名extendsException{異常類體}//自定義異常類將繼承Exception類的所有方法例9_5//除此之外,還可以在類體中定義其他處理方法classOverFlowExceptionextendsException{OverFlowException(){System.out.println("此處數(shù)據(jù)有溢出,溢出類是OverFlowException");}}publicclassException9_5{publicstaticintx=100000;publicstaticintmulti()throwsOverFlowException{intaim;aim=x*x*x;if(aim>2.15E9||aim<0){thrownewOverFlowException();}elsereturnx*x;}publicstaticvoidmain(Stringargs[]){inty;try{y=multi();System.out.println("y="+y);}catch(OverFlowExceptione){System.out.println(e);}}}拋出的異常類被捕獲后,先執(zhí)行它的構(gòu)造方法,然后執(zhí)行catch塊的方法//自定義異常類將繼承Exception類的所有方法//處理多種異常
importjavax.swing.JOptionPane;classmathExceptionextendsException{mathException(){System.out.println("輸入數(shù)據(jù)不正確");}}publicclassException9_6{publicstaticStringname;publicstaticintpay;publicstaticvoidinputdata()throwsmathException{try{name=JOptionPane.showInputDialog("請輸入您的姓名");if(name.equals(""))thrownewException();//假如沒有輸入名字就拋出一個Exception異常
pay=Integer.parseInt(JOptionPane.showInputDialog("請輸入您的月工資"));//假如輸入的月工資數(shù)小于零,就會拋出自定義異常mathException}
catch(Exceptione)//{System.out.println(e);System.exit(0);}}publicstaticvoidmain(Stringargs[]){try{for(inti=1;;i++)//沒有給出循環(huán)次數(shù)限制
{inputdata();System.out.println(name+"的年薪是"+pay*12);}}catch(mathExceptionpt)//捕獲自定義異常
{System.out.println(pt);System.exit(0);}}}只有當用戶給名字輸入了非空串,又為工資輸入了非負值,程序才能正常運行,并輸出計算結(jié)果。若為名字輸入空串,系統(tǒng)顯示Java.long.Exception如果為工資輸入了負值,系統(tǒng)顯示輸入數(shù)據(jù)不正確mathException若為名字輸入wang為工資輸入1200,則計算結(jié)果為Wang的年薪是14400mathException是一個自定義的異常類,其中定義了構(gòu)造方法,功能是輸出信息:輸入數(shù)據(jù)不正確。當輸入工資為負值時,由main()方法捕獲該異常,先執(zhí)行該類的構(gòu)造方法,輸出“輸入數(shù)據(jù)不正確”,再輸出該異常類信息mathException后,結(jié)束程序運行。若輸入姓名為空字符串,將拋出Exception類異常,在捕獲塊中輸出異常信息,然后結(jié)束程序運行主要內(nèi)容OOP概念類的概念Java語言中,類的定義對象:包括創(chuàng)建對象、對象的引用、對象的初始化和構(gòu)造方法類的成員變量([訪問權(quán)限符][static][final]類型變量名)6.類的方法的引用和修飾(this、static、final)重點是4、5、6條,實際也就是第3條的具體展開,即本章主要說明如何創(chuàng)建和使用類和對象。面向?qū)ο蟪绦蛟O(shè)計(OOPObject-OrientedProgramming)是現(xiàn)今程序設(shè)計的主流和流行趨勢。在面向?qū)ο蟮某绦蛟O(shè)計中,將所有事物都作為對象來處理。OOP的基本思想是把人們對現(xiàn)實世界的認識過程應(yīng)用到程序設(shè)計中?,F(xiàn)實世界的物體就是對象,它有兩個基本特點一個是物體的內(nèi)部構(gòu)成,另一個是物體的行為。OOP與現(xiàn)實對象兩個基本特點相對應(yīng)的是數(shù)據(jù)和方法。數(shù)據(jù)表示對象的構(gòu)成,方法表示對象的行為。面向?qū)ο蟪绦蛟O(shè)計
面向?qū)ο笫褂妙惙庋b數(shù)據(jù)(屬性)和方法(行為)。
面向?qū)ο蟪绦蛟O(shè)計(續(xù))在面向過程的編程語言中,編程一般面向操作。然而,Java編程是面向?qū)ο蟮摹T诿嫦蜻^程的編程語言中,編程單位是函數(shù)。而在Java中,編程單位是類。最終實例化(即創(chuàng)建)這些類而得到對象,屬性和行為作為字段和方法封裝在類的“邊界”內(nèi)。封裝使對象能夠向其他對象隱藏它們的實現(xiàn)——該原則稱為信息隱藏。盡管對象通過良好定義的接口互相通信(正如駕駛員的接口包括方向盤、油門踏板、剎車踏板和變速器等),但是對象不知道其他對象是如何實現(xiàn)的——正如駕駛員不知道如何實現(xiàn)轉(zhuǎn)向、發(fā)動機、剎車和變速器等機械裝置。通常,實現(xiàn)細節(jié)隱藏在對象內(nèi)部。
相反,Java程序員的主要精力集中在創(chuàng)建自己的引用類型,該引用類型稱為類。每個類都包含一些域(變量)及操作這些域的方法來作為類的成員。我們有時用程序員在其它語言中慣用的非形式術(shù)語,諸如“數(shù)據(jù)成員”;而沒有用Java專用的術(shù)語,諸如“域”。系統(tǒng)需求文檔中的名詞幫助Java程序員確定最初的一組類,它們用這些類開始設(shè)計過程。程序員使用這些類來實例化對象,這些對象將一起工作以實現(xiàn)系統(tǒng)。本章說明如何創(chuàng)建和使用類和對象。對于面向過程的程序員,他們的精力集中于編寫函數(shù)。首先對操作進行分組,將執(zhí)行某個任務(wù)的操作編寫為一個函數(shù),然后對函數(shù)進行分組以構(gòu)成一個程序。在面向過程的程序中,數(shù)據(jù)無疑是重要的,但主要是為了支持函數(shù)所執(zhí)行的動作。在描述新應(yīng)用程序需求的系統(tǒng)需求文檔中,動詞幫助面向過程的程序員確定為了實現(xiàn)系統(tǒng)而互相合作的函數(shù)集。面向?qū)ο蟪绦蛟O(shè)計(續(xù))類的概念
類是對對象的抽象描述,一個類中定義的方法可以被該類的對象調(diào)用,對象方法的每一次調(diào)用被稱作發(fā)送一個消息給對象。對象間是相互獨立的,只有接收消息的對象才會對該消息起作用。類是對象的“模板”,對象是類的實例。在JAVA語言中,所有的東西都是對象,對象就如同是一種新型變量,通過賦值語句對該變量進行初始化操作。
通過對現(xiàn)實生活中的具體對象進行抽象和處理,可以對結(jié)構(gòu)復(fù)雜而難以用簡單方法進行描述的對象進行歸類,設(shè)計一個類似整型、實型這樣的新的類型,來概括的描述他們的共性。如果某一個實體具有這樣的特征,通過聲明和初始化可以作為該類的實例。類的定義類定義的一般格式class用戶自定義的類名
{
數(shù)據(jù)成員成員方法}定義類的結(jié)構(gòu)包含有類說明和類的實體兩部分。類的說明部分由關(guān)鍵字class與類名組成;類體包括變量的說明、方法的定義與實現(xiàn)兩個部分。類名的第一個字母要大寫。類體要用花括號{}括起來。創(chuàng)建類對象一般形式類名對象變量=new類名(參數(shù)1,參數(shù)2,…);或者類名對象變量;對象變量=new類名(參數(shù)1,參數(shù)2,…);//根據(jù)幾何中的坐標位置定義一個Point類例6_1
classPoint1{privateintx,y;publicvoidsetPoint(inta,intb){x=a;y=b;}publicintgetx(){returnx;}publicintgety(){returny;}publicStringtoString(){return"["+x+","+y+"]";}}publicclassPoint6_1{publicstaticvoidmain(Stringargs[]){inta1=4;intb1=5;Point1abc=newPoint1();abc.setPoint(a1,b1);System.out.println("x="+abc.getx());System.out.println("y="+abc.gety());System.out.println(abc.toString());}}x=4Y=5setPoint(int,int)getx()gety()toString()對象abc對象的引用一旦對象創(chuàng)建之后,這個對象就擁有自己的成員變量和方法。具體的引用辦法為:引用成員變量的一般格式
引用成員方法的一般格式對象名.成員變量名
對象名.方法名(參數(shù)表)new運算符所做的三件事1、首先在指定的類上創(chuàng)建一個對象2、為該對象分配內(nèi)存空間3、執(zhí)行由指定類所定義的構(gòu)造方法//定義Circle類的成員變量r和常量PI以及多種方法//通過創(chuàng)建對象實例來引用這些方法例6_2classCircle1{floatr;finaldoublePI=3.14159;publicdoublearea()//定義計算圓面積的方法
{returnPI*r*r;}floatsetR(floatx)//定義給圓半徑賦初值的方法
{r=x;returnr;}publicdoubleperimeter()//定義計算圓周長的方法
{return2*PI*r;}}publicclassCircle6_2{publicstaticvoidmain(Stringargs[]){doublex,y;Circle1abc=newCircle1();//創(chuàng)建Circle1類的對象
abc.setR(12.35f);//引用abc對象的setR方法
System.out.println("圓面積x="+abc.area());System.out.println("圓周長y="+abc.perimeter());}}對象的初始化和構(gòu)造方法
構(gòu)造方法是一個類方法中方法名與類名相同的類方法,它的作用是當使用new關(guān)鍵字創(chuàng)建一個對象時,自動調(diào)用并對新建對象進行初始化操作。構(gòu)造方法的特點1、構(gòu)造方法與類名相同,第一個字母大寫。2、構(gòu)造方法沒有返回值,不定義返回類型。3、構(gòu)造方法可以重載,針對參數(shù)數(shù)量和類型定義多個同名構(gòu)造方法。4、構(gòu)造方法可以繼承,子類可以繼承父類的構(gòu)造方法。5、構(gòu)造方法只用來對類實例進行初始化,目的在于簡化初始化操作。//定義Triangle類并定義它的構(gòu)造函數(shù),例6-3//通過構(gòu)造函數(shù)對Triangle類對象進行初始化操作
publicclassTri_sele6_3{staticclassTriangle{//定義Triangle類
intx,y,z;
publicTriangle(inti,intj,intk)//定義Triangle類的構(gòu)造方法
{x=i;y=j;z=k;}}publicstaticvoidmain(Stringargs[]){Trianglet1;//創(chuàng)建Triangle類的對象
t1=newTriangle(3,4,5);//引用帶參數(shù)的類構(gòu)造器
if(judge(t1))//引用judge()方法,返回布爾型值
System.out.println("這是一個直角三角形");elseSystem.out.println("這不是一個直角三角形");}publicstaticbooleanjudge(Trianglem){if(m.x*m.x+m.y*m.y==m.z*m.z)returntrue;elsereturnfalse;}}//如何將沒有設(shè)計構(gòu)造器的類添加構(gòu)造器,例6-4//研究帶有構(gòu)造器的類與沒有構(gòu)造器的類之間的區(qū)別
classStudent//定義Student類
{staticlongsum=0;//類變量
Stringname;//對象變量
Stringaddress;Stringgrade;staticintscore;//類變量
publicstaticlongcollect()//定義類的方法
{sum+=score;returnsum;}publicvoidgetMessage(Stringx1,Stringx2,Stringx3){name=x1;address=x2;grade=x3;}publicvoidgetScore(inty){score=y;}}publicclassStudent6_4{publicstaticvoidmain(Stringargs[]){Studentzhang=newStudent();//創(chuàng)建Student類的對象
zhang.getMessage("張三","銀川北京東路12號","西北二民院經(jīng)管系");zhang.getScore(90);zhang.collect();Studentwang=newStudent();//創(chuàng)建Student類的對象
wang.getMessage("王五","銀川文萃路331號","西北二民院計算機系");wang.getScore(85);System.out.println(+zhang.address+zhang.grade);System.out.println(+wang.address+wang.grade);System.out.println("總成績是"+wang.collect());}}
程序運行結(jié)果張三銀川北京東路12號西北二民院經(jīng)管系王五銀川文萃路331號西北二民院計算機系總成績是175引用getMessage()方法對Student類進行初始化nameaddressgrade對象zhang對象wangnameaddressgradesum=175Score=85//采用構(gòu)造方法實現(xiàn)上述功能,例6_4_1//研究帶有構(gòu)造器的類與沒有構(gòu)造器的類之間的區(qū)別
classStudent1//定義Student1類
{staticlongsum=0;Stringname;Stringaddress;Stringgrade;staticintscore;
publicstaticlongcollect()//定義類的方法
{sum+=score;returnsum;}
Student1(Stringx1,Stringx2,Stringx3,inty){name=x1;address=x2;grade=x3;score=y;}}publicclassStudent6_4_1{publicstaticvoidmain(Stringargs[]){Student1zhang;zhang=newStudent1("張三","銀川北京東路12號","西北二民院經(jīng)管系",90);zhang.collect();Student1wang=newStudent1("王五","銀川文萃路331號","西北二民院計算機系",85);System.out.println(+zhang.address+zhang.grade);System.out.println(+wang.address+wang.grade);System.out.println("總成績是"+wang.collect());}
}當類使用new創(chuàng)建對象時,自動調(diào)用與類名相同的構(gòu)造方法,同時將參數(shù)帶入初始化的成員變量類的成員變量
成員變量是包含在類的內(nèi)部、方法定義的外部所定義的變量,其作用域是整個類。在方法體中定義的變量是方法變量,它的作用域只在方法體內(nèi)。成員變量包括兩部分:變量的數(shù)據(jù)類型和變量的名稱。成員變量定義的一般形式[訪問權(quán)限符][static][final]類型變量名訪問權(quán)限修飾符public變量可以被任何包里的類訪問Protected可以被該類及其子類,與該類在同一包中的類訪問Private只能被該類的方法訪問static修飾的成員變量為靜態(tài)變量static修飾的方法為靜態(tài)方法
被static修飾的成員變量成為靜態(tài)變量,保存在內(nèi)存區(qū)的公共存儲單元中,而不是保存在某個對象的內(nèi)存區(qū)中。任何一個類對象在訪問它時都會得到相同的數(shù)值。如果某一個類對象對它進行了修改,所有對象的此成員變量也都做了修改。靜態(tài)方法屬整個類,不用進行實例化操作,使用時方法前加類名而不是對象名。final修飾的變量為最終成員變量final修飾的方法為最終方法最終成員變量一般是在聲明時進行初始化,一旦最終成員變量被賦值,則它在整個程序執(zhí)行過程中不能改變。當聲明常量時,可以使用final加上類型和常量名最終方法不能被重復(fù)定義或更改方法的內(nèi)容,不能被重載//定義一個學(xué)生檔案類,包括學(xué)生姓名、性別和所在學(xué)校,//使用static修飾成員變量例6_5classStudent2//定義Student2類
{Stringname;Stringsex;staticStringschool="西北第二民族學(xué)院";}publicclassStudent6_5{publicstaticvoidmain(Stringargs[]){Student2my=newStudent2();Student2you=newStudent2();="李明";my.sex="男";="張敏";you.sex="女";Student2.school="寧夏大學(xué)";//對類成員變量賦值
System.out.println(+""+my.sex+""+my.school);System.out.println(+""+you.sex+""+you.school);}}程序運行結(jié)果李明男寧夏大學(xué)張敏女寧夏大學(xué)//定義類及其方法,引用此方法時例6-6//通過實參對類進行初始化操作
classCalculate//定義Student2類
{privatedoubler;finaldoublePI=3.14159;voidarea(doubler){doublex;x=PI*r*r;System.out.println("Area="+x);}}publicclassCalculate6_6{publicstaticvoidmain(Stringargs[]){Calculatedd=newCalculate();dd.area(12.3);}}計算結(jié)果Area=475.29115110000004//使用this關(guān)鍵字修飾的方法例6_7//注意本程序需要從命令行輸入兩個整型參數(shù)
classPoint2{privateintx,y;publicvoidsetPoint(inta,intb){x=a;y=b;}publicintgetx(){returnx;}publicintgety(){returny;}publicStringtoString(){return"["+this.getx()+","+this.gety()+"]";}}publicclassPoint6_7{publicstaticvoidmain(Stringargs[]){inti,j;i=Integer.parseInt(args[0]);j=Integer.parseInt(args[1]);Point2dot=newPoint2();dot.setPoint(i,j);System.out.println(dot.toString());}}程序運行結(jié)果javaPoint2233[22,33]//如何引用類方法例6_8//注意本程序需要從命令行輸入兩個整型參數(shù)publicclassSta_method6_8{intwidth,height;publicstaticdoublearea(intwidth,intheight){returnwidth*height;}publicstaticvoidmain(Stringargs[]){inti,j;doublef;i=Integer.parseInt(args[0]);j=Integer.parseInt(args[1]);f=Sta_method6_8.area(i,j);System.out.println("Area="+i+"*"+j+"="+f);}}程序運行結(jié)果javaSta_method3322Area=33*22=726.0用static修飾的方法稱為靜態(tài)方法或稱為類方法,它屬于整個類,在任何地方都可以使用,而不必對類進行實例化操作//使用類方法統(tǒng)計某個班級的學(xué)生成績例6_9importjavax.swing.JOptionPane;publicclassCnt6_9{staticdoublesum=0;staticintscore;publicstaticvoidcount(intss){sum+=ss;}publicstaticvoidmain(Stringargs[]){intnumber=0;System.out.println("請輸入10個人的成績");for(inti=1;i<=10;i++){Stringstr=JOptionPane.showInputDialog("請輸入您的成績");score=Integer.parseInt(str);Cnt6_9.count(score);number+=1;}System.out.println("統(tǒng)計學(xué)生人數(shù)為="+number);System.out.println("最后成績="+sum);System.exit(0);}}//數(shù)學(xué)函數(shù)類方法的使用例6-10//注意本程序需要從命令行輸入兩個整型參數(shù)publicclassMath6_10{publicstaticvoidmain(Stringargs[]){intx,y;x=Integer.parseInt(args[0]);y=Integer.parseInt(args[1]);System.out.println("最大值是"+Math.max(x,y));System.out.println("最小值是"+Math.min(x,y));}}java類庫的Math類庫中提供了實現(xiàn)常用數(shù)學(xué)函數(shù)運算的標準方法,這些方法都是static方法。引用數(shù)學(xué)函數(shù)類方法的格式類名.數(shù)學(xué)函數(shù)方法名(類型實參1,…,類型實參n)//定義Final類及其最終方法并引用此方法//注意本程序需要從命令行輸入兩個整型參數(shù)publicclassFinal6_11{intwidth,height;publicstaticfinaldoublearea(intwidth,intheight){returnwidth*height;}publicstaticvoidmain(Stringargs[]){inti,j;doublef;i=Integer.parseInt(args[0]);j=Integer.parseInt(args[1]);f=Final6_11.area(i,j);System.out.println("Area="+f);}}使用final修飾的方法被稱為最終方法,該方法不能被更改,也不能被當前類的子類重載本章小結(jié)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家裝水電安裝合同范本
- 光纖熔接工程外包勞務(wù)合同
- 承租機械設(shè)備租賃合同
- 提高辦公效率的策略與方法研究
- 2025年青海貨運從業(yè)資格證考試500題
- 出租房房屋租賃合同
- 個人加工合同協(xié)議書
- 抗滑樁基礎(chǔ)勞務(wù)施工合同
- 股份制公司運營優(yōu)化方案
- 2025年黑龍江貨運從業(yè)資格證模擬考試題庫及答案大全
- 硬質(zhì)合金混合及成形
- 高蛋白干酒糟飼料DDGS簡介(課堂PPT)
- 60萬噸年磷石膏綜合利用項目資金申請報告模板定制
- 硅酸鹽水泥熟料礦物組成及配料計算概述(共101頁).ppt
- 口腔診所器材清單
- 急診與災(zāi)難醫(yī)學(xué)第二版配套課件 02 急性發(fā)熱
- 部編版四年級道德與法治下冊4《買東西的學(xué)問》第1課時課件
- 外研版英語(新標準)八年級下冊教案(全冊)
- 教師聽課評分表
- 項目章程模板范文
- 泰山產(chǎn)業(yè)領(lǐng)軍人才工程系統(tǒng)
評論
0/150
提交評論