java面向基本知識以及二維數組基本知識
1、定義方式
m:代表當前二維數組中有多少個一維數組;n:代表每個一維數組的長度
(1)數據類型[][] 數組名=new 數據類型[m][n]
(2)數據類型[][] 數組名=new 數據類型[m][ ],只給定m個一維數組,每個一維數組長度動態給定。
(3)數據類型[][] 數組名={{元素1,元素2,......}...{......}},靜態初始化。
(4)數據類型[] 數組名[]=new 數據類型[m][n]
(5)數據類型 數組名[][]=new 數據類型[m][n]
例如:
運行結果:
二、代碼塊
(1)概述:用{}括起來的統稱為代碼塊。
(2)分類及其特點:
A、局部代碼塊:在main()方法裏,限定變量的生命周期,外部不能訪問局部代碼塊中的變量;
C、靜態代碼塊:在一個類的成員位置中,用{}括起來,被Static修飾,一般情況下,用於給類進行初始化,並且只能執行一次。
(3)靜態代碼塊,構造代碼塊,構造方法的執行流程:靜態代碼塊>構造代碼塊>構造方法。
例如:
三、繼承
1、概述:多個類存在相同屬性或行為時,將這些內容抽取到一個單獨的類中,多個類無需再定義這些屬性或行為,只需要繼承那個類即可。其中被繼承的類稱為父類、基類或超類,繼承的類稱為子類或派生類。
2、關鍵字:extends。
Class 子類名 extends 父類名{......}
4、設計原則:高內聚低耦合。內聚是指實現一個功能的能力(能用一個類完成的事情盡量不要用多個類去完成),耦合指類與類之間的關系,盡量降低耦合性。
5、繼承特點:
(1)只支持單繼承,不支持多繼承(一個類只能有一個父類,不能有多個父類);
(2)支持多層繼承(繼承體系)。例如:
Class A{}
Class B extends A{}
Class C extends B{}
(3)子類繼承父類,是繼承了父類的所有成員(成員變量、成員方法,包括私有),但子類不能直接訪問父類的私有成員,只能通過父類的公共訪問方法間接的讓子類去訪問。
(1)子類可繼承父類所有成員(成員方法、成員變量),但是父類中的私有成員,子類只能通過在父類中創建公有方法間接去訪問,不能直接去訪問;
(2)子類不能繼承父類的構造方法,但可通過super關鍵字去訪問父類構造方法;
(3)不能為部分功能而去使用繼承,當類與類之間的關系體現的是“is a”的時候使用繼承。
(4)例如:
7、super關鍵字
(1)super代表父類的空間標識(即父類的引用或父類的對象)。
(2)super與this類似,區別如下:
this:表示對本類的引用。
Super:代表父類存儲空間的標識(可理解為父類引用)。
(3)用法(this與super均可如下使用):
A、訪問成員變量:this.成員變量名、super.成員變量名
B、訪問構造方法:無參:this()、super();有參:this(...)、super(...)
C、訪問成員方法:this.成員方法()、super.成員方法()
8、繼承中成員變量的關系
在子類方法中訪問一個變量:(1)首先在子類局部範圍找;(2)其次在子類成員範圍找;(3)最後在父類成員範圍找(絕對不能訪問到父類局部範圍)。
當子類中定義的成員變量與父類中的成員變量名稱一致時,若用子類的方法訪問該成員變量時,訪問的是子類的成員變量。
9、繼承中成員方法的關系
(1)子類訪問父類,當成員方法名不一致的情況下,分別調用。
(2)當子類中成員方法名與父類中成員方法名一致的情況下:先在子類中的成員方法找,若有則調用,若無,則在父類中的成員方法找。
10、繼承中構造方法的關系
(1)子類中所有的構造方法默認都會訪問父類中空參數的構造方法。子類會繼承父類中的數據,可能還會使用父類中的數據,所以子類初始化前一定要先完成父類數據的初始化,為實現這個效果,在子類構造方法的第一條語句上都默認有一個super()。
(2)若父類中沒有構造方法,則:a、提供父類的構造方法;b、子類通過super關鍵字去顯示訪問父類其他的帶參構造方法;c、子類通過this調用本類的其他構造方法(有參構造),間接訪問父類的帶參構造方法(子類必須有一個帶參構造方法或無參構造方法,讓父類進行初始化。
(3)註意:super和this都默認在構造方法中的第一句且必須在第一句,否則會有父類數據的多次初始化,可省略。
11、繼承中初始化
(1)初始化方式:分層初始化。
(2)初始化順序:子類繼承父類,父類先進行初始化,子類再進行初始化。
(3)例如:
12、繼承優點
(1)提高了代碼的復用性(多個類相同的成員放在同一個類中);
(2)提高了代碼的維護性(若功能代碼需要修改,修改一次即可);
(3)多態的前提,讓類與類之間產生了關系。
四、多態
1、多態概述:多態是指允許不同類的對象對同一消息作出響應。即同一消息可根據發送對象的不同而采用多種不同的行為方式(發送消息指方法調用)。
2、多態前提
(1)必須有繼承關系;
(2)必須有方法重寫(方法覆蓋);
(3)必須有父類的應用指向子類對象(向上轉型):父類名 對象名=new 子類名();。
3、多態中的訪問特點
(1)成員變量:編譯看左,運行看左;
(2)成員方法(非靜態):編譯看左,運行看右(存在方法重寫);
(3)成員方法(靜態):編譯看左,運行看左(靜態和類相關,算不上方法重寫);
(4)構造方法:構造方法無論是子類還是父類,都是對對象進行初始化。
4、向上轉型/向下轉型
(1)向上轉型:將父類的引用指向子類對象,父類名 父類引用=new 子類名()。
(2)向下轉型:將子類的應用指向父類引用,子類名 子類引用=(子類名) 父類引用,向下轉型前提是必須有父類引用,若使用不當,會出現運行時期異常,即ClassCastException。
(3)舉例:
5、多態優勢
(1)提供代碼的復用性,由繼承保證;
(2)提供代碼擴展性,由多態保證。
6、多態弊端
(1)弊端:無法訪問子類的特有功能。
(2)解決方案:利用向下轉型,即將子類的應用指向父類引用,子類名 子類引用=(子類名) 父類引用,向下轉型前提是必須有父類引用,若使用不當,會出現運行時期異常,即ClassCastException。
7、final關鍵字
(1)概述:final,最終的,終態的(不能被修改)。
(2)作用:可修飾類、成員方法、變量。
(3)特點:a、可修飾類,但該類不能被繼承,所以聲明類時不能和abstract同時存在;b、可修飾成員方法,但成員方法不能被重寫;c、可修飾變量,此時變量為常量,不能被修改;d、被final修飾只能賦值一次;e、被final修飾時進行初始化和賦值是在使用之前;f、final既可修飾基本數據類型,也可修飾引用數據類型,若修飾基本數據類型,基本數據類型的值不可被改變,若使用引用數據類型,引用數據類型的地址值不能被改變,但堆內存中的成員變量值可改變。
(4)final關鍵字的面試題:
面試題:final、finally、finalize三者區別?
回答:A、final修飾符(關鍵字),主要用來修飾類、成員方法,變量等,表示終態的,最終的。主要作用a、可修飾類,但該類不能被繼承,所以聲明類時abstract不能和final同時存在;b、可修飾成員方法,但成員方法只能使用不能被重寫;c、可修飾變量,此時變量為常量,不能被修改而且必須在聲明時給出變量的初始值。
B、finally是在異常處理時提供finally塊來執行任何操作。無論有無異常拋出、捕獲,finally塊都會被執行。所以在代碼邏輯塊中若有無論發生什麽都必須執行的代碼,就放在finally塊中。
C、finalize是方法名。Java技術允許使用finalize()方法在垃圾回收器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。該方法在Object類中定義的,因此所有的類都繼承了它。子類覆蓋finalize()方法以整理系統資源或者被執行的其他清理工作。Finalize()方法是在垃圾回收器刪除對象之前對這個對象調用的。
五、抽象類
1、概述:如果一個類中有一個方法聲明抽象功能(抽象方法),則這個類定義為抽象類。其中一個類若有抽象方法,則這個類一定為抽象類;抽象類中不一定都是抽象方法。
2、關鍵字:abstract
3、抽象類的子類
(1)當子類為具體類時,子類必須實現父類中的抽象功能。
(2)當子類為抽象類時,無意義,不能實例化,不能創建對象。
4、特點:抽象類不能直接實例化,即不能創建對象。
5、抽象類成員特點
(1)成員變量:可以是常量,也可以是變量。
(2)成員方法:可以有抽象方法,也可以有非抽象方法。
(3)構造方法:可以有無參構造方法,也可以有有參構造方法,作用:給對象進行初始化。
6、不能與abstract共存的關鍵字:private、final、static。
7、舉例:抽象類:
子實現類:
測試類:
六、接口
1、概述:接口是事物擴展×××的一個體現。
2、關鍵字:interface
3、格式:interface 接口名{//抽象功能}
4、接口的子實現類格式:class 類名+impl implements 接口名{}
5、特點:不能實例化。
6、接口成員特點
(1)成員變量:是一個常量,不能修改,並且有默認修飾符public static final;
(2)構造方法:接口不存在構造方法;
(3)成員方法:不能有方法體,都是抽象方法,有默認修飾符:public abstract。
7、接口、類的關系
(1)類與類之間的關系:繼承關系,只支持單繼承,不支持多繼承,可以多層繼承。
(2)類與接口的關系:實現關系,一個類繼承另一個類的同時,還可以實現多個接口。
(3)接口與接口的關系:是一種繼承關系,既可以單繼承,也可以多繼承。
8、接口與抽象類的區別
(1)成員區別
成員變量:
抽象類:既可以常量,也可以是變量。
接口:只能是常量,默認的修飾符:public static final
構造方法:
抽象類:有構造方法,無參/有參 (給對象進行初始化的)。
接口:無構造方法。
成員方法:
抽象類:可以有抽象方法,也可以有非抽象方法。
接口:只有抽象方法 ,默認的修飾符:public abstract
(2)類與類/類與接口/接口與接口關系的區別
類與類之間的關系:繼承關系,只支持單繼承,不支持多繼承,可以多層繼承。
類與接口的關系:實現關系,一個類繼承另一個類的同時,還可以實現多個接口。
接口與接口的關系:是一種繼承關系,既可以單繼承,也可以多繼承。
接口1 extends 接口2,接口3...接口 n
(3)設計原則的區別
抽象類:繼承關系,體現的是一種"is a"的關系(A是B的一種)。
接口:類和接口,實現關系,體現的是一種" like a"的關系(擴展功能)。
9、實際開發中使用頻率
(1)接口多態:使用最多。
(2)抽象類多態:比較多。
(3)具體對象的創建:經常會使用。
10、舉例
抽象類:
子實現類學生:
子實現類老師:
接口+測試:
七、內部類
1、概述:在B類內部定義A類,則A類為B類的內部類。
2、內部類訪問外部類:內部類可直接訪問外部類的成員,包括私有成員。
3、外部類訪問內部類:通過創建內部類對象的方式間接訪問。
訪問格式:外部類名.內部類名 對象名=外部類對象.內部類對象。
例如:
4、分類
(1)成員內部類:在外部類的成員位置。可直接訪問外部類的成員,包括私有成員。
成員內部類修飾符:A、private:(作用)保證了數據的安全性。B、static:把靜態內部類看成外部類成員,其特點是靜態內部類訪問外部類數據,該數據必須用static修飾。
例如:
(2)局部內部類:在外部類的局部位置。可訪問外部類的成員,包括私有。在外部類的局部位置去訪問內部類的成員方法時,需要在局部位置創建內部類對象,通過對象去訪問。
例如:
(3)匿名內部類
A、前提:有類(該類可以是具體類也可以是抽象類)或接口。
B、格式:new 類名或接口名{ 方法重寫();}
C、本質:繼承了該類或實現了該接口子類對象。
D、匿名內部類面試題:補全代碼,在控制臺上輸出(“Hello World”)。截圖如下:
八、形式參數與返回值
1、概述:形式參數是基本類型,對實際參數無影響;形式參數是引用類型(類、抽象類、接口),影響實際參數,情況如下。返回值是基本類型時,用對應的基本類型接收數據即可;返回值若為引用類型,情況如下。
2、形式參數為具體類:需要提供該類對象。
返回值:該類對象。
例如:
3、形式參數為接口:需要提供接口的子實現類,通過子實現類進行實例化(接口多態)。
例如:
4、形式參數為抽象類:需要提供該抽象類的子類,以抽象類多態的形式創建對象。
返回值:需要當前抽象類的子類對象(抽象類多態)。
例如:
九、overload與override區別
(1)overload:方法重載,方法名一樣,參數不同(個數或類型不同),與返回值無關。
(2)override:方法重寫,子類定義一個與父類一樣的方法聲明,繼承中使用。
java面向基本知識以及二維數組基本知識