title: Java基礎(chǔ)語法(9)-面向?qū)ο笾惖某蓡T blog: CSDN data: Java學(xué)習(xí)路線及視頻
1.面向過程與面向?qū)ο?/h3>面向過程(POP) 與 面向?qū)ο?OOP)
二者都是一種思想,面向?qū)ο笫窍鄬τ诿嫦蜻^程而言的。面向過程,強調(diào)的是功能行為,以函數(shù)為最小單位,考慮怎么做。面向?qū)ο螅?span style="color:CC3366">將功能封裝進對象,強調(diào)具備了功能的對象,以類/對象為最小單位,考慮誰來做。 面向?qū)ο蟾訌娬{(diào)運用人類在日常的思維邏輯中采用的思想方法與原則,如抽象、分類、繼承、聚合、多態(tài)等。 面向?qū)ο蟮娜筇卣?/span> 封裝 (Encapsulation) 繼承 (Inheritance) 多態(tài) (Polymorphism)
面向過程
面向?qū)ο?/strong>
面向?qū)ο蟮乃枷敫攀?/strong>
程序員從面向過程的執(zhí)行者轉(zhuǎn)化成了面向?qū)ο蟮?span style="color:CC3366">指揮者 根據(jù)問題需要,選擇問題所針對的現(xiàn)實世界中的實體。 從實體中尋找解決問題相關(guān)的屬性和功能,這些屬性和功能就形成了概念世界中的類 把抽象的實體用計算機語言進行描述,形成計算機世界中類的定義。即借助某種程序語言,把類構(gòu)造成計算機能夠識別和處理的數(shù)據(jù)結(jié)構(gòu)。 將類實例化成計算機世界中的對象。對象是計算機世界中解決問題的最終工具。
2.類和對象面向?qū)ο蟮母攀?/strong>
類的語法格式
修飾符 class 類名 {
屬性聲明;
方法聲明;
}
說明:修飾符public:類可以被任意訪問類的正文要用{ }括起來
public class Person{
private int age ; //聲明私有變量 age
public void showAge(int i) { //聲明方法showAge( )
age = i;
}
}
3.對象的創(chuàng)建和使用創(chuàng)建對象語法
類名 對象名 = new 類名();
Animal xb=new Animal();
對象的使用
對象名.對象成員的方式訪問對象成員(包括屬性和方法)
Java中的類和對象
//Animal類
public class Animal {
public int legs;
public void eat(){
System.out.println(“Eating.”);
}
public viod move(){
System.out.println(“Move.”);
}
public class Zoo{
public static void main(String args[]){
//創(chuàng)建對象
Animal xb=new Animal();
xb.legs=4;//訪問屬性
System.out.println(xb.legs);
xb.eat();//訪問方法
xb.move();//訪問方法
}
}
4.類的成員之一: 屬性語法格式
修飾符 數(shù)據(jù)類型 屬性名 = 初始化值 ; 說明1: 修飾符 說明2: 數(shù)據(jù)類型 說明3:屬性名
public class Person{
private int age; //聲明private變量 age
public String name = “Lila”; //聲明public變量 name
}
變量的分類:成員變量與局部變量
class Person{
//1.屬性
String name;//姓名--成員變量
int age = 1;//年齡
boolean isMale;//是否是男性
public void show(String nation){
//nation:局部變量
String color;//color:局部變量
color = "yellow";
}
}
//測試類
class PersonTest{
public static void main(String[] args){
Person p = new Person();
p.show(“USA”);
}
}
對象屬性的默認初始化賦值
5.類的成員之二: 方法什么是方法(method、函數(shù)):
方法是類或?qū)ο笮袨樘卣鞯某橄?,用來完成某個功能操作。在某些語言中也稱為函數(shù)或過程。 將功能封裝為方法的目的是,可以實現(xiàn)代碼重用,簡化代碼 Java里的方法不能獨立存在,所有的方法必須定義在類里。
public class Person{
private int age;
public int getAge() { //聲明方法getAge()
return age;
}
public void setAge(int i) { //聲明方法setAge
age = i; //將參數(shù)i的值賦給類的成員變量age
}
}
方法的聲明格式:
修飾符 返回值類型 方法名(參數(shù)類型 形參1, 參數(shù)類型 形參2, ….){
方法體程序代碼
return 返回值;
}
修飾符:public,缺省,private, protected等
方法的分類
| 無返回值 | 有返回值 |
---|
無形參 | void 方法名(){} | 返回值的類型 方法名(){} | 有形參 | void 方法名(形參列表){} | 返回值的類型 方法名(形參列表){} |
注意 方法被調(diào)用一次,就會執(zhí)行一次 沒有具體返回值的情況,返回值類型用關(guān)鍵字void表示,那么方法體中可以不必使用return語句。如果使用,僅用來結(jié)束方法。 定義方法時,方法的結(jié)果應(yīng)該返回給調(diào)用者,交由調(diào)用者處理。 方法中只能調(diào)用方法或?qū)傩?,不可以在方法?nèi)部定義方法。
方法的重載
//返回三個整數(shù)的和
int add(int x,int y,int z){
return x+y+z;
}
方法中的可變個數(shù)形參
聲明格式:方法名(參數(shù)的類型名 ...參數(shù)名) 方法參數(shù)部分指定類型的參數(shù)個數(shù)是可變多個:0個,1個或多個 可變個數(shù)形參的方法與同名的方法之間,彼此構(gòu)成重載 可變參數(shù)方法的使用與方法參數(shù)部分使用數(shù)組是一致的 方法的參數(shù)部分有可變形參,需要放在形參聲明的最后 在一個方法的形參位置,最多只能聲明一個可變個數(shù)形參
//可變參數(shù)
public void test(String a,int... b){
for (int i : b) {
Log.i("test:","b:" + i);
}
}
6.類的成員之三: 構(gòu)造器構(gòu)造器的特征 構(gòu)造器的作用
Person p = new Person(“Peter”,15);
語法格式
修飾符 類名 (參數(shù)列表) {
初始化語句;
}
//創(chuàng)建Animal類的實例
//調(diào)用構(gòu)造器,將legs初始化為4。
public class Animal {
private int legs;
// 構(gòu)造器
public Animal() {
legs = 4;
}
public void setLegs(int i) {
legs = i;
}
public int getLegs() {
return legs;
}
注意 Java語言中,每個類都至少有一個構(gòu)造器 默認構(gòu)造器的修飾符與所屬類的修飾符一致 一旦顯式定義了構(gòu)造器,則系統(tǒng)不再提供默認構(gòu)造器 一個類可以創(chuàng)建多個重載的構(gòu)造器 父類的構(gòu)造器不可被子類繼承
7.類的成員之四: 代碼塊代碼塊的作用: 代碼塊的分類: 靜態(tài)代碼塊:用static修飾的代碼塊 可以有輸出語句。 可以對類的屬性、類的聲明進行初始化操作。 不可以對非靜態(tài)的屬性初始化。即:不可以調(diào)用非靜態(tài)的屬性和方法。 若有多個靜態(tài)的代碼塊,那么按照從上到下的順序依次執(zhí)行。 靜態(tài)代碼塊的執(zhí)行要先于非靜態(tài)代碼塊。 靜態(tài)代碼塊隨著類的加載而加載,且只執(zhí)行一次。
非靜態(tài)代碼塊:沒有static修飾的代碼塊 class Person {
public static int total;
static {
total = 100;
System.out.println("in static block!");
}
}
public class PersonTest {
public static void main(String[] args)
{
System.out.println("total = " + Person.total);
System.out.println("total = " + Person.total);
}
}
可以有輸出語句。 可以對類的屬性、類的聲明進行初始化操作。 除了調(diào)用非靜態(tài)的結(jié)構(gòu)外,還可以調(diào)用靜態(tài)的變量或方法。 若有多個非靜態(tài)的代碼塊,那么按照從上到下的順序依次執(zhí)行。 每次創(chuàng)建對象的時候,都會執(zhí)行一次。且先于構(gòu)造器執(zhí)行。
程序中成員變量賦值的執(zhí)行順序
8.類的成員之五: 內(nèi)部類內(nèi)部類概念
當(dāng)一個事物的內(nèi)部,還有一個部分需要一個完整的結(jié)構(gòu)進行描述,而這個內(nèi)部的完整的結(jié)構(gòu)又只為外部事物提供服務(wù),那么整個內(nèi)部的完整結(jié)構(gòu)最好使用內(nèi)部類。 在Java中,允許一個類的定義位于另一個類的內(nèi)部,前者稱為內(nèi)部類,后者稱為外部類。 內(nèi)部類的名字不能與包含它的外部類類名相同;
分類
成員內(nèi)部類作為類的成員的角色
和外部類不同,Inner class還可以聲明為private或protected; 可以調(diào)用外部類的結(jié)構(gòu) Inner class 可以聲明為static的,但此時就不能再使用外層類的非static的成員變量;
成員內(nèi)部類作為類的角色
可以在內(nèi)部定義屬性、方法、構(gòu)造器等結(jié)構(gòu) 可以聲明為abstract類 ,因此可以被其它的內(nèi)部類繼承 可以聲明為final的 編譯以后生成OuterClass$InnerClass.class字節(jié)碼文件(也適用于局部內(nèi)部類)
注意
非static的成員內(nèi)部類中的成員不能聲明為static的,只有在外部類或static的成員內(nèi)部類中才可聲明static成員。 外部類訪問成員內(nèi)部類的成員,需要“內(nèi)部類.成員”或“內(nèi)部類對象.成員”的方式 成員內(nèi)部類可以直接使用外部類的所有成員,包括私有的數(shù)據(jù) 當(dāng)想要在外部類的靜態(tài)成員部分使用內(nèi)部類時,可以考慮內(nèi)部類聲明為靜態(tài)的
class Outer {
private int s;
public class Inner {
public void mb() {
s = 100;
System.out.println("在內(nèi)部類Inner中s=" + s);
}
}
public void ma() {
Inner i = new Inner();
i.mb();
}
}
public class InnerTest {
public static void main(String args[]) {
Outer o = new Outer();
o.ma();
}
}
|