日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

使用java实现面向对象编程

發(fā)布時(shí)間:2024/1/18 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用java实现面向对象编程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ??第一章:抽象和封裝 學(xué)習(xí)面向?qū)ο?#xff0c;理解其中的概念只是前提,靈活應(yīng)用才是目的 面向?qū)ο缶幊瘫容^抽象,想要真正掌握,需要一個(gè)漫長,積累經(jīng)驗(yàn)的的過程,在學(xué)習(xí)中不能操之過急,要多思考,多總結(jié),遇到問題盡量自己解決?
面向過程的的核心是函數(shù),以功能為中心,實(shí)現(xiàn)了函數(shù)級(jí)別的代碼重用, 面向?qū)ο?/span>的核心是封裝了屬性和方法的,以數(shù)據(jù)為中心,實(shí)現(xiàn)了類級(jí)別的代碼重用,面向?qū)ο笠驗(yàn)椴捎昧祟?#xff0c;所以具有繼承和多態(tài)性
面向?qū)ο笤O(shè)計(jì)的過程就是抽象的過程,分以下三步來完成 第一步:發(fā)現(xiàn)類 第二步:發(fā)現(xiàn)類的屬性 第三步:發(fā)現(xiàn)類的方法
面向?qū)ο蟮娜筇匦?#xff1a; 封裝、繼承、多態(tài),還有一個(gè)抽象(應(yīng)該是指類) 類(class)和對象(object)是面向?qū)ο笾械膬蓚€(gè)核心概念: 類是對一類事物的描述, 是抽象的,對象是實(shí)際存在的,是具體的; 類和對象就好比模具和鑄件的關(guān)系; 一個(gè)類可以實(shí)例化多個(gè)對象,而一個(gè)對象只能屬于一個(gè)類 類主要由屬性和行為組成,屬性和行為又稱為類的成員變量和成員方法 統(tǒng)稱為類的成員(除此之外,類的成員的還包括構(gòu)造方法,代碼塊{}
封裝:將類的狀態(tài)信息隱藏在類的內(nèi)部,不允許外部程序直接訪問, ? ? ?而通過該類提供的方法來實(shí)現(xiàn)對隱藏信息的操作和訪問
? ? ?像stu.age=200;是不允許的,這個(gè)時(shí)候就要把字段age封裝起來 ? ? ? ,使用getter和setter方法封裝字段 ==》步驟:將字段私有化,接下來按右鍵,選擇源代碼(source)--> ? ? ? 選擇生成getter和setter ==》好處:可以方便的加入存取控制語句,限制不合理操作 訪問修飾符: private:只可在本類中訪問 public: 默認(rèn):只能被同一個(gè)包里的類訪問 protected 能被同一個(gè)包里的類訪問,也可以被不同包中的子類訪問
屬性 方法 代碼塊,內(nèi)部類 可用static 修飾,但不能修飾普通類 static{ ????????//類的靜態(tài)修飾的代碼塊,只在最初調(diào)用一次 ????????System.out.println("該類Circle是由我完成編寫!"); ????}??
static : ?數(shù)據(jù)在整個(gè)程序中只有一個(gè)空間,大家共享 ? ? ? ? 通常把 static ?修飾的屬性和方法稱為 類屬性 類方法, ? ? ? ? 沒用 static ?修飾的 屬性和方法稱為 實(shí)例屬性 實(shí)例方法 ? ? ? ? ? 被申明為static的屬性方法代碼塊 ? ? ? ? 先于實(shí)例化的對象而存在,而且是貫穿整個(gè)程序 ? ? ? ? 不可以修飾類和局部變量 ? ? ? ? 在加載類的過程中,先完成靜態(tài)變量的內(nèi)存分配,再執(zhí)行靜態(tài)塊 ? ? ? ? 靜態(tài)的屬性或方法可以通過類名或?qū)ο竺L問? ? ? ? ? 靜態(tài)的方法中不能使用 this super 關(guān)鍵字 常量:全部大寫
類名:每個(gè)單詞首字母大寫 屬性名和方法名:第一個(gè)單詞首字母小寫其余首字母大寫
構(gòu)造方法(Constructor)及其重載: 構(gòu)造方法: 名稱和類名相同,沒有返回值類型, 如果寫了返回值,等同于一般的方法 構(gòu)造方法的主要作用就是在創(chuàng)建對象時(shí),執(zhí)行一些初始化操作 面試題常考要注意:構(gòu)造方法不能被繼承,所以不能被重寫 還要答出什么是構(gòu)造器
public?class?Circle?{? ? ? private ? double ?r; ? ?? public? Circle? (){} ? //無參構(gòu)造函數(shù) ? ? public ?Circle( double ?r){? ?//帶參構(gòu)造函數(shù) ????????this.r?=?r; ????} ? //無參構(gòu)造函數(shù)與帶參構(gòu)造函數(shù)形成重載關(guān)系
}??
//注意:當(dāng)類中一個(gè)構(gòu)造函數(shù)也沒有的時(shí)候,系統(tǒng)會(huì)默認(rèn)提供一個(gè)空的構(gòu)造函數(shù),以上面的例子
?public?Circle?(){}
//但是如果類中已經(jīng)寫了帶參構(gòu)造函數(shù)時(shí),默認(rèn)提供的構(gòu)造函數(shù)會(huì)消失 //所以最好將無參構(gòu)造函數(shù)和有參構(gòu)造函數(shù)一起寫 重載:
在同一個(gè)類中,方法名相同,參數(shù)列表不同的方法形成重載。 與方法返回值和方法修飾符無關(guān)。 在使用this調(diào)用自身的其他構(gòu)造方法時(shí),只能做第一條非注釋語句。 就像這樣: public?class?Person{ ????private?static??String?name; ????private?static??int?age; ????public? Person ()?{ ????????this(name,age);// 只能做第一條非注釋語句 ????} ????public? Person (String?name,? int ?age)?{ ????????this.name?=?name; ????????this.age?=?age; ????} }??
??第二章: ?繼承 inheritance ?:繼承
constructor:構(gòu)造器 abstract:抽象 override:覆蓋、重寫 overload:重載 繼承(inheritance)是Java OOP中一個(gè)非常重要的概念。繼承是在復(fù)用已存在的類的方法和屬性 的基礎(chǔ)上,還可以添加新的方法和屬性 Java用extends關(guān)鍵字來表示繼承關(guān)系(is-a)。被繼承的類稱為超類(superclass)、基類(base class)、父類(parent class),而新類被稱為子類(subclass)、派生類(derived class)或孩子類(child class)。 java支持單繼承支持多實(shí)現(xiàn)

例如:

Manager?is a?Employee

class?Manager?extends?Employee{ ? ? ? super (); 默認(rèn)調(diào)用父類的構(gòu)造方法,加不加都一樣 ? ? ? ?//Manager?類繼承Employee類,同時(shí)添加新的方法? ? ? ? //setBonus和新的屬性 bonus ??????public?void?setBonus(double?s){ ????????????bonus?=?s; ??????} ? ? ? ??????private?double?bonus;? } ??

1. 子類方法覆蓋(override)超類方法

假設(shè)Manager類繼承于Employee類,Employee有name、salary和hireDay三個(gè)屬性,Manager又新增了bonus一個(gè)屬性。Employee有方法getSalary(),現(xiàn)在Manager的計(jì)算薪水的方式不一樣,需要重寫getSalary(),以覆蓋Employee類的此方法。

需要注意的是子類不能直接訪問超類的私有屬性(假設(shè)salary為私有屬性),

那么就不能使用下面這種方法:

public?double?getSalary(){ ??????return?salary?+?bonus;?//error.?salary?不能被訪問到 }??

Java利用另一個(gè)方法解決上面這個(gè)問題,即使用超類的方法獲取屬性的值。

public?double?getSalary(){ ??????return?super.getSalary()?+?bonus;? //super.方法名 } ??

注釋: super不能把它覆給另一個(gè)對象變量,

? ? ? ?它只是一個(gè)指示編譯器調(diào)用超類方法的特有關(guān)鍵字。

? ? ? ?super的另一個(gè)應(yīng)用就是在構(gòu)造器中。子類構(gòu)造器需要調(diào)用超類的某些構(gòu)造器

? ? ? ?以初始化一些超類的屬性(尤其是私有屬性)。

public?Manager(String?n,?double?s,?int?year,?int?month,?int?day){ ???????//父類已經(jīng)做完了,子類不必再做了 ??????super(n,?s,?year,?month,?day); ??????bonus?=?0; }?? ??

2.? 繼承層次

由一個(gè)公共超類派生出來的所有類的集合被稱為繼承層次(inheritance hierarchy),

在繼承層次中由某個(gè)特定類到其祖先的路徑被稱為該類的繼承鏈(inheritance chain)。

重寫與重載有什么區(qū)別和聯(lián)系:

重載:要求方法名相同,參數(shù)列表不同即可

重寫:方法名、參數(shù)列表、返回值類型相同(或是其子類,這里指的是多態(tài))、訪問修飾符不能嚴(yán)于父類

3.? 多態(tài)(polymorphism)和動(dòng)態(tài)綁定(dynamic binding

一個(gè)對象變量可以引用多種實(shí)際類型的現(xiàn)象稱多態(tài);

在運(yùn)行時(shí)能夠自動(dòng)地選擇調(diào)用哪個(gè)方法的現(xiàn)象稱為動(dòng)態(tài)綁定。

例如:

Manager?boss?=?new?Manager("boss",?80000,?1987,?12,?15); boss.setBonus(5000); Employee[]?staff?=?new?Employee[3]; staff[0]?=?boss; staff[1]?=?new?Employee("employee_1",50000,?1989,3,23); staff[2]?=?new?Employee("employee_2",50000,?1990,4,22); //多態(tài):變量e既可以引用Manager對象,又可以引用Employee對象 //動(dòng)態(tài)綁定:變量e引用Employee對象時(shí)調(diào)用Employee類的getSalary()方法 //而引用Manager對象時(shí)調(diào)用Manager類的getSalary()方法 for(Employee?e?:?staff) ??????System.out.println(e.getName()?+?"?"?+?e.getSalary()); 多態(tài) Employee?e; e?=?new?Employee(...);?//OK e?=?new?Manager(...);???//OK //但是超類變量不能引用子類對象 Employee?a?=?new?Employee(...); Manager?m?=?a;?//error動(dòng)態(tài)綁定:????
① 編譯器查看對象的聲明類型和方法名,獲取所有可能被調(diào)用的候選方法;對象方法執(zhí)行過程的詳細(xì):

② 編譯器查看那調(diào)用方法時(shí)提供的參數(shù)類型,如果與某個(gè)候選方法的參數(shù)類型完全相同,則選擇這個(gè)方法。這個(gè)過程被稱為重載解析(overloading resolution);

③ 前面兩步已經(jīng)獲得需要調(diào)用的方法名字和參數(shù)類型,接下來如果是private方法、static方法、final方法或者構(gòu)造器,那么編譯器將可以準(zhǔn)確地知道應(yīng)該調(diào)用哪個(gè)方法,這種調(diào)用方式被稱為靜態(tài)綁定(static binding)。與此對應(yīng)的是,調(diào)用的方法依賴于隱式參數(shù)的實(shí)際類型,并且在運(yùn)行時(shí)實(shí)現(xiàn)動(dòng)態(tài)綁定;

④ 哪個(gè)動(dòng)態(tài)綁定調(diào)用方法時(shí),虛擬機(jī)一定調(diào)用與隱式參數(shù)所引用對象的實(shí)際類型最合適的那個(gè)類的方法。

注:虛擬機(jī)為了避免每次都進(jìn)行搜索方法,所以預(yù)先為每個(gè)類創(chuàng)建一個(gè)方法表(method table),其中列舉了所有方法的簽名和實(shí)際調(diào)用的方法。只需查表,所以更快。

4.? 阻止繼承:final類和方法

將類聲明為final,則阻止會(huì)其他類對該類進(jìn)行繼承。將類中的方法聲明為final,子類就不能覆蓋這個(gè)方法了。final類中的所有方法自動(dòng)地稱為final方法。

?代碼如下 復(fù)制代碼
final?class?Executive?extends?Manager { } class?Employee { ??????public?final?String?getName() ??????{ ????????????return?name; ??????} ???? }??

注釋:屬性也可以聲明為final。對于final屬性來說,只是在構(gòu)造對象之后不能再修改它的值而已。我們將方法或者類聲明為final的主要原因是確保他們不會(huì)在子類中改變語義。有些程序員建議是除非我們有足夠的理由使用多態(tài)性,否則應(yīng)該將所有的方法聲明為final。這樣可以減少動(dòng)態(tài)綁定過程帶來的系統(tǒng)開銷,提高程序性能。但是,隨著Java虛擬機(jī)的發(fā)展,其處理能力越來越強(qiáng),編譯器已經(jīng)可以很短的時(shí)間內(nèi)知道類之間的繼承關(guān)系,并且能夠很快地檢測出是否存在覆蓋的方法。

5.? 強(qiáng)制類型轉(zhuǎn)換

?只能在繼承層次內(nèi)進(jìn)行類型轉(zhuǎn)換
?在將超類轉(zhuǎn)換成子類之前,應(yīng)該使用instanceof進(jìn)行檢查

?代碼如下 復(fù)制代碼
Employee[] staff = new Employee[3];
staff[0] = new Manager(...);
staff[1] = new Employee(...);
staff[2] = new Employee(...);
?
Manager boss;
if(staff[1] instanceof Manager)
{
????? boss = (Manager) staff[1];
}

6. 抽象類

什么是抽象類?

? ?類是對一類事物的描述,如果一個(gè)類中沒有包含足夠的

? 信息?來描繪個(gè)象,那么這個(gè)類就是抽象類

什么時(shí)候用抽象類?

一般抽象類都是父類基類


抽象類和抽象方法都用abstract關(guān)鍵字聲明。不能用來修飾屬性和構(gòu)造方法

抽象類不是不能實(shí)例化,而是不能直接實(shí)例化,可以通過子類間接實(shí)例化

public?class?ui?implements?usbInterface{ ????public?void?serivce()?{ ????????System.out.println("連接USB接口,開始傳輸數(shù)據(jù)"); ????} }??

public?interface?usbInterface?{ ???void?serivce(); }??

? ? ? public ? static ? void ?main(String[]?args)?{ ? ? ? ? usbInterface? ?u= new ?ui(); ????????if(u?instanceof?usbInterface) ?????????sop("true"); //true ???????? ????}???

面試題:抽象類和接口的區(qū)別是什么?何時(shí)用抽象類,何時(shí)用接口

與接口比較區(qū)別:

抽象類表示該類中可能已經(jīng)有一些方法的具體定義,但是接口就僅僅只能定義各個(gè)方法的界面(方法名,參數(shù)列表,返回類型),并不關(guān)心具體細(xì)節(jié)。 接口是引用類型的,和抽象類的相似之處有三點(diǎn):
  • 不能直接實(shí)例化;
  • 包含未實(shí)現(xiàn)的方法聲明;
  • 派生類必須實(shí)現(xiàn)未實(shí)現(xiàn)的方法,抽象類是抽象方法,接口則是所有成員(不僅是方法包括其他成員)。 [2]
  • 抽象類與接口緊密相關(guān)。然而接口又比抽象類更抽象,這主要體現(xiàn)在它們的差別上:
  • 類可以實(shí)現(xiàn)無限個(gè)接口,但僅能從一個(gè)抽象(或任何其他類型)類繼承,從抽象類派生的類仍可實(shí)現(xiàn)接口,從而得出接口是用來解決 多重繼承問題的。
  • 抽象類當(dāng)中可以存在非抽象的方法,可接口不能,且它里面的方法只是一個(gè)聲明必須用public來修飾沒有具體實(shí)現(xiàn)的方法。
  • 抽象類中的 成員變量可以被不同的 修飾符來修飾,可接口中的成員變量默認(rèn)的都是靜態(tài) 常量(static final)。
  • 抽象類是對象的抽象,然而接口是一種行為規(guī)范。
  • 抽象類里面可以有非抽象方法但接口里只能有抽象方法 聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽像類(abstract class),它用于要?jiǎng)?chuàng)建一個(gè)體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實(shí)現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實(shí)例。 然而可以創(chuàng)建一個(gè)變量,其類型是一個(gè)抽像類,并讓它指向具體子類的一個(gè)實(shí)例。不能有抽像構(gòu)造函數(shù)或抽像靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽像方法提供實(shí)現(xiàn),否則它們也是抽像類。 取而代之,在子類中實(shí)現(xiàn)該方法。知道其行為的其它類可以在類中實(shí)現(xiàn)這些方法。 接口(interface)是抽像類的變體。在接口中,所有方法都是抽像的。多繼承性可通過實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽像的,沒有一個(gè)有程序體。接口只可以定義static final成員變量。接口的實(shí)現(xiàn)與子類相似,除了該實(shí)現(xiàn)類不能從接口定義中繼承行為。當(dāng)類實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實(shí)現(xiàn)了該接口的類的任何對像上調(diào)用接口的方法。由于有抽像類,它允許使用接口名作為引用變量的類型。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,instanceof 運(yùn)算符可以用來決定某對象的類是否實(shí)現(xiàn)了接口

    ?何時(shí)用抽象類,何時(shí)用接口:
    共同點(diǎn)是他們都可以實(shí)現(xiàn)多態(tài)。
    不同點(diǎn)在于設(shè)計(jì)抽象類和接口的目的和使用方式有所不同,抽象類是為繼承而精心設(shè)計(jì)的,接口則更多以組合的方式使用。

    如果你的業(yè)務(wù)中可以抽象出一個(gè)通用的處理過程,只是某些局部傳遞的狀態(tài)或參數(shù)有所不同,這時(shí)可以考慮使用抽象類。否則在一般的情況下,優(yōu)先使用接口和組合的形式,這樣使代碼之間的耦合度降低。

    一個(gè)比較典型的抽象類使用范例是模板模式,當(dāng)然也有使用組合來實(shí)現(xiàn)的模板。另一個(gè)使用抽象類的情形,比如很多場合下特別是對一個(gè)聲明了相當(dāng)數(shù)量方法的接口,提供一個(gè)類似模板的默認(rèn)實(shí)現(xiàn)類是很有好處的,比如spring提供的一些template,dom4j提供的VisitorSupport等。甚至在effective java里已經(jīng)將這種方式提倡成一種最佳實(shí)踐。



    abstract不能和private、final、static修飾同一個(gè)方法

    抽象類中可以有構(gòu)造方法,用來初始化子類信息
    包含一個(gè)或多個(gè)抽象方法的類必須聲明為抽象類。
    在抽象類中還可以有屬性和具體方法的實(shí)現(xiàn)。

    抽象方法沒有方法體

    若要強(qiáng)迫子類重寫父類的方法就讓父類的方法變成抽象方法

    若要讓子類不能重寫父類的方法就讓父類的方法變成最終方法

    ?代碼如下 復(fù)制代碼

    abstract?class?Person{ ??????public?Person(String?n)?{ ?????????????name?=?n; ??????} ?????? ??????public?abstract?String?getDescription(); ??????public?String?getName()?{ ?????????????return?name; ??????} ??????private?String?name; }??

    一、final

      final類不能被繼承,沒有子類,final類中的方法默認(rèn)是final的。

      不是final類里的final方法不能被子類的方法覆蓋,但可以被子類繼承

      final不能用于修飾構(gòu)造方法。final修飾符的主要目的是防止被修改,如父類要防止子類重寫其方法,就使用final修飾符 ? ? ? ?而構(gòu)造方法子類無法繼承,所以使用final修飾符沒意義

      final成員變量表示常量,只能被賦值一次,賦值后值不再改變。

      注意:父類的private成員方法是不能被子類方法覆蓋的,因此private類型的方法默認(rèn)是final類型的。

      1、final類

      final類不能被繼承,因此final類的成員方法沒有機(jī)會(huì)被覆蓋,默認(rèn)都是final的。在設(shè)計(jì)類時(shí)候,如果這個(gè)類不需要有子類,類的實(shí)現(xiàn)細(xì)節(jié)不允許改變,并且確信這個(gè)類不會(huì)載被擴(kuò)展,那么就設(shè)計(jì)為final類。

      2、final方法

      如果一個(gè)類不允許其子類覆蓋某個(gè)方法,則可以把這個(gè)方法聲明為final方法。

      使用final方法的原因有二:

      1.把方法鎖定,防止任何繼承類修改它的意義和實(shí)現(xiàn)。

      2.高效。編譯器在遇到調(diào)用final方法時(shí)候會(huì)轉(zhuǎn)入內(nèi)嵌機(jī)制,大大提高執(zhí)行效率。

      3、final變量(常量)

      用final修飾的成員變量表示常量,值一旦給定就無法改變!

      final修飾的變量有三種:靜態(tài)變量、實(shí)例變量和局部變量,分別表示三種類型的常量。

      從下面的例子中可以看出,一旦給final變量初值后,值就不能再改變了。

      另外,final變量定義的時(shí)候,可以先聲明,而不給初值,這中變量也稱為final空白,無論什么情況,編譯器都確保空白final在使用之前必須被初 始化。但是,final空白在final關(guān)鍵字final的使用上提供了更大的靈活性,為此,一個(gè)類中的final數(shù)據(jù)成員就可以實(shí)現(xiàn)依對象而有所不同, 卻有保持其恒定不變的特征。

      4、final參數(shù)

      當(dāng)函數(shù)參數(shù)為final類型時(shí),你可以讀取使用該參數(shù),但是無法改變該參數(shù)的值。

     

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?第三章:多態(tài)(polymorphism)

    什么是多態(tài)?答:不同對象對同一操作的不同實(shí)現(xiàn)

    子類到父類的轉(zhuǎn)換(向上轉(zhuǎn)型)

    類到類的轉(zhuǎn)換(向下轉(zhuǎn)型)?

    使用 父類作為方法的形參實(shí)現(xiàn)多態(tài)

    使用 父類作為方法的返回值實(shí)現(xiàn)多態(tài) 使用多態(tài)的優(yōu)勢:可以減少代碼量,提高代碼的可擴(kuò)展性和可維護(hù)性 繼承是多態(tài)的基礎(chǔ),沒有繼承就沒有多態(tài)? instanceof 運(yùn)算符 語法:對象名 ? instanceof 類或接口 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ??? 第四章:接口(interface) 防盜門 is a 門 has a 鎖 的功能 ??|----繼承?? ? ?? ?|-----接口(相當(dāng)于擴(kuò)展功能)-------------------手機(jī)的功能擴(kuò)展 接口是一套規(guī)范和標(biāo)準(zhǔn),他們可以約束類的行為,是一些方法特征的集合,但是沒有方法的實(shí)現(xiàn) 抽象類利于代碼復(fù)用,接口利于代碼的擴(kuò)展和維護(hù)
    接口類中,定義的是方法,在不同子類中有不同的實(shí)現(xiàn),也就是要被子類重寫,接口類的方法就可設(shè)計(jì)為抽象方法,實(shí)現(xiàn)了多態(tài),實(shí)現(xiàn)了多實(shí)現(xiàn) 接口的命名規(guī)則與類名相同,如果修飾符是public,則該接口在整個(gè)項(xiàng)目中可見; 如果省略修飾符,則該接口只在當(dāng)前包可見 接口中可以定義常量,不可以定義變量,接口中的屬性都會(huì)自動(dòng)用public static final 修飾?,即接口中的屬性都是全局靜態(tài)常量,接口中的常量必須在定義時(shí)指定初始值 接口中所有的方法都是抽象方法,不得有方法體,不得私有化,因?yàn)槌橄蠓椒ㄒ獜?qiáng)迫子類重寫其方法, 接口中的方法都會(huì)自動(dòng)用public abstract修飾 ,即接口中的方法都是全局抽象方法 接口不能實(shí)例化,不能有構(gòu)造方法 接口之間可用關(guān)鍵字extends實(shí)現(xiàn)繼承關(guān)系 接口的實(shí)現(xiàn)類必須實(shí)現(xiàn)接口的的全部方法,否則必須定義為抽象類 extends關(guān)鍵字必須在implements關(guān)鍵字之前
    通過以上我們解了接口表示一種能力,一個(gè)類實(shí)現(xiàn)了某個(gè)接口,就表示這個(gè)類具備了某種能力 打印機(jī)打印小貓小狗,學(xué)生、老師、校長、學(xué)校等對象,而這個(gè)接口必須有傳遞信息的能力? 從使用的角度講:接口和抽象類的區(qū)別在于抽象類利于代碼復(fù)用,接口利于代碼維護(hù),接口類似于一個(gè)組件,需要時(shí)可以自由組裝 繼承的時(shí)候同時(shí)實(shí)現(xiàn) 接口表示一種約定:使用接口實(shí)現(xiàn)打印機(jī)打印 在面向?qū)ο缶幊讨刑岢嫦蚪涌诰幊?#xff0c;而不是面向?qū)崿F(xiàn)編程 接口體現(xiàn)了約定和實(shí)現(xiàn)相分離的原則,通過面向接口編程,可以降低代碼間的耦合性,提高代碼的可擴(kuò)展性和可維護(hù)性。面向接口編程就意味著:開發(fā)系統(tǒng)時(shí) ,主體架構(gòu)是使用接口,接口構(gòu)成系統(tǒng)的骨架,這樣就可以通過更換 實(shí)現(xiàn)接口的類來實(shí)現(xiàn)更換系統(tǒng)
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? 第六章:異常中的throw throws 幾個(gè)常見的異常: 2A:ArithmeticException、ArrayIndexOutOfBounds Exception 2C:ClassNotFoundException(不是運(yùn)行時(shí)異常)、CalssCastException 2I:InputMismatchException、IllegalArgumentException 2N:NullPointer Exception、NumberFormatException 常用的異常方法: void printStackTrace():輸出異常的堆棧信息 String getMessage():返回異常信息描述的字符串,該信息只是 printStackTrace():輸出信息的一部分 throws : 如果在方法聲明的同時(shí)聲明了可能發(fā)生的異常( throws Exception),throws可以同時(shí)聲明多個(gè)異常類,用逗號(hào)分開,父異常類放最后 有兩種處理方式: 1:讓調(diào)用者通過try-catch?捕獲并處理異常 2:如果調(diào)用者也不打算處理異常,就可以通過throws 繼續(xù)聲明異常,讓上一級(jí)調(diào)用者處理 throw:果在用于方法體內(nèi)部,拋出的是異常對象
    運(yùn)行時(shí)異常: Check異常(非運(yùn)行時(shí)異常):檢查異常: 凡是在API中在構(gòu)造方法詳細(xì)信息里有聲明異常類型,該異常類型就是檢查異常 常見的檢查異常有IOExceptin 檢查異常必須要做處理,否則編譯不通過,處理方式是要么繼續(xù)聲明異常類,要么try ? ? ? ? ?try?{ ?????????????throw?new?Exception("輸入錯(cuò)誤!"); ????????}?catch?(Exception?e)?{ //? 想把項(xiàng)目中出現(xiàn)的異常以文件的形式記錄下來 ????????????e.printStackTrace(new?PrintStream(new?FileOutputStream("C:\\Users\\hp\\Desktop\\1.txt"),?true)); ????????}??
    》》》如果想把項(xiàng)目中出現(xiàn)的異常以文件的形式記錄下來,甚至記錄程序正常運(yùn)行的關(guān)鍵步驟信息,以便日后查看,就需要使用開源日志記錄工具?log4j 開源日志記錄工具:log four(for 4) java 縮寫 log4j 在項(xiàng)目中創(chuàng)建一個(gè)與src同級(jí)的 libs目錄,然后把相應(yīng)的jar包復(fù)制進(jìn)來,然后右鍵這個(gè) jar包,選擇構(gòu)建路徑,會(huì)生成一個(gè)引用的庫

    接下來就是右鍵src目錄,新建一個(gè)文件,文件名為log4j.properties,雙擊打開這個(gè)文件,在下面點(diǎn)擊source進(jìn)行文件配置 /*stdout(Standardoutput)標(biāo)準(zhǔn)輸出 stdin(Standardinput)標(biāo)準(zhǔn)輸入 stderr(Standarderror)標(biāo)準(zhǔn)錯(cuò)誤*/
    ######
    ######


    ### 設(shè)置Logger的 輸出級(jí)別和輸出目的###
    log4j.rootLogger=info,stdout,fileout ?? ### 把日志信息輸出到控制臺(tái)###
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout ### 把日志信息輸出到文件stu.log ###
    log4j.appender.fileout=org.apache.log4j.FileAppender log4j.appender.fileout.File=stu.log log4j.appender.fileout.layout=org.apache.log4j.PatternLayout log4j.appender.fileout.layout.Conversion.Pattern=%d?%F?%1?%m?%n

    日志及分類 SQL日志: 異常日志: 業(yè)務(wù)日志:記錄系統(tǒng)運(yùn)行過程,如用戶登錄、操作記錄 log4j是Apache的一個(gè)開源項(xiàng)目,是一個(gè)非常優(yōu)秀的日志記錄工具,通過使用log4j,我們可以控制日志輸出的級(jí)別,以及日志信息輸送的目的地,還可以控制每一條日志的輸出格式 Logger 對象是用來替代System.out或者System.err的日志記錄器 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? 第七章:?java ?集合框架


    List:有序可重復(fù) Set:無序不可重復(fù) Map:無序不可重復(fù) Dog dog=(Dog)list.get(i);必須強(qiáng)轉(zhuǎn),否則會(huì)編譯錯(cuò)誤! 當(dāng)長度需要增長時(shí),Vector默認(rèn)增長為原來的一倍,而ArrayList只增長50% //先進(jìn)先出與后進(jìn)先出
    ?import?java.util.*//第一步導(dǎo)入包 ?class?Queue?{ ?????private?LinkedList?list?=?new?LinkedList();//非泛型不安全 ?????public?void?add(Object?obj){ ?????????list.addFirst(obj); ?????} ?????//先進(jìn)先出 ?????public?Object?get(){ ?????????Object?obj?=?list.getLast(); ?????????list.removeLast(); ?????????return?obj; ?????} ?????//后進(jìn)先出 ?????public?Object?get2(){ ?????????Object?obj?=?list.getFirst(); ?????????list.removeFirst(); ?????????return?obj; ?????} ?????public?int?size(){ ?????????return?list.size(); ?????} ?????@Override ??????//重寫Object的toString方法 ?????public?String?toString()?{ ?????????StringBuffer?str?=?new?StringBuffer(""); ?????????for?(Object?obj?:?list)?{ ?????????????str.append(obj.toString()).append("?"); ?????????}???????? ?????????return?str.toString(); ?????} ?} ?public?class?Test3?{ ?????public?static?void?main(String[]?args)?{ ?????????Queue?qu=new?Queue(); ?????????qu.add("Jack"); ?????????qu.add("Lucy"); ?????????qu.add("Lily"); ?????????qu.add("Tom"); ?????????qu.add("Tomas"); ?????????System.out.println(qu); ?????????System.out.println(qu.size()); ?????????String?name?=?qu.get().toString();//先進(jìn)先出 //?????????String?name?=?qu.get2().toString();//后進(jìn)先出 ?????????System.out.println(name); ?????????System.out.println(qu); ?????????System.out.println(qu.size()); ?????} ?}??

    ?int?num?=Integer.parseInt("36"); ?boolean?Boolean.parseBoolen("true");??
    第八章:JDBC(Java ?DataBase Connectivity) JDBC:Java 數(shù)據(jù)庫連接,由一組類和接口組成,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一的訪問。Sun公司(現(xiàn)在已經(jīng)被Oracle公司收購)提供了JDBC 的接口規(guī)范?JDBC API?,而數(shù)據(jù)庫廠商或第三方中間件廠商根據(jù)該接口規(guī)范提供針對不同不同數(shù)據(jù)庫的具體實(shí)現(xiàn)---------JDBC 驅(qū)動(dòng)
    ?JDBC的工作原理: java的應(yīng)用程序可以集成在JDK中的java.sql和javax.sql包中的JDBC API 來連接和操作數(shù)據(jù)庫?

    1:JDBC API?提供了Java 應(yīng)用程序與各種不同數(shù)據(jù)庫交互的標(biāo)準(zhǔn)接口,如Connection接口、Statement接口、ResultSet接口、PreparedStatement接口、等 2:JDBC Driver Manager:負(fù)責(zé)管理各種不同的JDBC驅(qū)動(dòng),位于JDK的java的java.sql包中 3:JDBC 驅(qū)動(dòng):負(fù)責(zé)連接各種不同的數(shù)據(jù)庫 JDBC API 主要做三件事:連接數(shù)據(jù)庫、發(fā)送sql語句、處理結(jié)果
    JDBC 訪問數(shù)據(jù)庫的步驟: 1:加載驅(qū)動(dòng) 2:與數(shù)據(jù)庫建立連接 3:發(fā)送sql語句,并得到返回結(jié)果 4:處理返回結(jié)果 package?com.JulySeven.DAO; import?java.sql.*; /** ?*?@author?ljh ?*?這個(gè)類搞定數(shù)據(jù)庫連接和數(shù)據(jù)庫的增刪改 ?*?*/ public?class?DataBaseDao?{ ????//創(chuàng)建一個(gè)返回一個(gè)連接對象的方法 ????public?Connection?getCon(){ ????????Connection?con=null; ???????? ????????final?String?URL="jdbc:sqlserver://localhost:1433;DatabaseName=epet"; ????????final?String?UNAME="sa"; ????????final?String?UPWD="123"; ????????try?{ ? ? ? ? ? ? ? ? //加載驅(qū)動(dòng)
    ????????????Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); ? ? ? ? ? ? ? //與數(shù)據(jù)庫建立連接 ????????????con=DriverManager.getConnection(URL,UNAME,UPWD); ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????} ????????return?con; ????} ????//關(guān)閉所有連接資源 ????public?void?closeAll(Connection?con,Statement?smtm,ResultSet?rs){ ????????try?{ ????????????if(rs!=null){ ????????????????rs.close(); ????????????} ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????} ????????try?{ ????????????if(smtm!=null){ ????????????????smtm.close(); ????????????} ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????} ????????try?{ ????????????if(con!=null &&!con.isClosed() ){ ????????????????con.close(); ????????????} ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????} ????} ????//一個(gè)方法搞定增刪改 ????public?int?executeUpdate(String?sql,Object[]?params){ ????????int?result=0; ????????Connection?con=null; ????????PreparedStatement?pstmt=null; ????????try?{ ????????????con=getCon(); ????????????pstmt=con.prepareStatement(sql); ????????????for(int?i=0;i<params.length;i++){ ????????????????pstmt.setObject(i+1,?params[i]); ????????????} ????????????result=pstmt.executeUpdate(); ???????? ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????}finally{ ????????????closeAll(con,pstmt,null); ????????} ????????return?result; ????} } --------------------------------------------------------- package?com.JulySeven.DAO; import?java.sql.Connection; import?java.sql.PreparedStatement; import?java.sql.ResultSet; import?java.util.ArrayList; import?java.util.HashMap; import?java.util.List; import?java.util.Map; import?com.JulySeven.Entity.Menu; /** ?*?前面的都是鋪墊,這個(gè)才是真正的數(shù)據(jù)庫訪問層 ? *二級(jí)菜單 使用問號(hào)作為占位符 ?*?*/ //防盜門是一個(gè)門有鎖的功能 public?class?MenuImplement?extends?DataBaseDao?implements?MenuInterface?{ ???? ????public?Map<Integer,?List<Menu>>?getAllMenu()?{ ????????Map<Integer,?List<Menu>>?map=new?HashMap<Integer,?List<Menu>>(); ?????????Connection?con=null; ?????????PreparedStatement?pstmt=null; ?????????ResultSet?rs=null; ?????????try?{ ????????????con=getCon(); ????????????String?sql="select?*?from?Menu?order?by?pid"; ????????????pstmt=con.prepareStatement(sql); ????????????rs=pstmt.executeQuery(); ????????????int?myPid=0; ????????????List<Menu>?list=new?ArrayList<Menu>(); ????????????map.put(new?Integer(myPid),?list); ????????????while(rs.next()){ ????????????????Menu?menu=new?Menu(rs.getInt("id"),rs.getString("name"),?rs.getInt("pid")); ????????????????//myPid會(huì)改變 ????????????????if(menu.getPid()==myPid){ ????????????????????list.add(menu); ????????????????}else{ ????????????????????myPid=menu.getPid(); ????????????????????//只new?四次 ????????????????????list=new?ArrayList<Menu>(); ????????????????????map.put(new?Integer(myPid),?list); ????????????????????list.add(menu); ????????????????} ????????????} ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????}finally{ ????????????closeAll(con,?pstmt,?rs); ????????} ????????return?map; ???????? ????} ??public?static?void?main(String[]?args)?{ ??????Map<Integer,?List<Menu>>?map; ??????MenuImplement?m=new?MenuImplement(); ??????map?=m.getAllMenu(); ????List<Menu>?list=map.get(new?Integer(0)); ????for?(Menu?menu?:?list)?{ ????????StringBuilder?sb=new?StringBuilder(); ????????for?(Menu?m1:?map.get(menu.getId()))?{ ????????????sb.append(m1).append("?"); ????????} ????????System.out.println(menu+"::"+sb.toString()); ???????? ????} ?} } ? ? ? ? ? 第9章:數(shù)據(jù)訪問層 將大腦中所思考的事情記錄到本子上,這個(gè)過程就是持久化 相對應(yīng)的是:內(nèi)存數(shù)據(jù)------以文件的形式保存到硬盤 JDBC 就是一種持久化機(jī)制,將程序保存成文件也是持久化機(jī)制的一種實(shí)現(xiàn),但是通常我們將數(shù)據(jù)保存到數(shù)據(jù)庫中 進(jìn)行數(shù)據(jù)庫持久化時(shí)采用別人的總結(jié)出的解決方案,既可以保證代碼的質(zhì)量, 又可以省去自己摸索的時(shí)間,何樂不為 思考一個(gè)問題:你用的是別人的方案,萬一別人總結(jié)的方案不行怎么辦? 所以是優(yōu)先考慮使用別人的 public interface petDaoInterface{ ? ? ?int save (Pet pet); ? ? ?int ?del ?(Pet pet); ? int update?(Pet pet); ?List<Pet> ?getAllPet(); } 盡量以對象為單位,而不是以屬性為單位來傳遞參數(shù),給調(diào)用者提供面向?qū)ο蟮慕涌?/span> DAO就是DataAccessObjecs數(shù)據(jù)存取對象,位于業(yè)務(wù)邏輯持久化數(shù)據(jù)之間,實(shí)現(xiàn)對持久哈數(shù)據(jù)的訪問。 DAO模式提供了訪問關(guān)系型數(shù)據(jù)庫系統(tǒng)所需的的操作接口,將數(shù)據(jù)訪問和業(yè)務(wù)邏輯分離,對上層提供面向?qū)ο髷?shù)據(jù)訪問接口。
    一個(gè)典型的DAO模式主要由DAO接口、 DAO實(shí)現(xiàn)類、實(shí)體類組成,基于代碼的復(fù)用考慮,通常創(chuàng)建一個(gè)數(shù)據(jù)庫連接和關(guān)閉工具類。 使用分層開發(fā)便于代碼的復(fù)用、程序的擴(kuò)展、降低代碼的耦合性、提高開發(fā)質(zhì)量和開發(fā)效率。分層開發(fā)的種種優(yōu)勢都是建立在合理分層的基礎(chǔ)上的,分層時(shí)應(yīng)該堅(jiān)持封裝性原則和順序訪問原則。 在分層結(jié)構(gòu)中,不同層之間通過實(shí)體類傳輸數(shù)據(jù)。在程序中把實(shí)體類作為方法的輸入?yún)?shù)或返回結(jié)果,實(shí)現(xiàn)數(shù)據(jù)傳遞,非常方便。 ? ? ? ? ? ? ? ? ? ? ??? ? 第10章:File IO流 import java.io.* 使用File類操作文件或目錄 File類四個(gè)重要的方法: 1:boolean exists()//判斷文件是否存在 2: long length()//返回文件的長度,若文件不存在,則返回0L 3: boolean ??delete() 4:?boolean createNewFile()//創(chuàng)建一個(gè)空文件,不創(chuàng)建文件夾 通過流來讀寫文件: 讀文件:是指把文件中的數(shù)據(jù)讀取到內(nèi)存中 寫文件: 是指把內(nèi)存中的數(shù)據(jù)寫入文件中 練習(xí): 將一個(gè)GBK編碼的文本文件轉(zhuǎn)存為一個(gè)UTF-8編碼的文本文件。
    關(guān)鍵是要用到轉(zhuǎn)換流
    import? java.io.*; public? class? ChangeEncoding { ???? public? static? void? changeEncoding (String inEncoding, String outEncoding, ???????????? String inFileName, String outFileName)? throws? IOException { ???????? BufferedReader reader = new? BufferedReader( ???????????? new? InputStreamReader( ???????????? new? FileInputStream(inFileName), inEncoding)); ???????? BufferedWriter writer = new? BufferedWriter( ???????????? new? OutputStreamWriter( ???????????? new? FileOutputStream(outFileName), outEncoding)); ???????? String s = null ; ???????? while? ((s = reader.readLine()) != null ) { ???????????? writer.write(s, 0 , s.length()); ???????????? writer.newLine(); ???????? } ???????? writer.flush();//一定要刷新緩沖區(qū) ???????? writer.close(); ???????? reader.close(); ???? } ???? public? static? void? main(String[] args) { ???????? try? { ???????????? changeEncoding( "GBK" , "UTF-8" , "gbk.txt" , "utf8.txt" ); ???????? } catch? (IOException e) { ???????????? System.out.println( "轉(zhuǎn)換失敗,原因:"? + e.getMessage()); ???????? } ???? } }
    import?java.io.ByteArrayOutputStream;? import?java.io.File;? import?java.io.FileOutputStream;? import?java.io.IOException;? import?java.io.InputStream;? import?java.net.HttpURLConnection;? import?java.net.URL;? ?????/** ??????*?@author?ljh ??????*?通過代碼從網(wǎng)站上下載一張圖片到指定的目錄 ??????*?*/ public?class?ImageRequest?{ ????public?static?void?main(String[]?args)?throws?IOException?{? ????????URL?url?=?new?URL("http://pic36.nipic.com/20131128/11748057_141932278338_2.jpg");? ????????HttpURLConnection?conn?=?(HttpURLConnection)url.openConnection();? ????????//讀進(jìn)來,寫出去 ????????InputStream?inputStream?=?conn.getInputStream();???//通過輸入流獲得圖片數(shù)據(jù)? ????????byte[]?getData?=?readInputStream(inputStream);?????//獲得圖片的二進(jìn)制數(shù)據(jù)? ????????File?imageFile?=?new?File("D://myFirstpic.jpg"); ????????FileOutputStream?fos?=?new?FileOutputStream(imageFile);???? ????????fos.write(getData);? ????????fos.close();? ????????????? ????????System.out.println("?read?picture?successfulluy!");? ????}? ????? ????public?static??byte[]?readInputStream(InputStream?inputStream)?throws?IOException?{? ????????byte[]?buffer?=?new?byte[1024];? ????????int?len?=?0;? ?????????/*這個(gè)類實(shí)現(xiàn)了一個(gè)輸出流,其中的數(shù)據(jù)被寫入一個(gè)字節(jié)數(shù)組。當(dāng)數(shù)據(jù)被寫入時(shí),緩沖區(qū)會(huì)自動(dòng)生長。數(shù)據(jù)可以用toByteArray()和toString()檢索。 ???????????????????????????關(guān)閉寫入字節(jié)數(shù)組的輸出流沒有影響。這個(gè)類中的方法可以在流一直沒有發(fā)生IOException閉叫。*/ ????????ByteArrayOutputStream?bos?=?new?ByteArrayOutputStream();? ????????while((len?=?inputStream.read(buffer))?!=?-1)?{? ????????????bos.write(buffer,?0,?len);? ????????}? ????????bos.close();?? ????????return?bos.toByteArray();? ????}? } 構(gòu)造方法摘要
    BufferedWriter(Writer?out)?
    ??????????創(chuàng)建一個(gè)使用默認(rèn)大小輸出緩沖區(qū)的緩沖字符輸出流。
    BufferedWriter(Writer?out, int?sz)?
    ??????????創(chuàng)建一個(gè)使用給定大小輸出緩沖區(qū)的新緩沖字符輸出流。
    ? 方法摘要
    ?void close()?
    ??????????關(guān)閉此流,但要先刷新它。
    ?void flush()?
    ??????????刷新該流的緩沖。
    ?void newLine()?
    ??????????寫入一個(gè)行分隔符。
    ?void write(char[]?cbuf, int?off, int?len)?
    ??????????寫入字符數(shù)組的某一部分。
    ?void write(int?c)?
    ??????????寫入單個(gè)字符。
    ?void write(String?s, int?off, int?len)?
    ??????????寫入字符串的某一部分。

    java.io?
    類 DataInputStream

    java.lang.Objectjava.io.InputStreamjava.io.FilterInputStreamjava.io.DataInputStream 所有已實(shí)現(xiàn)的接口:
    Closeable,? DataInput
    構(gòu)造方法摘要
    DataInputStream(InputStream?in)?
    ??????????使用指定的底層 InputStream 創(chuàng)建一個(gè) DataInputStream。
    ? 方法摘要
    ?int read(byte[]?b)?
    ??????????從包含的輸入流中讀取一定數(shù)量的字節(jié),并將它們存儲(chǔ)到緩沖區(qū)數(shù)組?b?中。
    ?int read(byte[]?b, int?off, int?len)?
    ??????????從包含的輸入流中將最多?len?個(gè)字節(jié)讀入一個(gè) byte 數(shù)組中。
    ?boolean readBoolean()?
    ??????????參見?DataInput?的?readBoolean?方法的常規(guī)協(xié)定。
    ?byte readByte()?
    ??????????參見?DataInput?的?readByte?方法的常規(guī)協(xié)定。
    ?char readChar()?
    ??????????參見?DataInput?的?readChar?方法的常規(guī)協(xié)定。
    ?double readDouble()?
    ??????????參見?DataInput?的?readDouble?方法的常規(guī)協(xié)定。
    ?float readFloat()?
    ??????????參見?DataInput?的?readFloat?方法的常規(guī)協(xié)定。
    ?void readFully(byte[]?b)?
    ??????????參見?DataInput?的?readFully?方法的常規(guī)協(xié)定。
    ?void readFully(byte[]?b, int?off, int?len)?
    ??????????參見?DataInput?的?readFully?方法的常規(guī)協(xié)定。
    ?int readInt()?
    ??????????參見?DataInput?的?readInt?方法的常規(guī)協(xié)定。
    ?String readLine()?
    ??????????已過時(shí)。?該方法無法將字節(jié)正確轉(zhuǎn)換為字符。從 JDK?1.1 開始,讀取文本行的首選方法是使用?BufferedReader.readLine()?方法。使用?DataInputStream?類讀取文本行的程序可以改為使用?BufferedReader?類,只要將以下形式的代碼: DataInputStream d =?new?DataInputStream(in); 替換為: BufferedReader d=?new?BufferedReader(new?InputStreamReader(in));
    ?long readLong()?
    ??????????參見?DataInput?的?readLong?方法的常規(guī)協(xié)定。
    ?short readShort()?
    ??????????參見?DataInput?的?readShort?方法的常規(guī)協(xié)定。
    ?int readUnsignedByte()?
    ??????????參見?DataInput?的?readUnsignedByte?方法的常規(guī)協(xié)定。
    ?int readUnsignedShort()?
    ??????????參見?DataInput?的?readUnsignedShort?方法的常規(guī)協(xié)定。
    ?String readUTF()?
    ??????????參見?DataInput?的?readUTF?方法的常規(guī)協(xié)定。
    static?String readUTF(DataInput?in)?
    ??????????從流?in?中讀取用?UTF-8 修改版格式編碼的 Unicode 字符格式的字符串;然后以?String?形式返回此字符串。
    ?int skipBytes(int?n)?
    ??????????參見?DataInput?的?skipBytes?方法的常規(guī)協(xié)定。

    總結(jié)

    以上是生活随笔為你收集整理的使用java实现面向对象编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。