java——面向對象篇(上)

java——面向對象篇(一)


1.面向過程和麪向對象的區別

簡單來說:
面向過程(Procedure Oriented):是一種以過程爲中心的編程思想,強調的是功能行爲,以函數爲最小單位,考慮怎麼做。
面向對象(Object Oriented):將功能封裝進對象, 強調具備了功能 的 對象,以類對象爲最小單位,考慮誰來做。

2.Java語言的基本元素:類和對象

類(Class) 對象(Object) 都是面向對象的核心概念。

  • 類:是對一類事物的描述,是抽象的、概念上的東西。
  • 對象:是實際存在的該類事物的每個個體,是類實例化的,因此也稱爲實例

萬事萬物皆爲對象

比如,用人來舉例:
類 = 抽象概念的人;
對象 = 實實在在的人(例:馬雲、馬化騰…)

2.1 Java類及類的成員

  • 屬性:對應類中的成員變量
  • 行爲:對應類中的成員方法

不同語言有不同的命名,比如C++中稱方法函數

2.1.1 成員變量

成員變量的定義與普通變量的定義一樣。

數據類型 默認值
byte、short、int、long 0(整形零)
float、double 0.0(浮點零)
char ’ ’ (空格字符)
boolen false(邏輯假)
引用類型,例如String、數組 null(空值)
2.1.2成員方法
方法的定義

[權限修飾符] [返回值類型] 方法名([參數類型 參數名]){
…}
權限修飾符可以是private、public、protected

比如:在這個類中name、age、isMarried是屬性,walk()是方法。

public class Person {
	String name;
	int age;
	int Ismale;
	public void eat() {
		System.out.println("我會吃飯");
		
	}
	public void Showage() {
		System.out.println("我的年齡是"+age);
	}
}
可變個數形參的方法:
  • 可變個數形參的格式:數據類型…變量名
    例:person類中的showfriends方法
    public void showfriends(String...name) { System.out.println("我的朋友有好多朋友!!!"); }
  • 當調用可變個數形參的方法時,傳入的參數個數可以是:0個,1個,2個…
    例:person.showfriends("friend1","friend2"); person.showfriends("friend1","friend2","frident3");
  • 可變個數形參的方法與本類中方法名相同,形參不同的方法之間構成重載
    例:
	public void showfriends(String...name) {
		System.out.println("我的朋友有好多朋友!!!");
	}
	public void showfriends(String name) {
		System.out.println("我的朋友有一個朋友!!!");
	}
  • 可變個數形參的方法與本類中方法名相同,形參類型也相同的數組之間不構成重載。換句話說,二者不能共存
    如果是這種情況,這裏報錯了
    在這裏插入圖片描述
  • 可變個數形參在方法的形參中,必須聲明在未尾
    說明:String name 一定要在int i 之後
public void showfriends(int i,String...name ) {
		System.out.println("我的朋友有好多朋友!!!");
	}
  • 可變個數形參在方法的形參中,最多隻能聲明一個可變形參。

2.2.創建Java自定義類

步驟:
1.定義類(考慮修飾符、類名)
2.編寫類的屬性(考慮修飾符、屬性類型、屬性名、初始化值)
3.編寫類的方法(考慮修飾符、返回值類型、方法名、形參等)
類的語法格式
修飾符 class 類名{
屬性聲明;
方法聲明;

}

3.對象的創建和使用

  • 創建對象語法:類名對象名=new類名();
  • 使用“對象名.對象成員”的方式訪問對象成員(包括屬性和方法)

例如,對上面的人創建對象。這裏我們創建了新的類來測試

public class PersonTest {
	public static void main(String[] args) {
		Person person = new Person();//創建對象
		person.name = "李四";//訪問屬性
		person.age = 21;
		person.eat();//訪問方法
		person.Showage();
	}
}

結果如下:
在這裏插入圖片描述

說明:如果創建了一個類的多個對象,對於類中定義的屬性,每個對象都擁有各自的一套副本,且互不干擾。

3.1 內存解析

堆(heap): 此內存區域的唯一目的就是存放對象實例,幾乎所有的對象實例都在這裏分配內存 。 一點在Java 虛擬機規範中的描述是:所有的對象實例以及數組都要在堆上分配。(簡單的說就是new出來的東西)。
棧(stack): 通常所說的 棧 Stack 是指虛擬機棧 。 虛擬機棧用於 存儲 局部變量 等 。局部變量表存放了編譯期可知長度的各種基本數據類型(boolean、byte、char、short、int、float、long、double)。
比如看這個代碼:

Person p1 = new Person();
p1.name = "Tom";
p1.isMale = true
Person p2 = new Person();
System.out.println(p2.name);//null
Person p3 = p1
p3.age = 10;

3.2 匿名對象

我們可以不定義對象的句柄,而直接調用這個對象的方法。這樣的對象叫做匿名對象。
例:new Person().showfriend()

4.面向對象程序設計的特點

面向對象程序具有以下特點:

  • 封裝性
  • 繼承性
  • 多態性

4.1封裝

封裝是面向對象編程的核心思想。將對象的屬性和行爲封裝起來,其載體就是類,類通常會對客戶隱藏其實現細節,這就是封裝的思想。
例如:一臺筆記本電腦,我們不需要了解筆記本內部是如何工作的,我們只需要手指敲鍵盤就好了,就能實現一些功能了。

4.2 繼承

繼承是實現重複利用的重要手段,子類通過,複用父類屬性和行爲的同時又添加了字類特有的屬性和行爲。
例如:
矩形,菱形,平行四邊形和梯形都是四邊形。
在這裏插入圖片描述

5.構造器

構造器的作用:
創建對象
初始化
1.如果沒有顯式的定義類的構造器的話,則系統默認提供一個空參的構造器
這裏我們沒有,顯示定義構造器,但系統默認提供了一個構造器,類似於
在Person類中添加了
public Person() {

}
package contain;

public class Person_1 {
 public static void main(String[] args) {
	 //創建類的對象:new + 構造器
	Person tom = new Person();
}
}
class Person {
	String name;
	int age;
	int Ismale;
	public void eat() {
		System.out.println("我會吃飯");
		
	}

	public void Showage() {
		System.out.println("我的年齡是"+age);
	}
}

2.定義構造器的格式:權限修飾符類名(形參列表){}

class Person {
	String name;
	int age;
	int Ismale;
	//定義構造器的格式:權限修飾符類名(形參列表){}
	public Person(int age,String name) {
		this.age = age;
		this.name = name;
	}
	public void eat() {
		System.out.println("我會吃飯");
		
	}

	public void Showage() {
		System.out.println("我的年齡是"+age);
	}
}

3.一個類中定義的多個構造器,彼此構成重載

	public Person(int age,String name) {
		this.age = age;
		this.name = name;
	}
	public Person(int age) {
	this.age = age;
	}

說明:一旦我們顯式的定義了類的構造器之後,系統就不在提供默認的空參構造器

6. this 關鍵字

this關鍵字的使用:
1.this可以用來修飾:屬性、方法、構造器
2.this修飾屬性和方法:
this理解爲:當前對象

7.package的使用

  • package語句作爲Java源文件的第一條語句,指明該文件中定義的類所在的包。(若缺省該語句,則指定爲無名包)。它的格式爲:
    package頂層包名.子包名
  • ·包對應於文件系統的目錄,package語句中,用“.”來指明包(目錄)的層次;
  • JDK中主要的包介紹
    1.java.lang----包含一些Java語言的核心類,如String、Math、Integer、System和Thread,提供常用功能
    2.java.net----包含執行與網絡相關的操作的類和接口。
    3.java.io—包含能提供多種輸入/輸出功能的類。
    4.java.util----包含一些實用工具類,如定義系統特性、接口的集合框架類、使用與日期日曆相關的函數。
    5.java.text----包含了一些java格式化相關的類6.java.sql----包含了java進行JDBC數據庫編程的相關類/接口
    7.java.awt----包含了構成抽象窗口工具集(abstract window toolkits)的多個類,這些類被用來構建和管理應用程序的圖形用戶界面(GUI)。

8.import

1.在源文件中顯式的使用import結構導入指定包下的類、接口
2.聲明在包的聲明和類的聲明之間
3.如果需要導入多個結構,則並列寫出即可
4.可以使用“xxx.*”的方式,表示可以導入XXX包下的所有結構
5.如果使用的類或接口是java.lang包下定義的,則可以省略import結構
6.如果使用的類或接口是本包下定義的,則可以省略import結構7.如果在源文件中,使用了不同包下的同名的類,則必須至少有一個類需要以全類名的方式顯示。
8.使用"xxx。*“方式表明可以調用XXX包下的所有結構。但是如果使用的是XXX子包下的結構,則仍需要顯示導入
9.import static:導入指定類或接口中的靜態結構:屬性或方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章