大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 java核心技術基礎知識

java核心技術基礎知識

更新時間:2019-08-10 09:00:00 來源:動力節(jié)點 瀏覽2763次

 


 一、類、子類,超類


  1、擴展一個子類繼承父類,子類的私人領域之間的關系在一個由子類調用父類沒有,只有通過超類方法可以訪問父類的私有部分,可以使用超級。方法()調用超類的方法,但是超級不是一個對象引用,它只是一個指示編譯器調用超類方法的特定的關鍵詞。


  2、使用超級調用父類的構造函數(shù)聲明必須首先一個子類的構造函數(shù)聲明。如果子類的構造函數(shù)沒有顯式地調用父類的構造函數(shù),它會自動調用父類的構造函數(shù)默認情況下,如果父類的構造函數(shù)沒有參數(shù),而在子類構造函數(shù)和其他沒有顯式地調用超類的構造函數(shù),Java編譯器錯誤。學習,而不是自然讓我想起一個結構:內部類。個人覺得可以把子類具有父類的繼承關系的內部類對象和結構安全初始化,所有可以使用超級必要時。對象的方法()方法來訪問公共(通常是)直接調用方法的方法名,如果子類覆蓋父類的方法,所謂的時間外,解釋器會去找子類方法以盾牌超類對象。


  3、一個對象變量可以引用對種實際類型的現(xiàn)象被叫做多態(tài),對象變量遵行置換法則:超類對 象的任何地方都可以用子類對象置換,但是聲明為類型為超類對象的變量就算引用了一個子 類的對象,用該引用還是不能調用子類特有的方法,因為"超類不是子類",而"子類肯定超類 "。在運行時能夠自動地選擇調用哪個方法的現(xiàn)象叫做動態(tài)綁定,調用方法依賴于隱式參數(shù)的 實際類型,在JAVA5 以前的版本中,要求覆蓋方法的返回類型必須是一樣的,而現(xiàn)在允許子 類將覆蓋方法的返回類型定義為原返回類型的子類型。


  4、繼承關系程度,動態(tài)綁定方法被調用過程是:如果一個子類定義了方法被調用時,或者需要找到父類,而不是繼續(xù)尋找類。每個類(虛擬機會提前為了節(jié)約成本,創(chuàng)建一個方桌,調用方法與順序搜索方法表)。子類覆蓋父類的方法,子類方法不能在類方法低能見度。


  以上內容的例子:


  class MyParentClassA{


  private String str;


  public MyParentClassA(String s){


  str=s; }


  public String getStr(){


  return str;


  }


  }


  class MyParentClassB


  {


  public MyParentClassB(String s){


  super(s);


  }


  }


  public class SuperClassTest extends MyParentClassB


  {


  private String str;


  public SuperClassTest(String s)


  {


  super(s);


  str="this is child";


  }


  public String getStr()


  {


  return super.getStr()+" "+str;


  }


  public void methodTochild()


  {


  }


  public static void main(String args[])


  {


  MyParentClassA[]mpcArray=new MyParentClassA[2];


  mpcArray[0]=new www.123yc.com MyParentClassA("parent");


  mpcArray[1]=new SuperClassTest("parent's child");


  for (MyParentClass m:mpcArray){ System.out.println(m.getStr());


  }


  mpcArray[0].methodTochild();


  //error: parent is not a child


  }


  }



  需要注意的是:


  SuperClassTest []test=new SuperClassTest [2];


  MyParentClass []mpc=test; 這樣做可以通過編譯,SuperClassTest 是一個 MyParentClass ,但是當 mpc[0]=new MyParentClass();此時test[0]和mpc[0]引用同一個對象,當調用test[0].methodTochild() 會導致調用一個不存在的實例域,從而打亂了相鄰存儲空間的內容,所以在 mpc[0]=new MyParentClass(原創(chuàng)論文網(wǎng))時就會拋出:java.lang.ArrayStoreException,不允許放入子類的引用。


  5、final 類:用來阻止繼承。final 類中的所有方法自動變?yōu)?final 的,但是類的域不會。 類被聲明為final 就不能被繼承,方法聲明為final 就不能被覆蓋。在設計類層次的時候應 該仔細考慮哪些方法和類聲明為final。


  6、強制類型轉型:如果在繼承鏈上進行向下的強制轉型,并且本來就不是向下的類型,這個 時候會產(chǎn)生ClassCastException 異常。所以在進行類型轉型之前,先要檢查一下是否能夠轉 型成功:o instanceof Object,如果x 為null,不會產(chǎn)生異常,只會返回false,因為null 沒有引用任何對象。注意當需要強制轉型的時候應該堅持下類是否設計的合理,是否真的需 要用超類的引用去調用子類的方法。


  7、抽象類:包含一個抽象方法的類本身必須聲明為抽象類。其實抽象方法充當著占位的角色, 這樣子類實現(xiàn)該方法,用抽象父類的引用可以統(tǒng)一調用占位的方法。



  二、Object:所有類的超類


  1、equals,用于檢測一個對象是否等于另外一個對象,可以重載,String 就重載了它,只要 內容相同就返回true,當我們重載equals 時需要注意以下幾點: 自反性 :對任意引用值X,x.equals(x)的返回值一定為true. 對稱性: 對于任何引用值x,y,當且僅當y.equals(x)返回值為true 時,x.equals(y) 的返回值一定為 true;注意如果equals 的語義在每個子類中有所改變,就要用 getClass 檢 測 傳遞性:如果x.equals(y)=true, y.equals(z)=true,則x.equals(z)=true 一致性:如果參與比較的對象沒任何改變,則對象比較的結果也不應該有任何改變 非空性:任何非空的引用值X,x.equals(null)的返回值一定為false 覆蓋Object 的equals 方法參數(shù)一定是Object 類型的。


  2、HashCode 方法:用同樣的內容構造的String 和StringBuilder 的HashCode 是不同的, 因為StringBuilder 類中沒有定義hashCode 方法,他的散列碼是由Object 的默認方法導出的對象存儲地址(所有沒有覆蓋HashCode 方法的類導出的都是這個)。 Arrays 類有靜態(tài)方法hashCode(type[] a),這個散列碼由數(shù)組元素的散列碼組成。 


       注意:equals 與hashCode 的定義必須一致,如果equals 方法返回true,那么hashCode 就 必須相同,所以hashCode 需要散列的東西要來自equals 方法里要比較的域。


  3、toString:大部分的類的toString 方法遵循這樣的格式:類的名子,隨后是一對方括號 括起來的值域。 數(shù)組類型按照舊格式打印:[類型第一個字符@地址,所以我們想知道數(shù)組的內容要調用 Arrays 的靜態(tài)方法toString(type[]),多維數(shù)組調用Arrays.deepToString(type[])。 建議為自定義的每一個類都添加一個toString 方法。 Object 主要有以上 3 個重要方法,還有的就是 clone()和 getClass。可以注意到,Arrays 類里都有以上3 個靜態(tài)方法,所以我們要用數(shù)組調用的以上3 個方法時要用Arrays 的靜態(tài)類。



  三、泛型數(shù)組列表


  ArrayList 構造方法接受一個 int,用來設置初始容量,也可以用 對象調用 ensureCapacity(int i)來設置初始容量,一旦能夠確認數(shù)組列表的大小不再發(fā)生 變化,可以調用trimToSize 方法,這個方法將存儲區(qū)域的大小調整為當前元素數(shù)量所需要的 存儲空間數(shù)目,垃圾回收器將回收多余的存儲空間。 add(Object o):添加元素添加到最后,add(int i,Object o)在 i 位置插入一個新元素; remove(int i)刪除i 位置的元素;size():返回當前元素數(shù)量;set(int i,Object o)設置 第i 個元素,get(int i)得到到第i 個元素;toArray 返回一個包還所有元素的數(shù)組。可以 使用for each 語法。



  四、基本類型的包裝器與自動打包


  從公共超類Number 派生出來的有:Byte Short Integer Long Float Double;其他的還有:Character Void Boolean。對象包裝器類都是final 的,不能定義他們的子類,而且一旦構造了包裝器,就不允許更改包裝在其中的值。泛型要 用基本類型都要用包裝器。 自動打包是指在需要int 的地方,編譯器會自動的添加必要的方法調用,(代寫論文)自動讓他們變?yōu)閕nt 后又自動封裝回去。


  包裝器可以提供很多有用的方法(以Integer 為例,其他的類似):


  1、int intValue()返回Integer 對象的值


  2、Static toString(int i) ||toString(int i,int num)返回指定數(shù)值i 的串,第2 種協(xié) 變參數(shù)的num 指定進制。


3、Static int parseInt(String s) ||toString(String s,int num) 返回字符串s 表示的 整型數(shù)值,第2 種協(xié)變參數(shù)的num 指定進制。


  4、Static Integer valueOf(String s) ||toString(String s,int num) 返回字符串s 表 示的整型數(shù)值進行初始化后的Integer 對象,第2 種協(xié)變參數(shù)的num 指定進制。



  五、參數(shù)數(shù)量可變的方法


  callMethod(type... args)表明可以接受任意數(shù)量的對象,其實 編譯器將其打包成了數(shù)組。



  六、反射


  能夠分析類能力的程序被稱為反射。java 運行時系統(tǒng)始終為所有的對象維護一個 被稱為運行時的類型標示,這個信息保存著每個對象所屬的類足跡。


  1、class 類:用來保存對象運行時的信息,得到該對象的方法有


a、Object 類中的getClass() 方法返回一個Class 類型的實例。


b、Static forName(String classname):通過類名獲得一 個對應的Class 對象。


c、用 類名.class 代表對應的Class 對象。一個class 對象實際上表 示的一個類型,而這個類型未必是一種類,例如可以:int.class。class 類里的一般的方法有:getName()返回類的名子。如果類在一個包里,那么包名也會作 為類名的一部分。 newInstance():可以用來快速地創(chuàng)建一個類的實例 ,調用的是默認的構造器,如果這個類沒 有默認的構造起就會拋出一個異常。


  2、利用反射分析類的能力:Class 類中的 getFields(),getMethods(),getConstructors() 這三個方法分別返回對應類的 field(封裝域信息),method(封裝方法信息),constructor(封 裝構造器信息)對象的數(shù)組(都是public 的域,方法或則構造器),getMethods()返回的是所 有的公有方法,包括從超類繼承來的方法。 getDeclareMethod()返回這個類的全部方法包括該類的私有方法,但不包括由超類繼承了的 方法。 getDeclareField()返回的是這個類的所有域,但不包括由超類繼承了的方法。 getDeclareConstructor()返回的是所有的構造器。


  Field、Method、Constructor 類都有的方法:


  String getName()返回該域的名字;int getModifiers()返回一個整形數(shù)值用來描述成員的修飾符,Modifier 類有很多靜態(tài)方法可以 對這個整型做判斷,比如isPublic 等;Class getDeclaringClass()返回一個用于描述定義的 構造器、方法或者域的Class 對象。


  field 類:


  Class getType()方法返回描述域所屬類型的Class 對象。Object get(Object o) 方法的參數(shù)是某個包含域F 的類的對象,返回該對象的這個域的原始對象,對于基本類型有 相應的getInt 等。注意的是如果沒有調用setAccessible(true)(這個方法并不是永遠的能 有效的,在一些服務器比如 weblogic,可以通過安全性設置來屏蔽這個函數(shù)的功能),只能得 到可訪問(public)的域的值。(很明顯,通過這個機制,多少破壞了封裝性)


  Method 類:


  Class[] getParameterTypes()返回描述該方法參數(shù)類型的 Class 數(shù)組。


  Class getReturnType()返回描述該方法返回值類型的Class 對象。Class[] getExceptionTypes 返 回描述該構造器方法拋出異常類型的Class 對象數(shù)組。


  Constructor 類:


  Class[] getParameterTypes()返回描述該構造器方法參數(shù)類型的Class 數(shù) 組。Class[] getExceptionTypes 返回描述該構造器方法拋出異常類型的Class 對象數(shù)組。


  3、使用反射里的數(shù)組:Class 類里的有getComponentType 方法確定數(shù)組對應的類型。 Array:Static Object newInstance(Class cl,int length)可以通過CL 類型創(chuàng)建一個長 度為length 的數(shù)組。


  Static Object get(Array a,int index)通過索引返回數(shù)組A 指定位置的對象。 基本類型就是相應的get 方法,如:畢業(yè)論文范文getInt(Array a,int index); statci int getLength(Object o)返回數(shù)組o 的長度。


  4、方法指針:Method 類 : Object invoke(Object,Object...args)方法第一個參數(shù)是隱式 參數(shù)(要在哪個對象上調用,如果是靜態(tài)方法,其可以為 null),其余的對象提供的是顯式 參數(shù),如果沒有就傳一個null,如果方法返回的是基本類型,那么調用invoke 可以返回基本 類型的包裝類。


  Method getMethod(String s,Class...parameterTypes) :提供了參數(shù)的類型信息,可以在很 多重載的方法中返回準確的對象。



  七、繼承設計技巧


1、把公共超類的操作和域。


2、最好不使用保護域。


3、明”是一個“繼承關系。


4、除非所有繼承的方法是有意義的,否則最好不要使用繼承。


5、當覆蓋方法,不改變預期的行為。


6、使用多態(tài),而不是類型信息。


7、不要過多使用反射。



提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 韩国亚洲伊人久久综合影院 | 国内精品日本久久久久影院 | 亚洲欧洲一二三区机械有限公司 | 欧美精品亚洲精品日韩专 | 香蕉久久综合 | 中文字幕一区二区精品区 | 992人人草| 久久精品全国免费观看国产 | 天天色天天做 | 中文字幕视频一区二区 | 99久久99这里只有免费的精品 | 色黄网站成年女人色毛片 | 中国毛片免费看 | 色老头福影院韩国激情影院 | 免费女人18毛片a级毛片视频 | 久久九九亚洲精品 | 深夜福利在线看 | 国产精品视频免费一区二区三区 | 亚洲国产一区二区三区四区 | 亚洲人成自拍网站在线观看忄 | 日本高清中文字幕一区二区三区 | 一级看片免费视频 | 国产亚洲综合精品一区二区三区 | 亚洲国产精品综合久久20 | 婷婷综合色伊人阁 | 国产高清免费午夜在线视频 | 欧美综合图区亚洲综合图区 | 亚洲日本在线观看视频 | 添bbb免费观看高清视频 | 色插综合| 91亚洲国产系列精品第56页 | 国产主播在线播放 | 国产成人mv在线观看入口视频 | 久久婷婷久久一区二区三区 | 九九色网站 | 黑人特级粗α级毛片 | 一区二区中文字幕 | 麻豆精品成人免费国产片 | 特级毛片aaaa级毛片免费 | 中文国产成人精品久久久 | 91免费福利视频 |