1. 程式人生 > 實用技巧 >抽象類,介面,內部類,異常

抽象類,介面,內部類,異常

5.抽象類和介面

public class Action {
}

只要在前面加個 abstract 就變成了抽象類了

public abstract class Action {

}

package com.oop.Demo09;
//abstract 抽象類, extends 單繼承 但是 介面可以多繼承
public abstract class Action {
//約束,有人幫我們實現
//abstract 用在方法上就是抽象方法,只有方法名,沒有方法的實現
public abstract void doSomething();
}
/*
1.抽象類不能new,只能靠子類實現 :約束
2.抽象類裡面可以寫普通方法,
3.抽象方法必須在抽象類中
抽象的抽象: 約束

思考題
存在意義 就是 提高開發效率,後期可擴充套件性
*/

package com.oop.Demo09;
//抽象類的所有方法,繼承了它的子類。都必須要實現他的方法,除非子類也是抽象依次
public class A extends Action{
//重寫
@Override
public void doSomething() {

}

介面

介面只有規範 專業的約束!約數和實現分離,面向介面程式設計

介面的本質是契約,大家遵守

宣告類的關鍵字是class,而宣告介面的關鍵字是interface

實現類命名:public class UserServiceImpl implements UserService , Timer. . . 多個類(多個介面).. .{

User業務

package com.oop.Demo10;
//介面定義 interface 介面都需另建實現類 以Impl結尾
public interface UserService {
// 屬性定義預設都是靜態常量(public static final) 但不太在介面中定義
int AGE =20;
//介面中的所有定義都是抽象的 public abstract預設可以省略
//且介面中只有定義,需另建實現類
void run(String name);//可以定義引數
void age(int S1);
void grade(char A);
}

Time業務

package com.oop.Demo10;

public interface Timer {
void time();
}

使用者實施

package com.oop.Demo10;
// 一個類可以實現介面 implements,然後重寫裡面的方法
//抽象類中 extends 只能單繼承,介面可以多繼承
public class UserServiceImpl implements UserService, Timer {

@Override
public void run(String name) {

}

@Override /*方法重寫
public void age(int S1) {

}

@Override
public void grade(char A) {

}

@Override
public void time() {

}
}

介面作用

1.約束,

2.定義一些方法可以是不同的人使用 多個使用者

3.方法都是 public ststic 常量都是 public static final

4.介面不能被例項化,介面中沒有構造方法

5.通過implements 實現多個介面 implements UserService, Timer...... 但必須重寫方法

UserService介面

package com.oop.Demo10;
//介面定義 interface 介面都需另建實現類 以Impl結尾
public interface UserService {
// 屬性定義預設都是靜態常量(public static final)
// 但不太在介面中定義
int AGE =20;
//介面中的所有定義都是抽象的 public abstract預設可以省略
//且介面中只有定義,需另建實現類
void run(String name);//可以定義引數
void age(int S1);
void grade(char A);
}

Timer介面

package com.oop.Demo10;

public interface Timer {
void time();
}

實現類 UserServiceImpl

package com.oop.Demo10;
//抽象類中 extends 只能單繼承,介面可以多繼承
// implements可以實現多介面 然後重寫裡面的方法
public class UserServiceImpl implements UserService, Timer {

@Override
public void run(String name) {

}

@Override
public void age(int S1) {

}

@Override
public void grade(char A) {

}

@Override
public void time() {

}
}

6.內部類

匿名內部類: new 類名( ) . 方法 不需要例項化

package com.oop.InterDemo11;


public class Outer {
private int id =10;
public void out() {
System.out.println("外部類");
}

public class Inner {
public void in() {
System.out.println("內部類");
}

public void getId() {
System.out.println("可以獲得外部類的私有屬性以及方法");
}
}
public static class JingTai{
//靜態內部類(先載入靜態,其他都沒出生)就不能得到外部類的的屬性方法了


}

}

異常

1.Exception 意外 避免異常

2.Error 虛擬機器異常,AWT GUI圖形介面異常 JVM錯誤{ 1.StackOverFlow棧溢位 2.OutOfMemory 記憶體溢位}

異常處理5個關鍵字

try,catch,finally,throw,throws

異常的

package com.Exception;

public class Demo01 {
public static void main(String[] args) {
int a =1;
int b = 0;
// 在認為可能出現異常的語句Ctrl+Alt +T 捕獲異常
try {
System.out.println(a/b);
} catch (Exception e) {
e.printStackTrace();//列印錯誤的棧資訊
} finally {
}
//____________________________________________________________________
//假設要捕獲多個異常需要多個catch從小到大!
try{ //監控區域
System.out.println(a/b);
// new Demoo1().math(); 也可以呼叫方法
}catch (ArithmeticException x){ // catch(想要捕獲的異常型別!)
System.out.println("Exception");
}catch(Error d){
System.out.println("Error");
}catch(Throwable d){
System.out.println("Throwable");

}finally { //做處理善後工作都執行
System.out.println("系統出現問題");
}// finally可以不要 但是以後的 IO 資源用完 關閉使用
}

public void a(){ b();}
public void b(){ a();}
}

throw 主動丟擲異常 一般在方法中使用

public class Demo01 {
public static void main(String[] args) {
new Demo01().text(1,0);
}
public void text(int a ,int b){
if (b==0){
throw new ArithmeticException();
}
}

throws 方法中處理不了,在方法上丟擲異常

public class Demo01 {
public static void main(String[] args) {
try {
new Demo01().text(1,0);
} catch (Exception exception) {
exception.printStackTrace();
} finally {
}
} //假設方法中處理不了這個異常 方法主動丟擲異常
public void text(int a ,int b) throws ArithmeticException{
if (b==0){
throw new ArithmeticException();
}
}

使用 try catch 捕獲異常可以是程式不停止執行

自定義異常

  1. 建立自定義異常類

  2. 在方法中通過throw關鍵字丟擲異常

  3. 如果當前丟擲異常的的方法中處理異常,可以使用try-catch語句捕獲並處理,

    否則在方法中的宣告通過throws是關鍵字指明要丟擲剛給方法呼叫者的異常

  4. 在出現異常方法的呼叫中捕獲並處理異常