127.Java_類

類:咱們叫作class。 對象:叫作Object,instance(實例)。某個類的對象,某個類的實例。是同樣的意思。
1.對象是具體的事物;類是對對象的抽象;
2.類能夠當作一類對象的模板,對象能夠當作該類的一個具體實例。
3.類是用於描述同一類型的對象的一個抽象概念,類中定義了這一類對象所應具備的共同的屬性、方法。java

 

類的目的是抽象出一類事物共有的屬性和行爲,並用必定的語法格式去描述所抽象出的屬性和行爲算法

類是一種用於建立具體實例(對象)的數據類型數組

抽象的關鍵是抓住事物的兩個方面,屬性和行爲,即數據以及在數據上的操做ide

 

類(主類,萬物類)
主類(能夠沒成員變量,主函數調用萬物對象完成功能)
萬物類(本身的屬性,本身的行爲)
包(區分不一樣空間的類)

 

1.類

1.1 綜述

基本格式函數

class 類名{
    類體內容
}

類的定義包括兩個部分:類聲明  和 類體post

class 類名 是類的聲明部分,class是關鍵字用來定義類,類名是java標識符this

兩個大括號及其之間的內容  是類體,類體包括 變量的聲明方法的定義spa

class 類名{
    //類體內容:
        變量聲明//用來存儲屬性的值(體現對象的屬性)
        方法的定義//方法能夠對類中聲明的變量進行操做,即給出算法(函數,體現行爲)
}    

 

1.2 成員變量

聲明變量部分所聲明的變量被稱爲 成員變量域變量3d

1.2.1 類型

成員變量能夠是java中任何一種數據類型,包括指針

基本類型:整型、字符型、浮點型、邏輯類型

引用類型:數組、對象、接口

 

1.2.2 有效範圍

成員變量在整個類內都有效

其有效性與在類中書寫的前後位置無關

不提倡把成員變量聲明書寫分散寫在方法之間,習慣先介紹屬性再介紹行爲

 

1.2.3 注意

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.3 方法

      方法就是一段用來完成特定功能的代碼片斷,相似於其它語言的函數。
      方法用於定義該類或該類的實例的行爲特徵和功能實現。 方法是類和對象行爲特徵的抽象。方法很相似於面向過程當中的函數。面向過程當中,函數是最基本單位,整個程序由一個個函數調用組成。面向對象中,整個程序的基本單位是類,方法是從屬於類和對象的。

1.3.1 方法定義

方法定義包括兩部分 方法頭 和 方法體

 方法頭{
    方法體內容
}
[修飾符1  修飾符2  …]   返回值類型    方法名(形式參數列表){
    Java語句;… … …
 }

 

1.3.2.1 方法頭

1)方法頭由 修飾符、方法(返回)類型、名稱、小括號、參數列表 構成

2)方法返回的數據類型能夠是java中任何一種數據類型,

爲void類型時,該方法就不須要返回數據

3)參數

#1參數是逗號隔開的一些變量聲明,方法參數能夠是任意java數據類型

無參數方法定義方法頭中沒有參數列表(括號內容爲空)

int fun(){
 return 0;
}

 

#2參數屬於局部變量,當對象調用方法時,參數被分配空間,並要求調用者向參數傳值

即方法被調用時,參數變量必須有具體值

 

#3.java中方法的全部參數都是傳值的,即方法中的參數變量的值是調用者指定值的拷貝

1′  對於基本數據類型,向該參數傳遞的值的級別不能夠高於該參數的級別

不能夠向int型傳一個float值,不會自動截取

能夠向double型傳遞一個float值,會自動擴充

2′  當參數是引用類型時,傳值傳遞的是變量中存放的引用,而不是變量所引用的實體。

兩廂同類型的引用型變量,如具備相同的引用,就會用一樣的實體,

改變參數變量所引用的實體就會致使原變量的實體發生一樣的變化。

改變參數中存放的引用,不會影響向其傳值的變量中的引用,反之亦然,有點指針的感受

 

#4.可變參數

可變參數是指,在聲明時不給出參數列表中從某項開始到最後一下參數的名字和個數。
但這些參數的類型必須相同。
而且最後一個參數必須是方法的參數列表中最後一個參數。
能夠用參數表明x,以x[0]到x[i]的方式訪問,而且x.length等於x所表明的參數的個數。
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.3.2.1 方法體

1.方法體內容包括 局部變量的聲明 java語句

 方法體內能夠對成員變量和方法體中聲明的局部變量進行操做

 

2.在方法體內聲明的變量方法的參數稱爲局部變量

#1局部變量只在方法中有效

 

#2局部變量與其聲明位置有關???用後聲明能夠嗎

如局部變量聲明在一個複合語句(循環語句)中,該局部變量有效範圍是該複合語句(循環語句)

 

#3局部變量與成員變量名字相同,成員變量被隱藏,成員變量在該方法內失效

在方法中使用被隱藏的成員變量,用this關鍵字

 

#4局部變量沒有默認值

在使用局部變量前必須保證局部變量有具體值

 

1.3.3 特殊方法

1.3.3.1 方法重載

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 }
方法重載

 

 

1.3.3.2 構造方法

構造器也叫構造方法(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 }
定義一個「點」(Point)類用來表示二維空間中的點(有兩個座標)

 

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 經常使用類

1.4.1test

 test

 

 

 

 

 



 

2.對象

     抽象的目的是產生類,類的目的是建立具有屬性和行爲的對象,對象不只能夠操做本身的變量,改變狀態,並且能調用類中的方法,產生必定的行爲。

    對象(類聲明的變量)負責存放引用,以確保對象能夠操做分配給該對象的變量,以及調用類中的方法。

 

2.1 建立對象

建立對象包括對象的聲明和爲聲明的對象分配變量兩個步驟。

2.1.1對象聲明

類名字 對象名字;
XiyoujiRenwu zhu;

 

 

2.1.2 分配變量

使用new運算符和類的構造方法爲聲明的對象分配變量,即建立對象

XiyoujiRenwu zhu;
zhu = new XiyoujiRenwu();

 

 

2.2 使用對象

經過使用運算符" ." 對象能夠實現對本身的變量的訪問和類中方法的調用。
" ."也稱引用運算符或者訪問運算符

2.2.1 對象訪問變量

對象建立後就有了本身的變量,即對象的實體,對象能夠經過點運算符訪問本身的變量

實現對象操做本身的變量,體現對象的屬性

對象.變量

 

 

 

2.2.2 對象調用方法

對象建立後,對象能夠經過點運算符調用建立它的類中的方法,從而產生必定的行爲(功能)

對象調用類中的方法,體現對象的行爲

對象.方法

 

 

 

相關文章
相關標籤/搜索