文章摘要
1、構造方法
2、重載
3、重寫
4、方法參數以及傳遞
5、遞歸
6、繼承
7、多態
8、訪問修飾符
9、static修飾符
10、final修飾符
11、abstract修飾符
12、interface接口
一、類
在Java中,類是對象的抽象概念。在一個類中,包括屬性、方法等。
public class 計算器 {
//1、定義類成員變量mCurrentResult : [數據類型] [變量名]
public String mCurrentResult;
/**
* 2、方法
* 將結果輸出到屏幕
* @param message
*/
public void print(String message){//message局部變量
mCurrentResult = message;
System.out.println("計算結果:"+mCurrentResult);
}
}
類的初始化以及使用:
//使用new關鍵字,得到一個計算器對象 calc。
計算器 calc = new 計算器();
//在計算器上,打印 0.
calc.print("0");//計算結果:0
類名:
- 類名使用英文來命名,不建議使用中文。
- 類名首字母大寫
類名最好和實際使用的場景有意義,例如:Person,比Aaa要好上太多。
二、屬性
在類中,可以定義靜態常量,也可以定義變量,這些都屬于類的屬性。變量按照作用范圍,又分為成員變量和局部變量。格式:【數據類型 名稱 = 值】
如上文的代碼案例:mCurrentResult 成員變量,message局部變量。
三、方法
3.1、方法的四要素:方法返回值類型、方法名稱、形式參數、方法體。
//【修飾符】 【返回值類型】 【方法名稱】(形式參數列表){
// //方法實現主體
// //return 返回值。
// }
public int sum(int number1,int number2){
return number1+number2;
}
3.2、構造方法:
構造方法:
1、方法名必須與類名完全匹配。
2、不含有返回類型
3、不能被描述符修飾
ps:當定義一個類時,會默認含有一個隱式、無參構造方法。
public 計算器(){
System.out.println("歡迎使用計算器");
}
public 計算器(String msg){
this.mCurrentResult = msg;
System.out.println("初始屏幕顯示:"+msg);
}
3.3、方法重載
重載:在一個類中,含有相同的方法名稱,但是:參數列表(參數的類型、個數、順序)不同的多個方法。例如:3.2中的兩個構造方法。
3.4、方法重寫
重寫:在一個類中,子類對父類中的方法,進行重新實現。擁有相同的方法名稱、返回值、形參列表。
- 重寫方法不能比被重寫的方法又嚴格修飾權限。
- static修飾的方法,無法被重寫。
3.5、方法參數以及傳遞
Java語言中,方法中參數的賦值,只采用傳值的方式,按照類型又分為:基本數據類型、引用數據類型。
基本數據傳遞:
int x = 5;
System.out.println("調用前:"+x);
change(x);
System.out.println("調用后:"+x);
public static void change(int x){
x = 300;
System.out.println("執行中:"+x);
}
輸出:
調用前:5
執行中:300
調用后:5
引用數據傳遞:
calc.mCurrentResult = "調用方法前";
System.out.println("方法調用前:"+calc.mCurrentResult);
change(calc);
System.out.println("方法調用后:"+calc.mCurrentResult);
public static void change(計算器 calc){
calc.mCurrentResult = "調用change方法";
System.out.println("方法執行中:currentResult:"+calc.mCurrentResult);
}
輸出:
方法調用前:調用方法前
方法執行中:currentResult:調用change方法
方法調用后:調用change方法
3.6、遞歸調用
//計算從1到10的加法和
int sumCount = sum(10);
System.out.println("sumCount is:"+sumCount);
private static int sum(int n){
if(n==1){
return 1;
}else{
return n+**sum(n-1)**;
}
}
四、this關鍵字
this:當前對象的引用。
public 計算器(String mCurrentResult){
this();
this.mCurrentResult = mCurrentResult;
System.out.println("初始屏幕顯示:"+mCurrentResult);
}
- 當方法的參數名稱與類的成員變量相同時,使用this可以用來明確變量的作用范圍。例如:上面的代碼,方法的mCurrentResult與類的成員變量mCurrentResult,相同。
- 調用本類的其他構造方法,如上面的例子中的this();
** 五、繼承 **
1、類可以繼承父類,成為一個子類。2、繼承是“is-a”關系。3、子類可以通過繼承,來獲得父類的特性。4、Java只支持單繼承:一個類只能有一個父類,但一個父類可以派生多個子類。
public class Person {
public String name;
public Person(String name){
this.name = name;
}
public String toDesc() {
return "Person [name=" + name + "]"
+",兩條胳膊,兩條腿。";
}
}
Super:同“this”關鍵字一樣,Super代表父類的引用
public class 稻草人 extends Person{
public 稻草人(String name) {
super(name);
}
@Override
public String toDesc() {
return super.toDesc();
}
}
六、多態
1、子類可以自動向上轉型為父類型。
2、父類型要轉換為子類型,必須強制類型轉換。但強轉有風險。比如:類型轉換操作。
java.lang.ClassCastException
3、可以使用instance of來甄別對象類型。
//1、初始化基本的人對象
Person person = new Person("某某某");
System.out.println(person.toDesc());//Person [name=某某某],兩條胳膊,兩條腿。
//2、向上轉型
Person 稻草Person = new 稻草人("衛兵");
System.out.println(稻草Person.toDesc());//名字叫做衛兵的稻草人,兩條胳膊,一條腿。
//3、可以通過instance of來甄別對象的類型
boolean isPersion = 稻草Person instanceof Person;
System.out.println(isPersion?"稻草Person 是 Person。":"稻草Person不是Person類型。");//稻草Person 是 Person。
//4、向下轉型,需要強制類型轉換,將類型為"Person"的稻草Person,強制轉換為 稻草人。
稻草人 daocao = (稻草人) 稻草Person;
System.out.println(daocao.toDesc());//名字叫做衛兵的稻草人,兩條胳膊,一條腿。
七、訪問修飾符
private:私有的。只有在類中才能訪問,只能修飾屬性和方法。
protected:受保護的。該類以及其成員均可以訪問,同一個包中的類也可以訪問。只能修飾屬性和方法,不能修飾類。
public:公開的。
Default:不使用修飾符。只有同一包中的類可以訪問。
八、static
使用static修飾的變量叫做靜態變量、修飾的方法叫做靜態方法,修飾的代碼塊叫做靜態代碼塊。
static屬于類共有,不屬于某個對象,優先加載。
public class 男人 extends Person{
static{
System.out.println("靜態代碼塊!");
}
public 男人(String name) {
super(name);
System.out.println("構造方法!");
}
public static void main(String args[]){
男人 man = new 男人("張三");
}
}
輸出:
靜態代碼塊!
構造方法!
靜態代碼塊中的方法,優于對象的構造方法而先執行。
九、final修飾符
final:終極
1、final修飾的類不能被子類繼承,所有方法都為隱式final方法。
2、final修飾的方法,不能被子類覆蓋
3、final修飾的變量,只能初始化一次。
十、abstract
abstract修飾的類,不能被實例化,即:不能通過new實例化
十一、接口Interface
抽象類型,編程超類型。
接口中定義的變量,默認為:public static final ,變量值不可修改。