Java學習筆記(2)--- 對象和類入門,java包,this 和 super區別

1.對象和類(Object and class):html

 

一個 Java 程序能夠認爲是一系列對象的集合,而這些對象經過調用彼此的方法來協同工做。java

面對對象編程是java很是重要的一部分,做者自己以前學過c++因此省略了部分基礎,詳見例子:https://www.runoob.com/java/java-object-classes.htmlc++

 

對象:對象是類的一個實例,有狀態和行爲。例如,一條狗是一個對象,它的狀態有:顏色、名字、品種;行爲有:搖尾巴、叫、吃等。編程

類:類是一個模板,它描述一類對象的行爲和狀態。ide

 

a.類的內容:函數

 

方法:好比說Dog能夠有void barking(),void sleeping()這些行爲。this

局部變量:在方法、構造方法或者語句塊中定義的變量被稱爲局部變量。變量聲明和初始化都是在方法中,方法結束後,變量就會自動銷燬。好比說咱們要定義狗的年齡,就從外部引入一個age_dog的變量賦值給成員變量。沒有默認值,必須本身賦值。spa

成員變量:成員變量是定義在類中,方法體以外的變量。這種變量在建立對象的時候實例化。成員變量能夠被類中方法、構造方法和特定類的語句塊訪問。好比狗dog能夠有age,color這種特徵變量。有默認值,若是沒有會系統自動分配,根據類型不一樣則默認值不一樣。
命令行

類變量:類變量也聲明在類中,方法體以外,但必須聲明爲static類型。指針

 

注:在一個類中,局部變量能夠與成員變量同名,可是局部變量優先,若是非要訪問成員變量的屬性,則必須使用 this.color 

 

b.對象的操做:

 

 

聲明對象通常用關鍵字new來建立一個新的對象。

例如:

Puppy myPuppy = new Puppy( "tommy" );    

其中Puppy是類的名字,my puppy是對象的名字,tommy則是狗這個對象的名字。

 

假設咱們有一個方法是「setAge」,咱們能夠調用其來設定狗的年紀(成員變量age = 2):

myPuppy.setAge( 2 );

 

而後調用:

dog_age =  myPuppy.getAge( );

 

把成員變量賦值給主函數裏的dog_age.

 

 

 2.Java包(package):

包主要用來對類和接口進行分類。當開發Java程序時,可能編寫成百上千的類,所以頗有必要對類和接口進行分類。

 

使用import去定位某個類,下面的例子命令行將會命令編譯器載入java_installation/java/io路徑下的全部類:

import java.io.*;

 

具體編程的例子見:https://www.runoob.com/java/java-object-classes.html

和c++不同的就是c++除了cpp還得有個h頭文件,java直接引用java文件就行。

 

幾個注意事項:

1.java因強制要求類名(惟一的public類)和文件名統一,所以在引用其它類時無需顯式聲明。在編譯時,編譯器會根據類名去尋找同名文件。

2.package 的做用就是 c++ 的 namespace 的做用,防止名字相同的類產生衝突。Java 編譯器在編譯時,直接根據 package 指定的信息直接將生成的 class 文件生成到對應目錄下。如 package aaa.bbb.ccc 編譯器就將該 .java 文件下的各個類生到 ./aaa/bbb/ccc/ 這個目錄。

3.import 是爲了簡化使用 package 以後的實例化的代碼。假設 ./aaa/bbb/ccc/ 下的 A 類,假如沒有 import,實例化A類爲:new aaa.bbb.ccc.A(),使用 import aaa.bbb.ccc.A 後,就能夠直接使用 new A() 了,也就是編譯器匹配並擴展了 aaa.bbb.ccc. 這串字符串。

4.JAVA 和 C++ 同樣,如果不定義任何的構造函數,會自動構造;若是定義了任何一個構造函數,就不會再自動構造,須要本身定義所有的構造函數。

 

 

3.this 和 super區別:

 

a.this:

this 是自身的一個對象,表明對象自己,能夠理解爲:指向對象自己的一個指針。

 

sub 1.普通的直接引用:

就是指對目前所處的對象的引用。

 

sub 2.形參與成員名字重名,用 this 來區分:

好比說:

public int GetAge(int age){

   this.age = age;

   return this.age;

 }

}

 

sub 3.引用構造函數:

  見super裏面的解釋。

 

 

b.super:

super 能夠理解爲是指向本身超(父)類對象的一個指針,而這個超類指的是離本身最近的一個父類。

 

sub 1.普通引用:

與 this 相似,super 至關因而指向當前對象的父類,這樣就能夠用 super.xxx 來引用父類的成員。

 

 

sub 2. 子類中的成員變量或方法與父類中的成員變量或方法同名:

class City extends Country {    //這個是指Country是city的一個子類

。。。

。。。

super.value()      //value(是子類的一個方法)

。。。

}

 

sub 3. 引用構造函數:

super(參數):調用父類中的某一個構造函數(應該爲構造函數中的第一條語句)。

this(參數):調用本類中另外一種形式的構造函數(應該爲構造函數中的第一條語句)。

 

 

注意事項:

1.super是引用當前對象的直接父類中的成員(用來訪問直接父類中被隱藏的父類中成員數據或函數,基類與派生類中有相同成員定義時如:super.變量名 super.成員函數據名(實參)

2.this它表明當前對象名(在程序中易產生二義性之處,應使用 this 來指明當前對象;若是函數的形參與類中的成員數據同名,這時需用 this 來指明成員變量名)

3.調用super()必須寫在子類構造方法的第一行,不然編譯不經過。每一個子類構造方法的第一條語句,都是隱含地調用 super(),若是父類沒有這種形式的構造函數,那麼在編譯的時候就會報錯。

4.super() 和 this() 均需放在構造方法內第一行。

5.this 和 super 不能同時出如今一個構造函數裏面,由於this必然會調用其它的構造函數,其它的構造函數必然也會有 super 語句的存在,因此在同一個構造函數裏面有相同的語句,就失去了語句的意義,編譯器也不會經過。

6.this() 和 super() 都指的是對象,因此,均不能夠在 static 環境中使用。包括:static 變量,static 方法,static 語句塊。

7.從本質上講,this 是一個指向本對象的指針, 然而 super 是一個 Java 關鍵字。

相關文章
相關標籤/搜索