Java StuNote 3

來源:互聯網
上載者:User

標籤:類   java   堆棧   this   

1.類的構建

   a. 屬性

   b. 方法

      屬性是主人,方法為屬性服務,是僕人。

   c. 類的構建粒度

      滿足程式的設計需要即可,未涉及的屬性和方法可不加入類的設計。

   

2.進程介紹 

      

電腦記憶體以進程為單位進行分配。每個進程在邏輯上是隔離的,每個進程都認為自己是這台電腦上的唯一的程式,自己面對是所有的記憶體空間,這種技術叫做進程隔離技術,保證了系統不會因為一個進程的失敗,導致死機。

 

       一個進程可以向作業系統申請記憶體,進程申請到的記憶體一般以兩種格式來使用,一種是棧(stack)的形式,一種是堆(heap)的形式. 一個進程可以多個棧,但只有一個堆,一個棧對應的是一個線程,一個進程至少需要一個線程(thread),即至少有一個棧。

 

       我們目前所編製的程式,就是單進程單線程程式,該程式擁有一個stack和一個堆。

 

3. 對象的建立和方法調用

 

   Car c=new Car();

1) 使用class loader讀取Car進入代碼區 (code area)

2) 在堆棧中建立引用變數c (Car類型)

3) 在堆中申請記憶體建立裸對象,並初始化this , super以及代碼指標等隱式屬性。

4) 調用構造方法實現對Car對象自有顯式屬性的初始化。

5) 擷取初始化好的Car對象記憶體位址賦予引用變數c.

 

   c.showCarInfo();

      1) 通過引用變數c對Car對象發出調用showCarInfo()的指令。

2) Car對象收到指令後,立即訪問其代碼指標,存取碼區中的showCarInfo方法代碼並執行。

 

4. 層疊構造方法  (cascade constructor)

 

Student(){

this("mary",12);

}

Student(String name){

this(name,12);

}

Student(String name,int age)

{

this.name=name;

this.age=age;

}

    

層疊構造方法提供了構造方法的多樣性,為對象的建立者提供了便利。

層疊構造方法集中所有的處理邏輯在全參構造方法,便於集中修改和維護。

在這裡要注意的是在構造方法的互調用過程中,必須用this來替代構造方法名,不能直呼類名。

    

5.執行個體變數和類變數 

   

   執行個體(instance)就是對象的意思,更加書面化一些。

   

執行個體變數也叫做執行個體屬性,每個執行個體都有一份拷貝,在建立裸對象的過程中,執行個體變數的空間就會被開闢,在建構函式中,執行個體變數的空間會被初始化。

   Ex:   int count;

 

   類變數屬於類本身,也就是說其屬於模板(模具), 類變數不在對象中,所有的對象都可以訪問類變數,類變數被所有的類對象共用。

   

   在類載入的過程中,將在“靜態區“中建立類對象。

    

    Ex:   static int count;

 

1.包(package)的概念

 

      一個好的類名,大家都愛使用,那麼在相同類名的情況下,將很難區分類的主人, 所以我們必須給類起一個範圍限定(歸屬), JAVA中是通過包的機制來解決的。

 

     案例:

       張三寫的學生類  zhangsan. Student

       李四寫的學生類  lisi.Student

       王五編寫了一個程式使用到了上述兩個學生類:

         zhangsan.Student s=new zhangsan.Student();

    

     包是一種邏輯結構,是一個類的歸屬標誌,同一個包中不能出現雷同的類名。

包在物理上是如何?的?是通過磁碟目錄來表示的。

 

包名也有可能出現雷同的現象,為了避免這種情況的發生,我們一般使用單位的網域名稱倒裝來作為包名,因為網域名稱不會出現重複,一個網域名稱作為包名將可能在磁碟上建立多個層級目錄。

 

為了避免你所編寫的類,在後續的系統中出現使用上問題,請不要書寫無包類/預設包類(default package).

 

案例:

package edu.fzu.cs;    //package關鍵字,說明這個類所屬的包

public class Student {

 

}

 

包名必須全部小寫

 

2. 封裝類(wrapper)

   任何基本類型:byte,int , float ,double, boolean,char (16bits) ….. (沒有無符號資料類型)

   Char: utf-8 國際化編碼

   在JAVA中都有一個類類型與其對應。

   Int à java.lang.Integer  (java.lang  java語言套件, lang=language, 

java.lang包中的所有的類在任何JAVA程式中都由編譯器預設匯入,文法是:

import java.lang.*;

由於lang包裡頭的類使用極度頻繁,是語言擴充和服務類,為降低程式員的匯入負擔,該包下的所有類由編譯器協助匯入,使用者無需手動匯入。

)

   

   封裝類的主要作用:

a) int à Integer

b) float à Float

c) double à Double

d) boolean à Boolean

e) char à Character

 

1. 彌補基本類型的語意缺失

基本類型無法表示:“沒有”

float mark;     0 

Float mark     0 , null

2. 為基本類型提供服務

       System.out.println(Integer.toBinaryString(100));

   System.out.println(Integer.toHexString(100));

   System.out.println(Integer.parseInt("12")+1);

 

類類型建立在堆中,空間消耗很低。

 

   裝箱(inbox)和拆箱(outbox)

 

   代表了類類型和基本類型之間的轉換行為。

 

   手動版本:

   Integer b = new Integer(10);

   Int a = b.intValue;

 

   自動版本:

   Integer b=30;    à  Integer b=new Integer(30);

   Int a=b;         à  int a =b.intValue();

 

   因為基本類型和類類型之間的換轉操作頻繁,SUN公司在高版本的JDK中提供了自動裝箱和拆箱操作,由編譯器協助你書寫轉碼。

 

   在JDK5以上版本才支援自動裝箱和拆箱操作。

 

3. String類瞭解

    

String s=new String("abc");

String m=new String("abc");

 

通過new String()文法將告訴編譯器建立新對象,所以這裡建立兩個字串對象。

    System.out.println(s==m);

String a="xyz";

String b="xyz";

System.out.println(a==b);

為了相容C開發人員的習慣,SUN也允許不寫new String,而字串賦值。

    當”xyz”這個字串對象在記憶體中不存在的時候,系統將建立一個字串對象,當已經存在的時候,系統將複用這個對象。

 

字串的不變性(immutable)

任何字串對象一旦被建立,就不能被更改,通過引用變數導致字串的修改,都將導致新字串對象的建立。

 

a=a+"mn";

System.out.println(a==b);

 

    大量的字串相加操作會產生大量的字串對象,比如:

    String a=”superstar”;

    a=a+”m”;

    如果有涉及到較多的字串相加操作,請使用StringBuffer類。

    

     String s=" this is a book! ";

System.out.println(s.length()); //求字串長度

System.out.println(s.trim().length()); //去除頭尾空格

System.out.println(s.toUpperCase());

System.out.println("aBcD".toLowerCase());

System.out.println(s.indexOf(‘s‘)); //找出s這個字元在字串中首次出現的位置

System.out.println(s.lastIndexOf(‘s‘));//找出s這個字元在字串中最後一次出現的位置

System.out.println(s.indexOf("book")); //找出子串出現的位置

System.out.println(s.indexOf("world!"));

System.out.println(s.toCharArray()[3]);

System.out.println(s.charAt(3));

System.out.println(s.concat("hello,world!")); //字串相加

System.out.println("abc".compareTo("bca"));  //-1,0,1

System.out.println("abc".compareTo("abc"));  //-1,0,1

System.out.println("cbc".compareTo("bca"));  //-1,0,1

System.out.println("Abc".compareToIgnoreCase("aBc"));

System.out.println(s.contains("book"));

System.out.println(s.endsWith("! "));

System.out.println(s.isEmpty()); //是否為空白

System.out.println(s.replace(‘s‘, ‘m‘));

System.out.println(s.valueOf(1));

System.out.println(1+"");

System.out.println("abcdefg".substring(3));

    System.out.println("abcdefg".substring(3,6));



key: 進程 & 線程

進程是一個邏輯單位,線程類似一個物理單位,進程像班級,線程像學生,一般班級出行申請經費,都是以班級的名字,所以這裡表示由

進程進行申請,作業系統只會給進程分配空間,一個進程至少包含一個線程,進程申請了資源,如同班級申請了班費,班費800元,給每個學生平分500元,這500元叫棧,剩下300公用的叫堆- - 

程式猿通過調用棧內的引用變數,對類對象進行發送訊號,類對象收到訊號後,使用對象的代碼指標調用相對應的代碼,存取碼的時候有些情況下需要用到類對象的屬性內容,於是出現了this指標,this指標的作用是方便代碼層更準確的定位到所需對象的屬性資料




著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Java StuNote 3

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.