面向对象核心技术
面向對象核心技術
一、抽象類與接口
1、抽象類
抽象類簡單來說就是表征一個對象是什么一種屬性。實例化即建立一個類的對象,而所謂抽象是指它之下沒有可以實例化的對象。
public abstract class ClassName {public void method(){System.out.println("test");}public static void main(String[] args){ClassName a=new ClassName(); //錯誤寫法a.method();} }報錯信息:
java:com.test.ClassName是抽象的;無法實例化java: com.test.ClassName是抽象的; 無法實例化 java:com.test.ClassName是抽象的;無法實例化
運行結果:
testtest test
抽象類不能實例化,靜態方法不需要實例化,將Java的這兩個特性相結合有助于理解本段代碼。
2、抽象方法
public abstract class ClassName {public abstract void method();public static void main(String[] args){} }只有聲明沒有實例的方法稱為抽象方法,抽象方法只能在抽象類中使用,不然會產生以下錯誤。
報錯信息:
java:com.test.ClassName不是抽象的,并且未覆蓋com.test.ClassName中的抽象方法method()java: com.test.ClassName不是抽象的, 并且未覆蓋com.test.ClassName中的抽象方法method() java:com.test.ClassName不是抽象的,并且未覆蓋com.test.ClassName中的抽象方法method()
3、繼承抽象類
public abstract class ClassName {public void method(){System.out.println("common method");}public abstract void method_abstract(); }public class ClassNames extends ClassName{@Overridepublic void method_abstract(){System.out.println("abstract method");}public static void main(String[] args){} }語法特點:子類重寫父類的抽象方法。
4、接口
接口都沒有方法實現,并且抽象程度更高。
public interface ClassName {public void method();public static void main(String[] args){} }public class ClassNames implements ClassName{@Overridepublic void method(){System.out.println("method");}public static void main(String[] args){} }二、異常處理
1、異常
| 檢查性異常 | 程序員無法預見其是否出現 | 否 | 用戶輸入了非法數據;要打開的文件不存在 |
| 運行時異常 | 可能被程序員避免的異常 | 是 | |
| 錯誤 | 脫離程序員控制的問題 | 是 | 內存溢出 |
此外網絡通信時連接中斷也是常見的異常。
2、異常分類
異常(Throwable)包括Error和Exception.
Exception下的異常分為兩大類,分別是Runtime異常和非Runtime異常。
Runtime異常:數組下標越界異常,空指針異常,對象類型強制轉換異常,以及數組存儲異常。
非Runtime異常(檢查異常):IOException,SqlException
3、try-catch格式
public class temp {public static void main(String[] args){try//用于監聽異常{int[] a=new int[3];for(int i=0;i<4;i++){System.out.println(a[i]);}}catch(IndexOutOfBoundsException a)//{System.out.println("IndexOutOfBoundsException");}} }運行結果:
0,0,0,IndexOutOfBoundsException0, 0, 0, IndexOutOfBoundsException 0,0,0,IndexOutOfBoundsException
4、try-catch-finally格式
在3中可增添這樣一行代碼:
finally {System.out.println("finish printIn process"); }運行結果增加finish printIn process,除此之外沒有其他變化。
5、throws/throw異常
public class temp {public static void main(String[] args){try//用于監聽異常{int[] a=new int[3];for(int i=0;i<4;i++){if(i==3){throw new IndexOutOfBoundsException("數組越界異常");}System.out.println(a[i]);}}catch(IndexOutOfBoundsException a)//{System.out.println("IndexOutOfBoundsException");}} }6、自定義異常
class MyException extends Exception { // 自定義的類MyException(String s) {super(s);} }三、實例
1、創建 Shape(圖形)類,該類中有一個計算面積的方法。圓形和矩形都繼承自圖形類,輸出圓形和矩形的面積。
public abstract class Shape {double a=10.0; //圓半徑或正方形邊長public abstract void size(); }public class Circle extends Shape{@Overridepublic void size() {System.out.println("S="+Math.PI*a*a);}public static void main(String[] args){Shape m=new Circle();m.size();} }public class Square extends Shape{@Overridepublic void size() {System.out.println("S="+a*a);}public static void main(String[] args){Shape n=new Square();n.size();} }2、創建工廠類,工廠類中有一個抽象的生產方法,創建汽車廠和鞋廠類,重寫工廠類中的抽象生產方法,輸出汽車廠生產的是汽車,鞋廠生產的是鞋。
public abstract class Factory {public abstract void process(); }public class Car extends Factory{@Overridepublic void process() {System.out.println("汽車廠生產的是汽車");}public static void main(String[] args){Factory m=new Car();m.process();} }public class Shoes extends Factory{@Overridepublic void process() {System.out.println("鞋廠生產的是鞋");}public static void main(String[] args){Factory m=new Shoes();m.process();} }參考資料:
1、https://github.com/datawhalechina/team-learning-program/blob/master/Java/7.%E6%8A%BD%E8%B1%A1%E7%B1%BB%E4%B8%8E%E6%8E%A5%E5%8F%A3.md
2、https://github.com/datawhalechina/team-learning-program/blob/master/Java/8.%20%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86.md
3、https://github.com/datawhalechina/team-learning-program/blob/master/Java/%E7%BB%83%E4%B9%A0%E9%A2%98%EF%BC%9A%E6%8A%BD%E8%B1%A1%E7%B1%BB%E4%B8%8E%E6%8E%A5%E5%8F%A3.md(實例出處)
4、搜索引擎及自己探索。
總結
- 上一篇: Scrapy设置headers、cook
- 下一篇: scrapy爬虫框架 (5. 避免被封措