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:導入指定類或接口中的靜態結構:屬性或方法