Java學習筆記(04)

        Java學習筆記(04)java

若有不對或不足的地方,請給出建議,謝謝!編程

一.對象

面向對象的核心:找合適的對象作合適的事情jvm

面向對象的編程思想:儘量的用計算機語言來描述現實生活中的事物函數

面向對象:側重於對象學習

1.類和對象的關係 :

           類是對同一類事物(對象)的抽象,對象是實際存在的該類的各類實體this

 

建立的對象內存分析:spa

建立的對象存在棧區,開闢的內存空間存在於堆區,在堆區保存值code

 

 

 

 

 

 

1. 成員變量和局部變量的區別

      位置:對象

           1.成員變量是在類中方法外。blog

           2.局部變量存在方法中

      做用域:

           1. 成員變量當前類中均可以使用

           2.局部變量只能在方法中使用

      初始化:

           1.成員變量默認有初始值

           2.局部變量要想使用必須初始化。

      生命週期:

           1.成員變量隨着對象的建立而建立,隨着對象的消失而消失

           2.局部變量出來方法的調用就消失

 

2.java中如何來找到對象

           1.本身定義好的類,必須知道這個類。

//屬性 : 變量類型 變量名 = 值;  String name; int age; String sex;

 

           2.自定義類,經過這個類來建立出對象。

 

3.類的格式 :

           class 類名 {

  1. 屬性(成員變量) :描述對象的公共特性。。

語法:數據類型 成員變量名

 

 方法:描述對象的公共行爲。

語法:  普通方法:修飾符 返回值類型 方法名() {}

//方法 // 修飾符 返回值類型 方法名(參數列表){} public void cry(){ System.out.println(name+"哭了"); }

 

 

構造方法:修飾符 方法名() {} 在構造方法中,方法名和類名相同,無返回值類型

 

靜態方法:static 修飾符 返回值類型 方法名() {}

           

 1 //靜態方法名的建立:修飾符 static 返回值類型 方法名() {}
 2     public static void haha() {  3         Demo de1 = new Demo();  4         System.out.println(de1.name1 +"代碼改變世界"); //報錯
 5         System.out.println(Demo.name2 +"代碼改變世界");  6  de1.xixi();  7  }  8 /*
 9 一、靜態方法中可直接調用靜態變量,而不能直接調用普通變量;要想調用普通變量,建立對象來調用。 並且在Java中,容許靜態方法中的對象名和主方法中的對象名相同 10 
11 二、在普通方法中能夠直接調用靜態變量和普通變量,可是,在主方法不能直接用類名調用方法,而是經過建立對象 12 
13 三、靜態方法和普通方法的相互調用,都須要建立對象來完成。並且不能本身調用本身,不然形成死循環 14 */

 

 

 4.如何經過類建立對象:

           類名對象名 = new  類名();

Class Demo { Public static void main(String[] args) { Demo demo = new Demo(); System.out.println("HelloWorld"); } } 

 

5.設置屬性

前提:必須有一個對象

語法:對象.屬性名 = 值;

訪問屬性:對象.屬性名

訪問方法:對象.方法名();

 

 

2.匿名對象

1.匿名對象

沒有名字的對象,不建議使用

 

class Person { String name; //名字 int age; // 年齡  } } class Demo3 { public static void main(String[] args) { new Person().name = "小紅"; new Person().age = 10; System.out.println(new Person().name);// null  } }

 

 

     2.匿名對象的使用注意點

           1.咱們通常不會用匿名對象給屬性賦值,沒法獲取屬性值。

           2.匿名對象永遠都不多是一個對象。

     

     3.匿名對象的好處:書寫簡單

 

      4.匿名對象的使用場景

           1.若是一個對象須要調用一個方法一次的時候,就能夠用匿名對象來調用。

           2.能夠做爲實際參數在方法中調用。

 

 

二.構造方法

在java中相似OC中的初始化方法叫構造方法

     1.OC初始化方法的特色 :

        1.能夠在對象建立時初始化屬性值。

        2.初始化方法只能被調用一次

//公有屬性  String name; int age; //建立構造方法 public Person(String n,int a){ //給屬性賦值 name = n; age = a; }

 

  

     2.構造方法的做用 :

給對應的對象進行初始化,對象建立時初始化屬性值。

 

 建立構造方法: 修飾符 類名(參數列表){} 

 

     3.構造方法使用注意點:

        1.方法名和類名保持一致

        2.構造方法沒有返回值的。

        3.構造方法不是由咱們手動調用的,而是在對象被    建立時由java虛擬機調用

        4.若是一個類咱們沒有給他定義構造方法,jvm在編 譯的時候會給這個類默認

        添加一個無參的構造方法。

        5.若是你本身定義構造方法,jvm就不會在建立無參 的構造方法。這個時候須要

        本身定義一個無參的構造方法

 

//創鍵構造方法
    Baby(String n,String s,int a){ // 局部變量 :必須初始化
            //給屬性賦值
            name = n;
            sex = s;
            age = a;
    }
    //參數的個數不同。
    Baby(String n,String s){
        name = n;
        sex = s;
    }
    //和第一個對比參數的順序不同
    Baby(String s,int a,String n){
        name = n;
        sex = s;
        age = a;
    }

 

 

 

三.方法的重載

         在java中定義的方法是能夠重名的,這種重名的方法也叫方法的重載。

 1 //創鍵構造方法
 2     Baby(String n,String s,int a){ // 局部變量 :必須初始化  3     
 4             //給屬性賦值
 5             name = n;  6             sex = s;  7             age = a;  8  }  9     //參數的個數不同。
10  Baby(String n,String s){ 11         name = n; 12         sex = s; 13  } 14     //和第一個對比參數的順序不同
15     Baby(String s,int a,String n){ 16         name = n; 17         sex = s; 18         age = a; 19     }

 

     1.方法重載的使用注意事項:

           1.必須是方法名同樣,才能夠叫方法重載

           2.任何方法均可以實現方法的重載,包括構造方法、普通方法、靜態方法

           3.必需要保證參數列表的參數的順序或者個數不同

 

      構造方法中是能夠調用普通方法的

      在同一個類中,方法的調用直接拿到方法名調用就能夠了,而在不一樣類中調用就會報錯

 

 

 

四.代碼塊

1 //普通代碼塊
2 { 3         name2 = "正在學習"; 4 } 5 //靜態代碼塊
6 static { 7         name3 = "在慕課網學習"; 8 } 9 //靜態初始化塊只在類加載時執行,且只會執行一次,同時靜態初始化塊只能給靜態變量賦值,不能初始化普通的成員變量

 

做用:給對象統一初始化的值

位置:寫在成員變量的位置上

 

1.構造代碼塊使用注意點:

           1.java中編譯器編譯一個java源文件的時候,會把成員變量的聲明放在類的最前面。即便你是把它定義在類的最後面,運行的時候系統也會在類的最前面給它進行聲明

   **2.在有構造方法的前提下:成員變量的初始化都是在構造方法中執行的。

           3.一旦通過java編譯器編譯後,那麼構造代碼塊中的代碼會移到構造函數中執行,並且會先於構造函數的代碼塊執行

           4.成員變量的顯示初始化和構造代碼塊,按照當前代碼的順序來執行的,誰在後面就顯示誰。

 

 

2.this 對象

      this : 表明所屬方法 / 局部變量的調用對象,用來訪問這個類的屬性和方法。 和OC 中的self很象

 

 

*對象的引用變量(對象名)存在棧區,對象是存在於堆區,成員變量也隨着對象存在堆區中

 

內存分析:

 

      this關鍵字的做用 :

  1. 若是成員變量和局部變量重名,在方法中時默認調用局部變量,經過this可讓方法調用成員變量

 

// this在成員變量中的使用
public Person (String name , int age){ 
        this.name = name; // 若是不適用this,兩個name都是指的時局部變量的name,Java中的就近原則
        this.age =age;    

 

 

this關鍵字的使用注意點:

           1.存在與成員變量同名的局部變量時:方法內部會訪問局部變量(不然java採用就近原則)

           2.在方法中不存在和成員變量同名的局部變量時:java編譯器在編譯時會默認給變量前面加一個this.

    3.經過this實現構造方法中調用構造方法

構造方法中也能夠調用普通(實例)方法

 

 

五.調用構造方法

語法: this(參數);

 

構造方法 / 函數何時調用:建立對象的時候有jvmJava虛擬機)調用

//直接用方法名來調用方法  調用的是普通方法。,不能將這個方法作爲構造方法。
        //Student(name,id,classNum,sex); //錯誤
//這個的原理和上面的同樣,若是沒有this,系統會自動添加this調用的
        //this.Student(name,id,classNum,sex);  錯誤的。

//正確的構造方法中調用構造方法
        this(name,id,classNum,sex);  // 必須是第一個語句
        this.age = age;

 

2.調用構造方法的注意點:

     1.this的調用必須在構造方法的第一句(不然會報錯)

       2.不要相互調用構造方法(死循環),在本身的方法中調用本身也是同樣

       3.在調用構造方法時,同時給被構造方法進行賦值,不然爲系統的默認值

       4.不能直接用方法名調用構造方法

相關文章
相關標籤/搜索