




已閱讀5頁,還剩60頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1,java課程內(nèi)容串講 2013末,復(fù)習(xí)串講基本內(nèi)容 澄清某些模糊認(rèn)識 更正若干錯誤判斷,2,Chapter01 計算機(jī)系統(tǒng)概述,熟悉java編譯的過程: 源文件(文件名.java) 目標(biāo)文件(文件名.class) 通過JVM/解釋器 運行 了解: 運行java程序的基本過程(在Eclipse環(huán)境下) Types of Errors: Syntax, Run-Time, Logic error.(了解) 文件名.class為后綴名的文件是什么?在什么階段產(chǎn)生的?是可直接硬件運行的二進(jìn)制可執(zhí)行文件嗎? (此處是byte code, 而只有.com和.exe是在PC上可直接運行的二進(jìn)制可執(zhí)行文件,其他的需要另外單獨轉(zhuǎn)換) 如果一個系統(tǒng)想運行Java程序,必須安裝JDK嗎? Eclipse是開發(fā)Java語言必需的軟件工具嗎? Syntax Rules for Identifiers (見下頁或原先課件),3,Chapter01 計算機(jī)系統(tǒng)概述,java的內(nèi)存管理過程: java運行環(huán)境(JRE)或虛擬機(jī)(VM)能夠自動完成常規(guī)的內(nèi)存管理. Java程序運行時并不由操作系統(tǒng)(如Windows)進(jìn)行直接內(nèi)存管理。,4,Chapter02 數(shù)據(jù)與表達(dá)式,原型/基本/原生類型: (變量分為原型類型和類類型) 一般數(shù)據(jù)類型強(qiáng)調(diào): 小寫開頭 (只是習(xí)慣. 又例如: 變量Can11是否合法?) 包裝類: 大寫 (java規(guī)定) 自己寫的類: 大寫(只是習(xí)慣) 例如: Boolean類型和boolean類型的區(qū)別、 Int的寫法和int類型、Character與char類型的區(qū)別。 Java中的簡單(基本)數(shù)據(jù)類型一般是指原型類型 賦值語句與表達(dá)式: 賦值的含義, 原型類型賦值與類類型變量賦值的區(qū)別 標(biāo)識符的命名規(guī)則: 1.字母和下劃線_開頭, 含字母,數(shù)字,下劃線; 2.不能用關(guān)鍵字; 3.$可以開頭或在標(biāo)識符內(nèi),但慎用. 4.符號”-”開頭可以嗎? 5。eclipse是保留字嗎?6. 符號“&”可以嗎? Java區(qū)分大小寫: 例如: Return是關(guān)鍵字嗎? 可做變量嗎?,5,原型類型討論: 原型類型占用的內(nèi)存字節(jié)數(shù)量, 其變量的取值范圍? 例如: long、double、byte、char和short等類型各占用多少內(nèi)存? 取值范圍? Java默認(rèn)的小數(shù)及整數(shù)類型是什么? 專用賦值運算符:a +=b;a +=b-;含義? 簡單輸入與輸出: 語句System.out.println(eggsPerBasket + “ eggs per basket.”)中“+”號的含義? 兩字符串有“-”號的用法嗎? System.out.println( “ a=“ + a ); System.out.println( a+b+ “a=”+(a-b); 注意運算優(yōu)先級 System.out.println( “ a=“ + a + b); 數(shù)字常量: 八進(jìn)制、十六進(jìn)制、e記數(shù)法的正確寫法(了解) 賦值兼容性問題: 隱式轉(zhuǎn)換規(guī)則: 類型強(qiáng)轉(zhuǎn): int i=2.0 有問題, 必須添加強(qiáng)轉(zhuǎn)指令(int) int a=a;合法。 Long a =1000; 是否合法?(N)(掌握自動包裝的概念),6,算術(shù)運算符: + - * / % + - 等等 表達(dá)式內(nèi)部生成值類型一般先轉(zhuǎn)為較復(fù)雜類型 例如: int x=12, y=5 則 x/y=?, (x+10)/y=? 例如:System.out.println(5%-3)結(jié)果?(符號只是分子的) 例如: int x=2; double y=4; x+y結(jié)果的類型? x/y? x/+y? 總結(jié):一個長表達(dá)式的最后結(jié)果一般是最復(fù)雜類型,但順序不同其結(jié)果可能會不一樣。 括號和運算符優(yōu)先級規(guī)則 (見附錄D) String類字符串變量, 連接(+)操作和其他String方法 熟悉常用的String方法:length(), toLowCase(), equals(), substring(), replace(), charAt(), toCharArray(), indexof()等等. 注意不同用法:字符串變量.length(), 而數(shù)組名.length a.toLowCase( ).substring(1,4)的含義? (了解),7,鍵盤和屏幕 I/O-println和print 轉(zhuǎn)義字符的含義與使用: System.out.println( “ this is an apple“ ); System.out.println( “ this is at apple“ ); System.out.println( “ this is a apple“ );,8,字符串對象的兩種生成形式 String name1= new String(“James Gosling”); String name1= “James Gosling”; 問題: 如何比較兩個字符串的長度?是用什么方法? 是.length()方法還是 .equals()方法? 他們分別能做什么? 注意:在equals( )方法定義中,只有接受Object類型的形參,才會在適用范圍上沒有局限。(不限于字符串) 問題: String name= new String100; 執(zhí)行后各元素的內(nèi)容是什么? 掌握String類型變量執(zhí)行方法后的內(nèi)容不變性。 了解基本類庫和標(biāo)準(zhǔn)類庫中各種包(見下頁解釋)的導(dǎo)入方法。(import 語句的用途) 知道包裝類的各種基本名稱、方法的使用及轉(zhuǎn)換。 自動包裝的概念:Int x=180;() 而Double d=3;(X) Byte x=253; ? 包裝類一般有靜態(tài)方法可用,而簡單變量呢?(了解),Chapter03 使用類和對象,9,了解隨機(jī)數(shù)生成器對象的創(chuàng)建和使用。 知道Math類的各種方法的基本用法。 了解格式化輸出的類的基本用法。,Chapter03 使用類和對象,10,Chapter04 定義類與方法(編寫類),類與方法:類中的變量有兩種: 實例變量: 跟著對象走, 不同對象有不同副本(要引用實例變量的話,必須標(biāo)明是哪個對象的) 實例變量在創(chuàng)建對象時由java初始化. 舉例:int型實例變量x在創(chuàng)建對象時被java初始化為0. 靜態(tài)變量: 跟著類定義走, 只有一個副本 靜態(tài)變量: 其值也是由java初始化(定義時). 方法: 分類: 有返回值方法(用return語句返回) 注意: 一般不能出現(xiàn)返回值和方法頭不一致的情況 和無返回值 (方法頭修飾符: void, 或稱為空方法) 調(diào)用方法: 靜態(tài)方法: 通過類名 ( 例如: Math.sqrt(33); ) 非靜態(tài)方法: 通過對象名,int mm(int l) return 99.99,只可以隱式轉(zhuǎn)換,return什么?變量?類名?,11,方法中的參數(shù):(形參不能用public、static等修飾) 原型類型-傳值 對象-傳址 調(diào)用方法時形參和實參類型不匹配時, java可以進(jìn)行自動類型轉(zhuǎn)換. (轉(zhuǎn)換順序是java默認(rèn)的規(guī)則) A方法調(diào)用一個具有返回值的B方法時,A必須用賦值語句,將B方法的返回值賦予A的某個變量嗎?(N) 方法中聲明的變量-局部變量 局部變量-只在方法體內(nèi)有效, java不自動給予初始化,使用時必須由程序員來進(jìn)行初始化. 塊中聲明的變量也是局部變量 信息隱藏和封裝-修飾符: this, public, private this: 表示當(dāng)前的對象 問題: 在main方法中是否可以有this.n出現(xiàn)? (假設(shè)n為靜態(tài)變量) (N) public: 對實例變量和方法的使用沒有限制(可以在類的定義體外使用),只能修飾實例變量和靜態(tài)變量,12,private: 對實例變量類定義體之外不能直接引用該變量. 對方法類定義體之外不能調(diào)用該方法 protected修飾符的基本屬性是什么? (了解) 比如對屬性的使用范圍的限制!子類是否可用?其他的類能否使用?(該修飾符的作用介于public和private之間),13,對象和引用: 類類型變量和原型變量的比較: 原型變量包含該變量的“值” 對象(類類型變量)只能存放該對象在內(nèi)存中的首地址 類類型變量在方法中作為參數(shù): 類類型變量作為參數(shù)出現(xiàn)時也是“傳值”, 而因為對象存儲的是內(nèi)存塊首地址, 所以其最終傳遞了“傳址”. (實參把“首地址”傳給了形參) 例如:數(shù)組名做方法參數(shù)時,與引用類型變量(類類型變量)做參數(shù)的實質(zhì)相同。 注意類類型變量中=和= =的使用 信息隱藏和封裝的基本思想是什么? 什么樣的做法算是信息隱藏, 封裝? (例如通過方法來訪問各種實例變量(簡單變量及對象), 各種修飾符的采用等等),14,掌握構(gòu)造方法的寫法及若干規(guī)定 構(gòu)造方法與一般方法的不同之處: 構(gòu)造方法與類名相同 Note that a constructor has no return type specified in the method header, not even void (構(gòu)造方法沒有返回類型的說明) 問題:本想寫一個構(gòu)造方法,但加上void修飾符,那之后的含義? 構(gòu)造方法可以不寫。Java則提供默認(rèn)的。 書寫一個類時可以自己不寫構(gòu)造方法。 問題: 構(gòu)造方法可以重載嗎?構(gòu)造方法可調(diào)用本類其他方法嗎? 一個構(gòu)造方法如何調(diào)用本類其他構(gòu)造寫法?this(參數(shù)表).,15,Chapter05/06 條件和循環(huán)語句,條件運算符的含義:y=(num1num2) ? num1:num2); 分支語句 if .else 布爾表達(dá)式: 注意=號的含義, 以及各種比較符號(=等) Java復(fù)合布爾表達(dá)式邏輯運算符號 (|, &等) 若score為double類型,則if(score = 90)結(jié)果? 字符串比較: equals方法 (比較兩串的字典順序) 多分支if else及switch語句(break語句在這里的含義, 缺省該語句的情況怎么辦? 例如:循環(huán)內(nèi)部含switch語句,而switch內(nèi)有的缺省有的不缺省,每次循環(huán)執(zhí)行switch時都不走同一路線,怎么辦?) Switch語句的控制表達(dá)式的結(jié)果的內(nèi)容要求 (什么類型? 4種) 循環(huán)語句 while, do-while, for break, continue, exit等語句的含義與用法 例: 在多重循環(huán)中執(zhí)行break結(jié)果是什么?是跳出所有循環(huán)的層次嗎? 又例:執(zhí)行continue的結(jié)果是跳出本次循環(huán)而重新開始嗎? 在循環(huán)語句中執(zhí)行return的結(jié)果是什么? 注意while()語句括號中的值為布爾變量, 為true或false.,16,continue 的基本意思:結(jié)束本次循環(huán),跳到哪里? break 的基本意思:跳出循環(huán)體(單重?多重的情況呢) return 的基本意思:跳出所有循環(huán),返回上級方法或系統(tǒng)。 布爾表達(dá)式及布爾變量 常用符號及運算優(yōu)先級規(guī)則(見附錄D) 布爾表達(dá)式的基本含義(到底用來干什么? ) 討論: 例如: int a=10,b=10,c=10; if(a+b)|(ac)System.out.println(“kkkkkk”); 結(jié)果? (答案: 能夠打印”kkkkkk”) 討論: 例如: int a = 5, b = -5, c = 20; if (c - 30) | (b- -5) & (a+ 5) 結(jié)果?各個變量值? (答案: 結(jié)果為“true”,且a=5,b=-5,c=19) 迭代器的概念:僅做參考,17,本章復(fù)習(xí)題目: 基本概念題(如上頁-可做選擇題目) 使用上述控制流語句等編寫程序: 寫出循環(huán)體的執(zhí)行結(jié)果。 問題:找出一個數(shù)據(jù)區(qū)域中滿足某種條件的數(shù)據(jù)。(熟練使用/, %等算術(shù)運算符) 數(shù)制的提取和運算(例如:尋找1000到1800之間的個位與十位之和為某個固定值的所有的數(shù)) 問題:如何計算得到其個位和十位等各個數(shù)位的值? 數(shù)列的階乘 例如: 1/n!-根據(jù)精度要求求出n的值 綜合一點的計算題目: 例如: 1+1/2!-1/4!+1/6!+(-1)n+1*1/(2n)! (涉及方法(帶參數(shù))的調(diào)用等),18,單純編寫程序題目: 問題1:水仙花數(shù)指三位數(shù)中每個數(shù)字的立方和與自身相等的數(shù)字。 例如: 數(shù)字370, 滿足3*3*3+7*7*7+0*0*0=370. 試輸出所有的水仙花數(shù)。 for(int i=100;i1000;i+) int a=i%10; int b=(i/10)%10; int c=i%100; if(a*a*a+b*b*b+c*c*c=i) system.out.println(i); 問題2:某些兩位整數(shù),該數(shù)的平方的最后兩位還是該整數(shù),求出所有兩位數(shù)中有此種特征的整數(shù)。 加上換行控制語句如何寫? 自己找題目練習(xí),也可參考當(dāng)時課堂練習(xí),19,涉及循環(huán)概念的單純的閱讀程序題目(掌握) 問題:for循環(huán)或while循環(huán)內(nèi)部:含switch語句等, default的位置出現(xiàn)在case之前,如何執(zhí)行? 此時的break語句的跳出范圍?,20,Chapter07 面向?qū)ο笤O(shè)計,方法的調(diào)用: 類名/對象名.方法名 this.方法名 (當(dāng)要調(diào)用的方法在同一個類中時, this可以省略) 靜態(tài)方法 修飾符: static 靜態(tài)方法可以不需要任何類型的對象而直接調(diào)用(類名.方法名) 靜態(tài)方法不能調(diào)用類中的實例變量 (即使是在main方法中也不行, 要調(diào)用的話必須創(chuàng)建對象, 并指明是哪個對象的實例變量) (問題: 在main方法中是否可以有this.n出現(xiàn)? (假設(shè)n為靜態(tài)實例變量) ) (N) 靜態(tài)方法不能調(diào)用類中的非靜態(tài)方法, 除非創(chuàng)建對象 靜態(tài)方法可以調(diào)用靜態(tài)方法 (同類方法可以互相調(diào)用) 非靜態(tài)方法可以調(diào)用靜態(tài)方法 (java的合理規(guī)定) 。,21,靜態(tài)變量 修飾符: static 靜態(tài)變量只有一個副本, 即使所在的類已經(jīng)創(chuàng)建多個對象也是如此. (靜態(tài)變量如果不設(shè)初值,則在定義時即由java自動賦予初始值,在方法中可以直接使用之) 靜態(tài)方法可以調(diào)用靜態(tài)變量。 注意:static 只能用來修飾類里的實例變量而不能用來修飾方法里的局部變量 回顧:Math類, Integer類及其他包裝類的基本意義 Math類的標(biāo)準(zhǔn)數(shù)學(xué)方法(圖5.9) 包裝類的基本含義和用途 重載 在同一個類中擁有一個以上相同名稱的方法定義, 稱為方法名稱重載 當(dāng)方法名稱被調(diào)用時, java根據(jù)參數(shù)的數(shù)量、類型、次序來判定應(yīng)該使用哪個定義 方法調(diào)用時的參數(shù)可以進(jìn)行自動類型轉(zhuǎn)換(轉(zhuǎn)換原則是隱式的由低到高原則),但要慎用,因為有時會引起混亂. 無法根據(jù)返回值的類型來實現(xiàn)重載!(什么意思? 搞明白!),22,構(gòu)造函數(shù)及編寫時的約定: 構(gòu)造函數(shù)是在 (利用new) 創(chuàng)建對象時所調(diào)用的一種方法, 一般用來初始化對象中的實例變量 程序員沒有編寫任何構(gòu)造函數(shù)(沒有顯式定義), java將自動提供默認(rèn)的構(gòu)造函數(shù) 程序員一旦自己編寫構(gòu)造函數(shù), java不再自動提供任何默認(rèn)的構(gòu)造函數(shù) 程序員一旦自己編寫構(gòu)造函數(shù), 則必須自己寫出一個默認(rèn)的構(gòu)造函數(shù), 否則一旦使用默認(rèn)函數(shù)時java將報錯 . 構(gòu)造函數(shù)中可以使用/調(diào)用該類定義中的其他方法. 使用new 語句創(chuàng)建對象時,自動調(diào)用構(gòu)造函數(shù)(若構(gòu)造函數(shù)有println語句,則在屏幕上會有輸出內(nèi)容) 用new語句創(chuàng)建一個子類對象時,怎樣創(chuàng)建父類對象?(答:首先創(chuàng)建父類對象,要么顯式的寫出來,要么系統(tǒng)首先自動創(chuàng)建(調(diào)用默認(rèn)super()創(chuàng)建父類對象) 構(gòu)造方法的作用域標(biāo)識符必須是public嗎? 構(gòu)造方法的形參個數(shù)有限制嗎?,23,包的使用(進(jìn)一步說明)(了解) 定義在同一個包(package)內(nèi)的類可以不經(jīng)過import而直接相互使用。 使用import語句指明要引用的源程序的路徑, 主要是指明程序中要使用的類和包。 而不是要引用該包的全部源程序. 也不是直接拷貝過來 同一個包中的各個類,其類名可以相同嗎? (了解),24,Packages (包的概念) (僅了解),起因: 目前編寫程序時, 一個類一個文件, 以后的大程序可能有很多文件(類), 放在同一個文件夾里面查找很麻煩,也可能用到別人寫的文件(類)集合, 于是有重名的問題等等 舉例: 自己的文件放在 d:/work/software/test01文件夾中, 別人的放在 d:/work/software/test02文件夾中. 要是使用別人的文件或類, 需要: 在對方的類中聲明 package test02 在自己的類的聲明 import test02.* 或import test02.文件名 類路徑基目錄: d:/work/software (基本的目錄層次) 當(dāng)前目錄: 是包的名稱. 包: 是分組到同一個目錄中的許多類的集合,25,掌握接口的基本含義(掌握) 接口的繼承使用extends. 接口可以繼承嗎?是單繼承還是多繼承?(單繼承) 一個類可以實現(xiàn)多個接口嗎?(Y) Java的接口只能有抽象方法嗎?(N)(還可以有屬性) 了解Comparable接口, Iterator接口等基本含義。 了解枚舉類型,26,Chapter08 數(shù) 組,創(chuàng)建數(shù)組格式: Base_Type Array_Name = new Base_TypeLength; 數(shù)組下標(biāo)從0開始 數(shù)組的可選的初始化方法(可以聲明時用花括號, 也可以用程序) 可選的數(shù)組初始化方法 (掌握數(shù)組的正確的定義方法) Object oob=new int 8,9,10; int a=(int)oob; float s=new int10; X(錯誤性質(zhì):讓編譯器自動將一個整型數(shù)組轉(zhuǎn)換成為一個浮點型數(shù)組,而java編譯器無此能力) 問題:int a=a,10,123 合法嗎?(Y) 數(shù)組對象的實例變量-length的使用: for(i=0;im.length;i+),27,Chapter08 數(shù) 組,知道數(shù)組在類與方法中的應(yīng)用 數(shù)組可以當(dāng)實例變量 數(shù)組元素當(dāng)方法參數(shù) 數(shù)組名當(dāng)方法參數(shù) 方法可以返回數(shù)組名,28,main方法的參數(shù)(命令行式的參數(shù)傳遞)(了解) 方法main采用String類型的數(shù)組作為參數(shù): public static void main(String args) 舉例: 命令行: Java TestProgram Josephine Student 則args數(shù)組的賦值? 簡單問題:命令行參數(shù)是字符串類型嗎? 此處void 可以是別的嗎? 類里面可以有Main()方法嗎? 注意: 數(shù)組作為對象, 使用=和=時如同對一般對象 多維數(shù)組的基本定義方法 (會定義) 了解:循環(huán)語句處理數(shù)組的基本技巧 使用循環(huán)語句處理數(shù)組很合適: 一重for循環(huán)可以處理一維數(shù)組, 二重for循環(huán)可處理二維數(shù)組 例如:二維數(shù)組元素的有條件填充、讀取和處理變換等,29,數(shù)組的排序(sort array of numbers in the ascending or descending order ) -掌握 掌握:課件中的方法(一個方法內(nèi)解決): public void seletionSort( int a ) 問題:若數(shù)組a是對象數(shù)組,而按照每個對象的某種特征或某方法運行結(jié)果排序的話,有如何做呢? 了解:本書中帶接口的較通用的寫法。(僅了解) 數(shù)組的查找(search method) -了解 掌握:課件中的方法(一個方法內(nèi)解決): public int binarySearch(int number,int searchValue) 折半查找見其他教材和參考書的解法。 遞歸式的解法。 基本了解:本書中帶接口的較通用的寫法。,30,Java中, 多維數(shù)組是利用一維數(shù)組實現(xiàn)的 多維數(shù)組的每一維是對前一維的劃分,如:二維數(shù)組的第二維是對第一維的進(jìn)一步劃分 問題:int b = new int3;合法? 含義:二維數(shù)組中,每行的長度不是必須相同 二維數(shù)組的length屬性的含義? 問題:int b = new int3;合法?,31,Chapter09 繼 承,繼承的概念: 繼承允許我們先定義一個很通用的類(基類), 然后通過添加細(xì)節(jié)定義出較專用的類(派生類) 派生類對基類的繼承性(包括實例變量和方法). 派生類的添加性(也包括實例變量和方法). 繼承實際上經(jīng)常性的包含了方法的覆蓋,覆蓋解決了子類和父類之間的重名問題。 派生類的構(gòu)造函數(shù) Use super to invoke a constructor in parent class 一般用來初始化哪里的實例變量? 合理的派生類構(gòu)造函數(shù)應(yīng)該怎樣初始化各個實例變量? 怎么樣初始化基類的實例變量, 怎么樣初始化派生類自己的實例變量? Use super to invoke a common method in base class(使用super可調(diào)用基類的一個普通方法,或者一個被派生類覆蓋的方法) Use this to invoke a constructor within the class 爭議的問題:派生類繼承父類的構(gòu)造函數(shù)嗎?(No ?。?32,掌握:super的使用問題: 如果在子類構(gòu)造方法中使用super()關(guān)鍵字,必須放在開始之處嗎?此時的super()做什么? 創(chuàng)建子類的對象時,實際是首先運行子類自身的構(gòu)造方法嗎? 子類不使用super關(guān)鍵字調(diào)用父類的構(gòu)造方法時會是什么情況呢? 注意事項(掌握) super指向父類對象,僅在子類的方法中調(diào)用父類方法時使用。 但是在一個類的靜態(tài)方法(如main方法)中,不能夠使用super關(guān)鍵字調(diào)用父類的方法。因為super的使用隱含一個匿名對象.,33,覆蓋: 在派生類中, 若一個方法定義與基類中已有的某個方法擁有同樣的名稱, 參數(shù)數(shù)目及類型, 則稱為覆蓋 覆蓋的過程:創(chuàng)建派生類對象后, 調(diào)用被覆蓋的方法時, 調(diào)用的是派生類自己的方法 例如:原教材圖7.13(畫字符圖形的程序) (了解呵呵) Triangle top = new Triangle(indent, topWidth); Box base = new Box(indent + (topWidth/2) - (bottomWidth/2), bottomHeight, bottomWidth) top.drawAt(1); base.drawAt(0); 注意:方法drawAt()是基類方法而不是子類方法,該方法里面要執(zhí)行方法drawHere( ),而這個方法在基類和子類都存在,那么在執(zhí)行上述top.drawAt(1)方法時執(zhí)行的是哪一個drawHere( ) ? ( 答案: 因為top是派生類對象,所以仍然執(zhí)行派生類的方法drawHere( ) ) 假設(shè)top是Figure類型,若將其指向子類,那又怎樣?,Figure: 圖形,Box 矩形,Triangle三角形,34,注意: 定義覆蓋方法的時候, 不能修改方法的返回類型. 例如方法名及參數(shù)相同, 但方法頭分別是int和double返回值的兩個覆蓋方法的定義, 編譯器會報錯. (結(jié)論:無法單純根據(jù)返回值的類型來實現(xiàn)覆蓋!) final 的含義: 修飾屬性:該屬性不能使用程序語句來改變。(定義時一般賦初值,可視作常量) 修飾方法: 該方法不能在子類中被覆蓋。 修飾類名: 該類不能被繼承。 問題:final可以修飾什么?能禁止本類之內(nèi)的重載嗎?(N) static和final同時修飾一個屬性時,必須賦初值嗎? (N) 派生類的類型 派生類對象屬于所有的祖先類型, 故能擁有多個類型 左邊祖先類對象=右邊派生類對象 /合法 舉例: Person p1=new person(); Student s1=new student(); 則語句:p1=s1; /valid 而語句:s1=p1; /invalid,35,Object類-所有類的祖先. (那么,它是接口的祖先嗎?) Object類的含義、用途等。(該類中equals(),toString()等方法的原意?) Object類是異常類的祖先嗎?(Y) 舉例:Object x ; x=“abc”; /合法: 左邊祖先類對象=右邊派生類對象 問題:tostring ( )方法繼承自O(shè)bject,能否在子類中定義方法如tostring(int a,int b)?。(Y) 抽象(abstract)方法和抽象類 抽象方法: 某些方法并不打算實際應(yīng)用,僅僅打算有派生類覆蓋, 且有派生類的對象調(diào)用.則可以聲明為抽象方法. 那么,抽象方法僅包含什么?不包含什么? 抽象類: 若類中至少有一個抽象方法, 則該類必須聲明為抽象類 (反過來問:抽象類可以不包含抽象方法嗎?(Y)) 問題0:抽象類的構(gòu)造方法(構(gòu)造器)寫不寫?怎么寫? 問題1:abstract類中是否可以有別的非abstract方法? 問題2:abstract方法在其子類中是否必須被實現(xiàn)? 問題3:abstract可以修飾什么? 問題4:abstract修飾的類有祖先類嗎?是Object的子類嗎?,36,Dynamic Binding與Polymorphism variable的提法: 各種文獻(xiàn)解釋有側(cè)重, 但無論如何都是指在運行時間(run time)確定最終運行的程序?qū)嶓w和對象可具有多個類型.,37,動態(tài)綁定舉例:在運行時才確定最終跳轉(zhuǎn)地址的現(xiàn)象稱為動態(tài)綁定(動態(tài)覆蓋技術(shù)) (掌握 !) class Z void f(int x) void f(double x) class P extends Z void f(int x) void f(double x) void f(long x) public class TestOverride public static void main(String args) Z t = new P(); t.f(10); t.f(10L); t.f(2.5); 注意上述例題的類型隱式轉(zhuǎn)換問題, 若不能隱式轉(zhuǎn)換則由java報錯,變量類型決定能調(diào)用的方法(根據(jù)自身定義),對象決定使用哪個方法(根據(jù)現(xiàn)在的指向),38,實際程序設(shè)計問題(最全面的情況,得知道,結(jié)合12年考試題) 設(shè)計和完善一個抽象類 / 普通類時:構(gòu)造方法都寫什么? 派生類如何初始化父類的各種屬性 / 實例變量? 能夠完成子類的構(gòu)造方法。 以上三個問題其實是一個,得根據(jù)main方法中創(chuàng)建對象的需要來設(shè)計基類(哪怕此時是一個抽象類)和派生類。 構(gòu)造方法一般只寫一個。 能夠在子類內(nèi)部實現(xiàn)父類的抽象方法。 數(shù)據(jù)集合(數(shù)組)的各個元素分別指向不同的子類對象時,該數(shù)據(jù)集合如何定義?(見右下圖) Figure s=new Figure10; Figure 0 = new Box(2, 20); 。,Figure: 圖形,Box 矩形,Triangle三角形,39,實際程序設(shè)計問題(一般情況)(掌握) 設(shè)計和完善一個父類(抽象類 / 普通類)的某些方法如get()等。 派生類的設(shè)計:如何初始化父類的各種屬性 / 實例變量? 能夠完成子類的構(gòu)造方法。(帶參,不帶參的) 構(gòu)造方法一般只寫一個或兩個。 子類除了構(gòu)造方法外,還能夠?qū)崿F(xiàn)父類的抽象方法。 對類類型組成的集合(如數(shù)組)進(jìn)行某種操作。,40,弄清多態(tài)和動態(tài)綁定的概念。 對象可以有多種類型的具體化: 左邊祖先類對象=右邊派生類對象 實際的問題:如果使用父類的引用指向子類的對象,那么可以直接使用此引用調(diào)用子類的所有方法嗎?(N) 僅了解:利用接口實現(xiàn)多態(tài)性 基本問題:java中一個類是否可以實現(xiàn)多個接口? java中一個類是否可以同時繼承一個類和實現(xiàn)其他接口?一個接口是否可以繼承自另外一個接口? 基本問題: java的單繼承有什么好處?(其中:無論是一般類還是抽象類,都是單繼承?。?排序:掌握課件的“一個方法內(nèi)解決問題”。的寫法 或課本中:listing9.9的寫法。 查找:了解折半查找的各種實現(xiàn)方法的寫法。,Chapter10 多態(tài)性,41,關(guān)于書寫程序:必須掌握書寫一個類的基本寫法:,問題: 有一個不完整的基類,能否填寫一個基類的set()和get()方法?(可以完成對所有實例變量的“set”,包括簡單類型和類類型) 有一個不完整的派生類(下頁右圖Box),能否根據(jù)語義填寫該類的方法 (必要的構(gòu)造方法和其他方法?) 假設(shè)有一個Personnel類(員工)的數(shù)組s(Personnel s) , 其元素包含了正式工, 臨時工, 鐘點工 等派生類型的對象, 試寫一排序程序, 使s中的所有員工檔案按工齡長短 重新排列順序. (掌握 ?。?public void sort(Personnel s) (基本思路是什么?),Personnel: 員工,正式工,臨時工,鐘點工,42,意義:通用性-順延的命題-數(shù)組中對象的排序問題 假設(shè)有一個Figure類的數(shù)組s(Figure s) , 其元素包含了Box, Triangle, Circle, 等類型的對象, 試寫一排序程序, 使s中的所有形狀按周長(round) 大小進(jìn)行某種順序排列. (掌握) public void sort(Figure s) (那么,其基本思路是什么?)(掌握),Figure: 圖形,Box 矩形,Triangle三角形,43,Chapter11 異 常 處 理,Java中的異常處理語法: try-throw-catch 掌握java異常處理的流程 注意: catch語句塊只應(yīng)用于緊貼其前的try語句塊 注意: 異常是一個對象, 而Exception類是所有異常類的根類, 是最通用的異常類. 可以自己定義異常類 異常的聲明和轉(zhuǎn)移 當(dāng)本方法只拋出異常但又不處理, 則必須在方法頭用throws語句(非throw)進(jìn)行聲明, 讓上級方法來捕獲處理. 編寫異常處理程序時, 特殊異常處理在先, 一般異常處理在后, 否則? 異常的分類: Exception類是通用異常類, 而ArithmeticException異常是變量做分母時其值為0而產(chǎn)生的算術(shù)運算異常,而IOException是輸入輸出(例如文件操作)時的異常, 還有FileNotFoundException等等 .,44,注意:忽視(ignore)異常處理的結(jié)果是什么? 若java程序聲明了異常, 但整個程序忽略了處理, 也沒有拋給java系統(tǒng), 則編譯報錯! (文件處理時經(jīng)常遇到。) 說明1: try-throw-catch 結(jié)構(gòu)中的throw語句的用法 課本的示例程序是人為設(shè)計的, 用了throw語句, 實際程序中可能只有try-catch結(jié)構(gòu), 此時若在try語句塊中出現(xiàn)異常, 一樣被java拋出并被catch語句塊捕獲并處理 finally語句塊的執(zhí)行原則: 只要進(jìn)了try-catch-finally Block, 即使沒有異常, 也執(zhí)行finally-block 在try-catch-finally Block, 有異常并捕獲, 執(zhí)行finally-block 在try-catch-finally Block, 有異常沒有被捕獲, 也執(zhí)行finally-block 通過練習(xí)增進(jìn)對finally語句塊的理解 參見習(xí)題課中關(guān)于異常的練習(xí)題(三次習(xí)題課其中的第3次),45,finally語句塊的執(zhí)行示例 (掌握!) void mm() throws SomeException try if(條件) throw new SomeException(); 。 return 表達(dá)式; catch ( AnotherException e) . finally System.out.println(“finally”); 問題1: 若滿足if中的條件,拋出SomeException異常,則執(zhí)行順序?不出現(xiàn)該異常時的執(zhí)行次序? 問題2: 若if未滿足,只執(zhí)行return語句,那么執(zhí)行順序?若本句有異常,且被就地?fù)渥?,則順序? 問題3: 若return語句出現(xiàn)在catch語句塊的最后, 假設(shè)異常被捕捉,那么其執(zhí)行次序是什么?,46,問題4: int number = Integer.parseInt(scoreindex+);會產(chǎn)生說明類型的異常? 格式錯誤;越界錯誤。 問題5:異常被捕捉,則finally板塊之后的return語句如何執(zhí)行?(正常執(zhí)行返回!),47,關(guān)于所有不可檢測異常(都來自RuntimeException類及其子類)的說明: (掌握) 不可檢測異??梢圆徊蹲剑ú挥胻rycatch結(jié)構(gòu)),不聲明(不用throws語句來聲明 ) 問題1:是否可定義一RuntimeException類的子類?(Y) 問題2:即使在方法調(diào)用時沒有自己拋出異常,則是否可在方法中用throws語句來聲明和標(biāo)識異常? (Y)(即:定義了方法可能拋出的異常,不意味著一定拋出異常) 問題3:catch和finally段中的語句,是否允許再次出現(xiàn)異常?(Y)(甚至可以再出現(xiàn)try catch結(jié)構(gòu)) 簡單問題: 創(chuàng)建異常對象(帶有表示提示信息的參數(shù))然后拋出,捕捉后怎樣顯示該異常對象的信息?(用什么方法?) 拋出異常意味著有運行錯誤嗎? try關(guān)鍵字可以單獨使用嗎?(N)(try或與catch關(guān)鍵字或與finally關(guān)鍵字一起使用),48,異常的習(xí)題練習(xí)(掌握) 熟悉各種基本的異常類的類型。 研究習(xí)題課中的范例及其本課件提出的若干問題。 自己尋找相應(yīng)題目聯(lián)系。,49,Chapter11+ 流與文件I/O (了解),概念: 流是一種對象, 用于數(shù)據(jù)流動,它可以把數(shù)據(jù)輸出到目標(biāo), 也可以從數(shù)據(jù)源輸入或讀取數(shù)據(jù) 輸入流, 輸出流的概念 Text File I/O: (了解文本文件的輸出) PrintWriter outFile = new PrintWriter(new BufferedWriter (new FileWriter (“test.dat“); 總的含義: 打開文件“test.dat“準(zhǔn)備輸出. 輸出到文本文件: outFile.println(); 關(guān)閉文本文件:outFile.close(); 注意異常: FileNotFoundException,50,了解:文本文件的輸入(listing 5.11) 了解:文本文件的輸出(主要掌握第十章的Listing10.7) 注意: 不會單獨考察文件操作, 一般結(jié)合其他的計算問題, 例如從鍵盤讀入數(shù)據(jù)并計算, 或把計算及處理結(jié)果寫入文件, 等等. 參見習(xí)題課中關(guān)于文本文件的練習(xí)題 一般性問題: (掌握文件操作的基本原理) File類能對文件進(jìn)行讀寫操作嗎?是基本類嗎? 文本文件和二進(jìn)制文件,讀到文件末尾分別會有什么不同? Java可以把文本文件當(dāng)成一般二進(jìn)制文件進(jìn)行操作嗎?,51,Chapter12 遞 歸 (掌握?。?遞歸的基本概念. 遞歸: 方法定義中包含對自己的調(diào)用. 遞歸方法中的一個語句塊(選擇)應(yīng)該不調(diào)用本身, 而應(yīng)該是直接結(jié)果. 而每次調(diào)用本身必須“smaller version of itself” ,這樣才可能達(dá)到中止條件 能夠?qū)懖惶珡?fù)雜的遞歸方法. 先寫出遞歸調(diào)用主體 再寫出遞歸的停止情況 通常有if-else語句 參照、掌握課堂講解的內(nèi)容. (當(dāng)時的習(xí)題課練習(xí)等) 深入分析遞歸過程,完全掌握課堂講解的內(nèi)容, 達(dá)到習(xí)題課上對遞歸問題寫作方法的要求, 能將以前章節(jié)的某些算法改寫成遞歸算法。 (可以自己尋找一些題目進(jìn)行練 習(xí)) 問題1:遞歸調(diào)用可以放在return語句中來實現(xiàn)。 問題2:遞歸放置在多重循環(huán)中時,就執(zhí)行很多次。,52,Chapter12 遞 歸 (掌握?。?遞歸的應(yīng)用. 注意:所有的Java遞歸程序,都可以使用循環(huán)等非遞歸程序等價實現(xiàn)。 舉例: private static int tot = 1; public static int num(int mm) if 條件 XXXX; else tot=XXXXXX; num(mm); (假設(shè)此處在if-else結(jié)構(gòu)里面) return tot; (假設(shè)此處在if-else結(jié)構(gòu)之外) 問題:當(dāng)上述方法被調(diào)用時,返回的tot的值?(返回多次,但最后的值是唯一一個),53,Chapter13 集合 (掌握 !),13.XX 鏈表 看懂結(jié)點類(10.4 ListNode)和鏈表類(10.5StringLinkedList)以及(10.8LinkedListDemo)的基本定義及含義,掌握鏈表類程序(10.11StringLinkedListWithIterator)的主要方法。 掌握鏈表類中各種基本方法的實現(xiàn) length() addANodeToStart(String addData) deleteHeadNode( ) Find(String target) showList() 等方法的具體寫法 . 思考:對已經(jīng)存在的鏈表執(zhí)行某種操作(例如: (1)讀出鏈表數(shù)據(jù)進(jìn)行排序. (2)遍歷鏈表, 依次將符合條件的節(jié)點數(shù)據(jù)存入一個數(shù)據(jù)結(jié)構(gòu)或文本文件等. (3)在無序的舊鏈表基礎(chǔ)上建立一個有序的新鏈表. (3)針對已有有序鏈表,改為反序或反順序輸出結(jié)點數(shù)據(jù)內(nèi)容等) 內(nèi)部類和迭代器-知道課堂簡介,54,接上頁: “鏈表內(nèi)容存入文本文件”的基本思路?(基本了解)(回答同學(xué)提問,僅做了解?。?主要參考第十章的listing10.7的結(jié)構(gòu) 步驟: 1. 創(chuàng)建輸出流對象, 打開文本文件 (可使用trycatch結(jié)構(gòu)捕捉異常)(捕捉異常的結(jié)構(gòu)見郵件中TextFileOutputDemo.java) 2. position=head; 用遍歷的方法找出每一個data . 用 “流對象.println()”方法寫入文件. 3. 最后關(guān)閉文件等. 遍歷鏈表,將某些內(nèi)容存入其他數(shù)據(jù)結(jié)構(gòu)呢?(了解?。?55,(掌握)推薦鏈表類程序: StringLinkedListWithIterator.java 含有內(nèi)部類,因此各個方法都重寫,涉及實例變量的使用方式。 插入一個節(jié)點不再僅是一種方法,本程序提供了兩種節(jié)點插入方法:(1)在鏈表的第一個節(jié)點之前插入新節(jié)點; (2)在某個節(jié)點后面插入新的節(jié)點。 問題:鏈表已有序,如何在鏈表中某個特定節(jié)點后面插入新節(jié)點? 含有迭代器式的處理模式:例如在方法length()里面有 “position = position.link;” 語句。 刪除節(jié)點也新的更切合實際的方法設(shè)計: deleteCurrentNode( )-刪除當(dāng)前節(jié)點;如何刪除的?具體思路是什么? 問題:如何在鏈表中某個特征節(jié)點后面刪除新節(jié)點?,實際問題有很多變化:掌握! 同時注意研究該程序(StringLinkedListWithIterator.java)的其他方法。很多方法也是基本方法,實際編程時要求有很多變化。例如:在具有某個數(shù)據(jù)特征的節(jié)點后面插入節(jié)點,或發(fā)現(xiàn)兩個特有的節(jié)點并交換其數(shù)值。 有時除了head之外,還要定義ListNode類型的其他變量,例如previous或current等。 注意寫一個方法時的邊界條件:空鏈表,只有一個節(jié)點,或沒有找到某個特征節(jié)點的情況等等。,56,57,問 題 答 疑 注: 本解答并非與考題有直接關(guān)系, 只是根據(jù)學(xué)生提問整理而成,(1): 數(shù)組定義: int a =new int15; int a=new int15; 哪個正確? 答: 都可以. 編譯器將接受上述兩種表示方法. (2): 基類方法為public int a(int x, int y); 派生類方法為int a(int x, int y); 可以這樣覆蓋嗎? 答: 不可以. 方法覆蓋時必須修飾符完全一致 這種寫法實際上是縮小了方法的使用權(quán)限(在目前學(xué)習(xí)階段沒有縮小權(quán)限,但在使用包的情況下權(quán)限將縮小) (3):基類方法為public int a(int x, int y); 派生類方法為public void a(int x, int y); 可以這樣實現(xiàn) 覆蓋方法嗎? 答: 不可以. 編譯將報錯,因為這既不是方法的重載(譯文版教材: 無法根據(jù)返回值的類型來實現(xiàn)重載), 也不是方法的覆蓋(方法名之前的修飾符要完全一致, 方法名之后的參數(shù)數(shù)目, 類型要完全一樣 ),58,(4): 若在派生類中自己編寫缺省構(gòu)造函數(shù), 而在里面又只初始化了部分的實例變量, 那么另外的實例變量的值是否還被自動初始化? 答: 現(xiàn)在版本的java仍將對缺省構(gòu)造函數(shù)中未能涉及到的實例變量進(jìn)行初始化。 例如:某個類PetRecord有三個實例
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報立項書怎么寫
- 課題結(jié)題申報書范文
- 籃球課題申報書
- 產(chǎn)權(quán)保護(hù)合同范本
- 法醫(yī)類的課題申報書
- 教學(xué)課題項目申報書樣板
- 合同范本搜索平臺
- 五金標(biāo)準(zhǔn)件合同范本
- 德育研究課題申報書模板
- 醫(yī)院廚房外包合同范本
- DL-T 736-2021 農(nóng)村電網(wǎng)剩余電流動作保護(hù)器安裝運行規(guī)程
- SB/T 10439-2007醬腌菜
- GB/T 33644-2017數(shù)控板料折彎機(jī)精度
- GB/T 32434-2015塑料管材和管件燃?xì)夂徒o水輸配系統(tǒng)用聚乙烯(PE)管材及管件的熱熔對接程序
- GB/T 17888.3-2020機(jī)械安全接近機(jī)械的固定設(shè)施第3部分:樓梯、階梯和護(hù)欄
- 產(chǎn)品質(zhì)量承諾及保障措施-產(chǎn)品質(zhì)量承諾
- 高考語文文化常識之天文歷法課件
- 長短樁組合樁基礎(chǔ)的分析
- 《英語閱讀4》課程教案(下)
- 金壇區(qū)蘇科版二年級心理健康教育第1課《我喜歡我自己》課件(定稿)
- ava標(biāo)準(zhǔn)錄播教室應(yīng)用解決方案
評論
0/150
提交評論