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 關鍵字。