類與物件(面向物件程式設計的關鍵思想)
面向物件程式設計的重點:類與物件
類與物件的一些基本概念
-
類的定義格式:
[修飾符] class [extents 父類名] [implements 介面列表]{
... //類體部分
}
-
類體部分包括類的屬性和方法。
-
物件的建立及引用:定義Java類後,就可以使用“new+構造方法”來建立類的物件,並將建立的物件賦值給某個引用變數,進而通過”引用變數名.屬性(或方法)“來訪問物件的屬性(或方法)。
-
建立物件即為對類的例項化,當建立了一個物件時,系統將自動呼叫物件的構造方法,並給例項變數賦初值。
構造方法
-
構造方法的特點:
-
方法名要與類名一致
-
構造方法沒有返回值
-
-
構造方法的主要作用就是給物件的屬性賦值
-
需要注意的是:當類中沒有建立構造方法時,系統將自動建立一個無引數且為空的構造方法。若建立了有參的構造方法,系統將不再自動建立無參構造方法,此時需要自己建立,否則當建立的物件不含引數時,系統將報錯。
-
建立建構函式的快捷方式:Alt+ins
變數的作用域
1. 變數的作用域也稱變數的有效範圍,它是指程式中的一個區域,變數在其作用域內可以被訪問。作用域也決定Java執行系統什麼時候為變數建立和釋放記憶體。根據變數在程式中宣告的位置,可以將變數分為以下4種情形:
(1)成員變數:其作用域是整個類體。成員變數定義時系統會自動賦預設初值。成員變數包括:例項變數(例項變數又稱類的屬性,例項變數必須通過物件來訪問)、類變數(靜態變數)、常量。舉例:
public class Variable{
public int a; //例項變數
private String b; //例項變數
public static int c; //類變數(加了static修飾符)
final String d="常量"; //常量
}
(2)區域性變數:在方法內部或一小段程式碼中定義的變數。方法內定義的變數在整個方法內有效,而迴圈內定義的區域性變數只在迴圈內有效。如:
public class Variable{
public static void method{ //定義了一個method方法
int a=1;
int b=2; //變數a,b的作用域為method方法內
for(i=0;i>9;i++){ //變數i由於實在迴圈塊中定義的,所以其作用域僅為整個for迴圈
a++;
b--;
}
}
}
注意:區域性變數在定義時,系統不會賦預設值。
(3)方法引數:作用域是整個方法(與區域性變數相同,只不過定義的位置不同,方法引數定義在形參表中,而區域性變數則定義於方法體內)。如:
public class Variable{
public void method(int a){
a++;
} //方法參變數在整個方法內有效
}
(4)異常處理引數:與方法引數作用類似,其作用範圍是catch後面跟隨的異常處理塊。
-
變數的作用域舉例
public class Scope{
int x=1; //成員變數x
int y; //成員變數y
public void method(int a){ //方法參變數a
int x=8; //區域性變數x,將成員變數x隱藏
for(int i=1;i<a;i++) //控制迴圈體的區域性變數i
y++;
System.out.println("x="+x+",y="+y+",a="+a);
}
public static void main(String[] args){
Scope x=new Scope(); //方法內定義的區域性變數
x.method(6);
}
}
【執行結果】
x=8,y=5,a=6
類變數和靜態方法
用static修飾符修飾的屬性是僅屬於類的靜態屬性,相應的成員變數變數也稱類變數或靜態變數。
-
類變數的訪問形式
-
類變數可以通過類或物件名作字首來訪問,在本類中可以直接以變數名訪問。
-
靜態變數在儲存上歸屬類空間,不依賴如何物件,通過物件來訪問靜態變數實質上還是訪問類空間的那個變數。因此,類變數的值時統一的,對於同一類變數,如何地方對其值修改,其他地方的類變數也會隨之修改為相同值。
-
靜態方法
用static修飾符修飾的方法叫靜態方法。可通過類或物件訪問。在靜態方法的方法體內,可以處理類變數,也可以訪問其他靜態方法,但絕不能訪問如何歸屬物件空間的變數或方法(即非靜態變數或方法)。