JAVA的學習日記12
阿新 • • 發佈:2020-09-16
Java面向過程&面向物件
- 面向過程思想
步驟清晰簡單,第一步做什麼,第二步做什麼
面對過程適合處理一些較為簡單的問題
- 面向物件的思想
物以類聚,分類的思維模式,思考問題首先會解決問題需要哪些分類,然後對這些分類進行單獨思考。最後,才對某個分類下的細節進行面向過程的思索。
面向物件適合處理複雜的問題,適合處理需要多人協作的問題
- 對於描述複雜的事物,為了從巨集觀上把握、從整體上合理分析,我們需要使用面向物件的思路來分析整個系統。但是,具體到微觀操作,仍然需要面向過程的思路去處理。
什麼是面向物件
-
面向物件程式設計(Object-Oriented Programming, OOP)
-
面向物件程式設計的本質是:以類的方式組織程式碼,以物件的組織(封裝)資料
-
抽象
-
三大特性:
封裝
繼承
多型
- 從認識論角度考慮是先有物件後有類。物件,是具體的事物。類,是抽象的,是對物件的抽象。
- 從程式碼執行角度考慮是先有類後有物件。類是物件的模板。
package com.oop.Demo01; //Demo01 類 public class Demo01 { //main 方法 public static void main(String[] args) { } //回顧 /* 方法的定義: 修飾符 返回值型別 方法名(引數){ 語句塊 返回值 } */ public String sayHello(){ return "Hello, World"; } public void sayBye(){ return;//結束語句,沒有返回值 } public int max(int a, int b){ return a > b ? a : b; } /* 注意break、continue和return的區別: break:跳出switch語句,結束迴圈 return:結束一個方法,返回一個結果【可能是一個值,也可能為空】 */ //方法名:符合規範,見名知意【重要的時候不能隨便寫】 /* 引數列表: 引數的型別 引數名 引數【定長和不定長(...)】 */ }
回顧一下方法的呼叫
靜態和非靜態方法
package com.oop.Demo01; // public class Demo02 { public static void main(String[] args) { //靜態方法可以直接呼叫 Student.say(); //非靜態方法要先例項化這個類 用new方法 //物件型別 物件名 = 物件值; Student student = new Student(); student.sayHello(); } //這樣寫會報錯,原因: //static是和Demo02這個類一起載入的,在載入的時候b()還沒有被架載入,所以會報錯 public static void a(){ // b(); } //物件例項化之後才存在,所以一個已經存在的呼叫一個不存在的會報錯 public void b(){} }
package com.oop.Demo01;
public class Student {
//靜態發方法 static
public static void say(){
System.out.println("靜態類");
}
//非靜態類
public void sayHello(){
System.out.println("非靜態類");
}
}
值傳遞和引用傳遞
package com.oop.Demo01;
//值傳遞
public class Demo03 {
public static void main(String[] args) {
int a = 1;
System.out.println(a); //1
Demo03.change(a);
System.out.println(a); //1
}
public static void change(int a){
a = 10;
}
}
package com.oop.Demo01;
import com.cdoudou.method.Demo05;
//一個類裡面只能有一個public class,但是可以有多個class
//引用傳遞:本質還是值傳遞
public class Demo04 {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name); //null
Demo04.change(person);
System.out.println(person.name); //cdoudou
}
public static void change(Person person){
//person是一個物件:指向的是---->Person person = new Person();這是一個具體的人,可以改變屬性!
person.name = "coudou";
}
}
//定義了一個person類,有一個屬性:name
class Person{
String name;
}
this方法:指的就是當前的類
類和物件的關係
- 類是一種抽象的資料型別,它是對某一類事物整體描述/定義,但是並不能代表某一個具體的事物
動物、植物、手機、電腦....
Person類、Pet類、Car類等,這些類都是用來描述/定義某一類具體的事物應該具備的特點和行為
- 物件是抽象概念的具體例項
- 小明就是人的一個具體例項,小明家裡的旺財就是狗的一個具體例項
- 能夠體現出特點,展現出功能的是具體的例項,而不是一個抽象的概念
建立與初始化物件
- 使用new關鍵字建立物件
- 使用new關鍵字建立的時候,除了分配記憶體空間之外,還會給建立好的物件進行預設的初始化以及對類中構造器的呼叫
- 類中的構造器也稱為構造方法,是在進行建立物件的時候必須要呼叫的。並且構造器有以下兩個特點:
1.必須和類的名字相同
2.必須沒有返回型別,也不能寫void
- 構造器必須要掌握
主程式
package com.oop.demo02;
//一個專案應該只有一個main方法
public class Application {
public static void main(String[] args) {
//類:抽象的,需要例項化
//類例項化後會返回一個自己的物件
//student物件就是一個Student類返回的一個具體例項
Student xiaoming = new Student();
Student xiaohong = new Student();
System.out.println(xiaoming.name); //null
System.out.println(xiaoming.age); //0
xiaoming.name = "cdoudou";
xiaoming.age = 18;
System.out.println(xiaoming.name); //cdoudou
System.out.println(xiaoming.age); //18
xiaohong.name = "doudou";
xiaohong.age = 18;
System.out.println(xiaohong.name); //doudou
System.out.println(xiaohong.age); //18
}
}
Student類
package com.oop.demo02;
public class Student {
//屬性:
String name;
int age;
//方法:
public void study(){
System.out.println(this.name+"在學習");
}
}