類:咱們叫作class。 對象:叫作Object,instance(實例)。某個類的對象,某個類的實例。是同樣的意思。
1.對象是具體的事物;類是對對象的抽象;
2.類能夠當作一類對象的模板,對象能夠當作該類的一個具體實例。
3.類是用於描述同一類型的對象的一個抽象概念,類中定義了這一類對象所應具備的共同的屬性、方法。java
類的目的是抽象出一類事物共有的屬性和行爲,並用必定的語法格式去描述所抽象出的屬性和行爲算法
類是一種用於建立具體實例(對象)的數據類型數組
抽象的關鍵是抓住事物的兩個方面,屬性和行爲,即數據以及在數據上的操做ide
基本格式函數
class 類名{ 類體內容 }
類的定義包括兩個部分:類聲明 和 類體post
class 類名 是類的聲明部分,class是關鍵字用來定義類,類名是java標識符this
兩個大括號及其之間的內容 是類體,類體包括 變量的聲明 和 方法的定義spa
class 類名{ //類體內容: 變量聲明//用來存儲屬性的值(體現對象的屬性) 方法的定義//方法能夠對類中聲明的變量進行操做,即給出算法(函數,體現行爲) }
聲明變量部分所聲明的變量被稱爲 成員變量 或 域變量3d
成員變量能夠是java中任何一種數據類型,包括指針
基本類型:整型、字符型、浮點型、邏輯類型
引用類型:數組、對象、接口
成員變量在整個類內都有效
其有效性與在類中書寫的前後位置無關
不提倡把成員變量聲明書寫分散寫在方法之間,習慣先介紹屬性再介紹行爲
1)對成員變量的操做只能放在方法中
方法使用各類語句對成員變量和方法體中聲明的局部變量進行操做
成員變量可聲明時賦初值,但不能夠聲明成員變量後再賦值
class A{ int a=12;//聲明時賦初值 float b=12.34f; }//T
class A{ int a; a=12;//聲明後賦初值 float b=12.34f; }//F
2)成員變量有默認值
整型 0 int 浮點型 0.0 double float 布爾型 false boolean 引用型 null 接口、數組、類
方法就是一段用來完成特定功能的代碼片斷,相似於其它語言的函數。
方法用於定義該類或該類的實例的行爲特徵和功能實現。 方法是類和對象行爲特徵的抽象。方法很相似於面向過程當中的函數。面向過程當中,函數是最基本單位,整個程序由一個個函數調用組成。面向對象中,整個程序的基本單位是類,方法是從屬於類和對象的。
方法定義包括兩部分 方法頭 和 方法體
方法頭{
方法體內容
}
[修飾符1 修飾符2 …] 返回值類型 方法名(形式參數列表){
Java語句;… … …
}
1)方法頭由 修飾符、方法(返回)類型、名稱、小括號、參數列表 構成
2)方法返回的數據類型能夠是java中任何一種數據類型,
爲void類型時,該方法就不須要返回數據
3)參數
#1參數是逗號隔開的一些變量聲明,方法參數能夠是任意java數據類型
無參數方法定義方法頭中沒有參數列表(括號內容爲空)
int fun(){ return 0; }
#2參數屬於局部變量,當對象調用方法時,參數被分配空間,並要求調用者向參數傳值
即方法被調用時,參數變量必須有具體值
#3.java中方法的全部參數都是傳值的,即方法中的參數變量的值是調用者指定值的拷貝
1′ 對於基本數據類型,向該參數傳遞的值的級別不能夠高於該參數的級別
不能夠向int型傳一個float值,不會自動截取
能夠向double型傳遞一個float值,會自動擴充
2′ 當參數是引用類型時,傳值傳遞的是變量中存放的引用,而不是變量所引用的實體。
兩廂同類型的引用型變量,如具備相同的引用,就會用一樣的實體,
改變參數變量所引用的實體就會致使原變量的實體發生一樣的變化。
改變參數中存放的引用,不會影響向其傳值的變量中的引用,反之亦然,有點指針的感受
#4.可變參數
public void f(int … x);//T public void f(double a, int … x);//T x爲可變參數「參數表明」
public int getSum(int … x){ int sum = 0; for (int i=0; i<x.length; i++){ sum = sum + x[i]; } return sum; } //getSum(1,2,3)爲6
1.方法體內容包括 局部變量的聲明 和 java語句
方法體內能夠對成員變量和方法體中聲明的局部變量進行操做
2.在方法體內聲明的變量和方法的參數稱爲局部變量
#1局部變量只在方法中有效
#2局部變量與其聲明位置有關???用後聲明能夠嗎
如局部變量聲明在一個複合語句(循環語句)中,該局部變量有效範圍是該複合語句(循環語句)
#3局部變量與成員變量名字相同,成員變量被隱藏,成員變量在該方法內失效
在方法中使用被隱藏的成員變量,用this關鍵字
#4局部變量沒有默認值
在使用局部變量前必須保證局部變量有具體值
1)方法的重載是指一個類中能夠定義多個方法名相同,但參數不一樣的方法。
調用時,會根據不一樣的參數自動匹配對應的方法。
重載的方法,實際是徹底不一樣的方法,只是名稱相同而已。
2)構成方法重載的條件:
1.不一樣的含義:形參類型、形參個數、形參順序不一樣
2.只有返回值不一樣不構成方法的重載
int a(String str){}與 void a(String str){}//不構成方法重載
3.只有形參的名稱不一樣,不構成方法的重載
int a(String str){}與int a(String s){}//不構成方法重載
1 public class Test { 2 public static void main(String[] args) { 3 System.out.println(add(3, 5));// 8 4 System.out.println(add(3, 5, 10));// 18 5 System.out.println(add(3.0, 5));// 8.0 6 System.out.println(add(3, 5.0));// 8.0 7 // 咱們已經見過的方法的重載 8 System.out.println();// 0個參數 9 System.out.println(1);// 參數是1個int 10 System.out.println(3.0);// 參數是1個double 11 } 12 /** 求和的方法 */ 13 public static int add(int n1, int n2) { 14 int sum = n1 + n2; 15 return sum; 16 } 17 // 方法名相同,參數個數不一樣,構成重載 18 public static int add(int n1, int n2, int n3) { 19 int sum = n1 + n2 + n3; 20 return sum; 21 } 22 // 方法名相同,參數類型不一樣,構成重載 23 public static double add(double n1, int n2) { 24 double sum = n1 + n2; 25 return sum; 26 } 27 // 方法名相同,參數順序不一樣,構成重載 28 public static double add(int n1, double n2) { 29 double sum = n1 + n2; 30 return sum; 31 } 32 //編譯錯誤:只有返回值不一樣,不構成方法的重載 33 public static double add(int n1, int n2) { 34 double sum = n1 + n2; 35 return sum; 36 } 37 //編譯錯誤:只有參數名稱不一樣,不構成方法的重載 38 public static int add(int n2, int n1) { 39 double sum = n1 + n2; 40 return sum; 41 } 42 }
構造器也叫構造方法(constructor),用於對象的初始化。構造器是一個建立對象時被自動調用的特殊方法,目的是對象的初始化。構造器的名稱應與類的名稱一致。Java經過new關鍵字來調用構造器,從而返回該類的實例,是一種特殊的方法。
1)聲明格式:
[修飾符] 類名(形參列表){ //n條語句 }
注意1. 經過new關鍵字調用
2. 構造器雖然有返回值,可是不能定義返回值類型(返回值的類型確定是本類),不能在構造器裏使用return返回某個值。
3. 若是咱們沒有定義構造器,則編譯器會自動定義一個無參的構造函數。若是已定義則編譯器不會自動添加
4. 構造器的方法名必須和類名一致
1 /* 定義一個「點」(Point)類用來表示二維空間中的點(有兩個座標)。要求以下: 2 (1) 能夠生成具備特定座標的點對象。 3 (2) 提供能夠設置座標的方法。 4 (3)提供能夠計算該「點」距另一點距離的方法。*/ 5 6 class Point { 7 double x, y; 8 public Point(double _x, double _y) { 9 x = _x; 10 y = _y; 11 } 12 public double getDistance(Point p) { 13 return Math.sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y)); 14 } 15 } 16 public class TestConstructor { 17 public static void main(String[] args) { 18 Point p = new Point(3.0, 4.0); 19 Point origin = new Point(0.0, 0.0); 20 System.out.println(p.getDistance(origin)); 21 } 22 }
2)構造方法也是方法,只不過有特殊的做用而已。與普通方法同樣,構造方法也能夠重載。
即構造方法重載(建立不一樣用戶對象)
public class User { int id; // id String name; // 帳戶名 String pwd; // 密碼 public User() { } public User(int id, String name) { super(); this.id = id; this.name = name; } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public static void main(String[] args) { User u1 = new User(); User u2 = new User(101, "name1"); User u3 = new User(100, "name2", "123456"); } } /*若是方法構造中形參名與屬性名相同時, 須要使用this關鍵字區分屬性(成員變量)與形參 this.id 表示屬性(成員變量)id;id表示形參id*/
1.4.1test
test
對象(類聲明的變量)負責存放引用,以確保對象能夠操做分配給該對象的變量,以及調用類中的方法。
類名字 對象名字;
XiyoujiRenwu zhu;
使用new運算符和類的構造方法爲聲明的對象分配變量,即建立對象
XiyoujiRenwu zhu; zhu = new XiyoujiRenwu();
對象建立後就有了本身的變量,即對象的實體,對象能夠經過點運算符訪問本身的變量
實現對象操做本身的變量,體現對象的屬性
對象.變量
對象建立後,對象能夠經過點運算符調用建立它的類中的方法,從而產生必定的行爲(功能)
對象調用類中的方法,體現對象的行爲
對象.方法