1.類與對象:類是具備相同屬性和方法的一組對象的集合,類是一組對象的高度抽象,對象是類的一個具體的實現。java
2.全部類均可以抽象爲頂級類Object編程
3.權限設置this
1. 結構spa
[權限修飾符] 返回值 方法名(參數列表,.....){}
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
ex:
public String sayHello(String name,int age){
return "Hello,"+name+age;
}
//返回本身定義的類型
public Userinfos getUser(int age){
Userinfos u = new Userinfos();
u.age =age;
return u;
}
//無返回值
public void printer(String name){
System.out.println(name);code
}對象
2. 傳值和傳址
1. 做爲方法的參數,通常稱爲形參,而傳入的數據通常稱爲實參
2. 若是形參的類型是基本類型和String類型,那麼實參實際傳入的只是一個複製過的值,形參修改不會影響到實參,除此之外全部其餘的類型,在傳遞的時候實際傳遞的是地址,會形成實參和形參其實是同一個對象,全部形參修改會影響到外部實參。
blog
3. 初識重寫和重載
1. 重寫:在子類中從新覆蓋父類中的方法,要求是方法名一致,參數列表一致,返回值一致,權限子類大於或等於父類的權限(簡稱:方法原形一致)而方法內容從新修改.
2. 重載:在同一個類中,方法名相同,參數列表不相同(包括3種狀況:1.參數類型不一樣 2.參數個數不一樣3.類型次序不一樣) ,與權限和返回值無關
3. 重載的優勢:減小用戶記憶多種不一樣的方法,要求同一類型的行爲才能夠設置爲一系列同名的方法繼承
//重寫(原形與父類一致,權限>=父類權限)
public String toString() {
return id+code+name+pwd+age;
}
//重載(注意參數與同類的其餘同名方法不能同樣)
public String toString(String s){
return id+name;
}
public String toString (int i){
return name+pwd;
}
public String toString(int a,String b){
return "111";
}
//重載與權限和返回類型無關
int toString(String a,int b){
return 333;
}接口
1.static 靜態關鍵字內存
static可使用在屬性和方法的前面,表明該屬性或方法是屬於類的方法和屬性,在內存的表現上使用該關鍵字的屬性和方法,都只有惟一的一個副本,調用static定義的屬性和方法,通常只須要用類名.屬性(方法名)就好,不需new
//靜態屬性
public static int i=10;
//靜態方法
public static String eee(){
return "123";
}
//靜態方法或屬性的調用方法
類名.屬性(方法名)
ex:
Demo.i;
Demo.eee();
2. this關鍵字
this關鍵字表明的是當前對象,其實是由JVM(java虛擬機),從方法的第一個參數位置,使用隱藏形式,傳輸進去,全部該關鍵字只能在方法的內部使用。
PS:
1.非靜態方法調用靜態的方法或屬性能夠直接調用
2.靜態方法不能直接調用非靜態的屬性和方法
3.靜態的方法中不能使用this關鍵字
4.使用this()調用其餘構造器時,必須把該代碼放在構造器的第一句位置上
3. 構造器
1. 構造器又稱爲構造方法,構造方法做用是用於數據初始化.
2. 構造器寫法要求:與類同名\沒有返回值
public class Demo{
public Demo(){
}
}
3.構造器在用戶new的時候,JVM會自動調用.用戶本身不能調用
4. 在用戶不建造構造器時,JVM會給類自動創建一個無參的構造器(同上例),可是用戶一旦定義了一個構造器,那麼JVM就再也不會建造無參構造.
1. java中的繼承使用關鍵字extends
public class Admin2 extends Admin{
}
2. java中的繼承是單根繼承
3. java中父類的構造器,子類沒法繼承. 父類的私有方法 雖然子類能夠繼承,但沒法使用
4. 父子構造器運行順序: 首先父類的靜態屬性>父類靜態塊>子類靜態屬性>子類靜態塊>父類的成員變量>父類構造>子類成員變量>子類構造
5. 靜態塊 在代碼中只會執行一次
6. 在一個類中,若是多個(兩個或兩個以上)方法有相同的代碼,則抽出編寫共享方法.若是再多個(兩個或兩個以上)類中有相同的方法或屬性則提取父類.
7. super關鍵字表明父類
1. super.[方法或屬性] 在子類中調用父類的屬性和方法
2. super() 從子類中向父類的構造器傳參
8. 多態:
1. 多態形式: 重寫和重載
2. 多態使用:一般咱們把父類做爲方法的參數,而把任意的子類做爲實參傳遞給該參數,JVM會自動根據傳入的子類,執行子類中的方法
3. 上轉型:把子類填充到父類中,只可調用子類與父類重疊的部分代碼稱爲上轉型
4. 下轉型:把填充了子類的父類,再轉回帶該子類的過程稱爲下轉型
ps:
1. 上轉型後看到的雖然是父類,實際上JVM知道該類仍是子類
2. 下轉型必須是轉型前的子類類型,不然會形成ClassCastException異常
Father fat = new Son();//上轉型
Son son = (Son) fat;//下轉型
1.抽象類的關鍵字是abstract
2. 抽象類格式:
public abstract class Father {
public Father(){
System.out.println("父親");
}
public abstract void eat();//但願子類實現的抽象方法
protected void money(){
System.out.println("傳給兒子");
}
}
3. 抽象類中的抽象方法是但願子類可以重寫該抽象方法
4. 抽象類因爲有部分方法沒有實現因此不能new 可是因爲抽象類能夠被繼承 因此抽象類能夠有本身的構造方法
5. 抽象類中能夠沒有抽象方法(可是沒有什麼意義) 抽象類中能夠全部方法都是抽象方法(通常代碼開發中不會這麼寫,代碼會轉爲interface)
6. 接口關鍵字 interface ,子類實現接口使用關鍵字implements
7. 接口中的全部方法 都是公開的(public) 接口中不能有任何方法的實現,空實現也不能夠
8. 接口的主要做用有兩個:
1. 解耦 在代碼開發時,全部的功能實現通常都有自身的實現時間,但考慮到大型項目開發時,若是有前後開發次序會大幅下降開發進度,使用接口能夠將各個程序之間的關聯關係斬斷,實現各個代碼獨自編程,不會影響其餘程序開發。而接口開發中最難的就是先期對接口的定義
2. 多重繼承
9. 接口能夠默認認爲也是一個特殊的父類,可是接口不能new 同時因爲接口與子類是實現關係,因此接口中也沒有構造器的存在,同時接口開發中可使用上下轉型的概念(多態)
1. 接口能夠繼承接口,但不能implements接口
public interface 川菜廚師接口 extends 廚師接口 {
public void 麻婆豆腐();
}
2. 接口開發中能夠在父類接口中寫入全部子接口共有的方法,而每一個子接口中寫本身獨有的方法原型,咱們將這種狀況稱爲接口隔離
3. 接口中有屬性的存在,可是全部定義的屬性都是常量,所有公開靜態.
4. 常量的運用場合
1. 能夠接口中定義常量 也能夠在任意類中定義常量
2. 一般定義常量的目的是爲了方便用戶記憶對應輸入值的各類類型
public interface IDvdHandler {
public static final int NULLVAL=0;
public static final int BYDVDNO=1;
public static final int BYDVDNAME=2;
public int findPos(int type,Object val);
}
5. 接口抽出方法
1. 當兩個或兩個以上的類中有共同的行爲(原型相同) 則提取接口
1. Throwable是全部Error和Exception的父類
2. Exception是全部異常的頂級父類
3. 異常的做用是爲了防止程序因爲輸入的信息有問題形成程序不可以順利執行時,程序猿採用異常機制對該類錯誤進行處理,保證程序繼續運行下去,而錯誤程序猿不能進行處理
4. 被動捕獲異常一般使用try{}catch(){}finally{}
5. 三個單詞可以組合狀況
1. try...catch
2. try...catch...catch
3. try...finally
4. try..catch..finally
6. throw和throws 做用是主動拋出異常,一般使用以下格式:
try {
System.out.println(mt.sayHello(sss));
System.out.println("須要捕獲異常的代碼塊");
} catch (Exception e) {
System.out.println("只有try代碼中出現該類型的異常才執行的部分");
}finally{
System.out.println("不論是否有異常都必定要執行的部分");
}
public String sayHello(String name) throws Exception{
if(name.equals("123")){
throw new NullPointerException("兄弟不要亂輸入");
}
return name+",Hello!";
}