物件導向程式設計OOP
面向
物件導向和麵向過程
物件導向oop-分類的思維方式-本質——以類的方式組織程式碼,以物件的組織(封裝)資料
抽像+封裝+繼承+多型
認識上-先有物件(具體的事物)再有類(對物件的抽象) 程式碼上-先有物件再有類(類是物件的模板)
程序導向-線性步驟分析方式
類-描繪一系列事物的共同特徵並將它抽象出來-比如哺乳動物
物件-具體的示例-比如人
使用new關鍵字建立物件-分配記憶體空間
預設初始化
對類中的構造器(必須掌握)進行呼叫
構造器-構造器又叫構造方法,在進行建立物件時必須要呼叫的
-
必須和類的名字相同
-
必須沒有返回型別,也不能寫void
總結
1、類與物件
類是一個抽象的模板,物件是一個具體的例項
2、方法
定義,呼叫
3、對應的引用
引用型別:基本型別(8)以外
物件是透過引用來操作的:具體的棧,而真實屬性是在堆中
4、屬性:欄位field 成員變數
預設初始化:數字-0,char-u000,boolean-false,引用-null
賦值-修飾符 屬性型別 屬性名 = 屬性值;
5、物件的建立和使用
- 必須使用new關鍵字創造物件,且必須有構造器 Person moulixu = new Person();
- 物件的屬性 mouixu.name
- 物件的方法 moulixu.sleep()
6、類
靜態的屬性 屬性
動態的行為 方法
方法
1、回顧方法定義
//回顧方法定義
package oop;
public class a1 {
// main方法
public static void main(String[] args) {
}
/* 方法定義
修飾符 返回值型別 方法名(引數型別和引數名){
方法體;
return 返回值;
}
注:1、方法名-駝峰原則和見名知意
2、返回數值應該和定義型別相同
3、引數可定義多個
4、return和break
return代表運算結束返回結果,不再執行下一行程式碼;返回數值應該和定義型別相同
break跳出switch,結束迴圈
*/
public String sayHello(){
return "Hello,World";
}
//空方法
public void hello(){
return;
}
//比大小
public int max(int a,int b){
return a>b?a:b;//三元運算子,是就a,不是就b
}
}
2、回顧方法的呼叫-遞迴
/* 回顧方法的呼叫-遞迴
*/
package oop;
public class a2 {
public static void main(String[] args) {
//同態可以呼叫,不同態不可以
//靜態方法+static
a3.say();
//非靜態方法
//實列化這個類new; 物件型別 物件名 = 物件值;
a3 a3 = new a3();
a3.print();
//實際引數和形式引數的型別要一一對應!
int add = a2.add(3,5);
System.out.println(add);
//值傳遞
int a=1;
System.out.println(a);//輸出值唯1
a2.change(a);
System.out.println(a);//輸出值也為1
//引用傳遞:傳遞一個物件,本質還是值傳遞
Person person = new Person();
System.out.println(person.name);//null
a2.cite(person);
System.out.println(person.name);//牟李旭
}
public static int add(int a,int b){
return a+b;
}
//返回值為空
public static void change(int a){
a=10;
}
public static void cite(Person person){
//person是一個物件,指向的Person person = new Person();這是一個具體的人,可以改變屬性
person.name="牟李旭";
}
}
//一個類裡面可以有多個class 但只能有一個public
//定義了一個Person類,有一個屬性name
class Person{
String name; //預設值為null
}
/*
//輔助學習方法的呼叫
package oop;
import java.sql.SQLOutput;
public class a3 {
//靜態方法
public static void say(){
System.out.println("靜態方法");
}
public void print(){
System.out.println("非靜態方法");
}
}
*/
3、類和new的使用
package oop;
//學生類-類是一個抽象的模板,透過new關鍵字創造具體的例項
//以類的方法組織程式碼,以物件的方式封裝程式
public class a4 {
//類裡面只有屬性和方法
// 屬性 欄位
String name;//預設null
int age;//預設零
//方法
public void study(){
System.out.println(this.name+"學生在學習");//this.就表示當前這個類
}
}
/* new的使用
package oop;
//一個專案應該只存在一個main方法
public class Application {
public static void main(String[] args) {
//類是抽象的,透過new需要例項化
//類例項化後會返回一個自己的物件!
//a4物件就是一個a4類的具體例項!-記住以後類的首字母大寫
a4 xiaoming = new a4();
a4 wangyi = new a4();
//a4中的是模板為空的,需要定義才能使用
System.out.println(xiaoming.name);//輸出為null
System.out.println(xiaoming.age);//輸出為0
xiaoming.name ="小明";
xiaoming.age =18;
System.out.println(xiaoming.name);//輸出為null
System.out.println(xiaoming.age);//輸出為0
}
}
*/
4、構造器的使用
/* 構造器的使用
alt+insert會生成構造器,根據選擇形成 select null生成無參
1、使用new關鍵字,本質是在呼叫構造器
2、用來初始化值
*/
package oop;
public class Application {
public static void main(String[] args) {
//使用new例項化了一個物件,即使原函式中什麼都沒有
People people1 = new People();//一旦定義了有參定義,無參就必須顯示定義,否則使用不了
People people2 = new People("xiaohei");//就會預設走有參構造器
System.out.println(people1.name);
System.out.println(people2.name);
}
}
/*
//輔助理解構造器使用的理解
package oop;
/*
java自動生成的class檔案
用idea開啟class檔案, 專案結構-Moduls-增加目錄-加入out-點選ok和applay-out中生成class檔案有構造器
結論1、一個類即使什麼也不寫,也會存在一個方法開啟clss可以看到
2、也可以自己定義構造器
都必須遵守兩條規則
(1). 必須和類的名字相同
(2). 必須沒有返回型別,也不能寫void
3、this.表示當前這個類,後面跟引數
注意點:定義有參構造以後,如果想使用一個無參構造,特別的定義一個無參構造
*/
public class People {
String name;
//例項化初始值
//顯示的定義構造器
//無參構造器
public People(){
this.name = "xiaobai";
}
//有參構造器:一旦定義了有參定義,無參就必須顯示定義
public People(String name){
this.name =name;//this.name表示的是類,而後面的name表示的是引數
}
}
*/