Java學習筆記[第5章-第7章]

來源:互聯網
上載者:User

標籤:

對象的行為

方法調用棧

所有的方法都維護在一個稱為調用棧的結構中,當前正在執行的方法位於調用棧。

對於基本類型的變數:java虛擬機器將其放在棧中。

對於參考型別的變數:引用變數本身放在棧中,而引用所指向的對象是放在java堆中。引用不包含它所指向的對象的實際資料,而是指向記憶體中對象所在的位置。

如果一個變數是參考型別的,那麼變數的值就是一個記憶體位址,這個記憶體位址是引用指向的對象的位置。

 

按值調用

 

指的是在方法調用時,傳遞的參數是按值的拷貝傳遞。

樣本如下:

public class TempTest {

private void test1(int a){

//做點事情

}

public static void main(String[] args) {

TempTest t = new TempTest();

int a = 3;

t.test1(a);//這裡傳遞的參數a就是按值傳遞

}

}

按值傳遞重要特點:傳遞的是值的拷貝,也就是說傳遞後就互不相關了。

樣本如下:

public class TempTest {

private void test1(int a){

a = 5;

System.out.println("test1方法中的a==="+a);

}

public static void main(String[] args) {

TempTest t = new TempTest();

int a = 3;

t.test1(a);//傳遞後,test1方法對變數值的改變不影響這裡的a

System.out.println("main方法中的a==="+a);

}

}

運行結果是: test1方法中的a===5

      main 方法中的 a===3


3.2:按引用傳遞是什麼 指的是在方法調用時,傳遞的參數是按引用進行傳遞,其實傳遞的引用的地址,也就是 變數所對應的記憶體空間的地址。

3.3:按引用傳遞的重要特點 傳遞的是值的引用,也就是說傳遞前和傳遞後都指向同一個引用(也就是同一個記憶體 空間)。

樣本如下: 第1行 public class TempTest {

 private void test1(A a){

a.age = 20;

System.out.println("test1方法中的age="+a.age);

}

public static void main(String[] args) {

 TempTest t = new TempTest();

 A a = new A();

a.age = 10;

 t.test1(a);

 System.out.println("main方法中的age="+a.age);

 }

}

class A{

 public int age = 0;

}

運行結果如下: test1方法中的age=20

        main 方法中的 age=20

(1): “在 Java 裡面參數傳遞都是按值傳遞”這句話的意思是:按值傳遞是傳遞的值的 拷貝,按引用傳遞其實傳遞的是引用的地址值,所以統稱按值傳遞。

(2):在 Java 裡面只有基本類型和按照下面這種定義方式的 String 是按值傳遞,其它 的都是按引用傳遞。就是直接使用雙引號定義字串方式:String str = “Java 私塾”;   

 

 

方法的重載

當一個類有兩到多個同名 但是有不同的參數列表的方法。

 

重載樣本 如下例所示:

void getArea(int w,int h);

void getArea(float w,float h);

在第二種情況下,成員方法 getArea()接受兩個浮點變數作為它的參數,編譯器根據調 用時的不同參數來決定該調用哪一種成員方法,假如你把兩個整數提供給成員方法,就 調 用 第 一個成員方法;假如你把兩個浮點數提供給成員方法,第二個成員方法就被調用。 當寫代碼來調用這些方法中的一個方法時,便以其會根據提供的參數的類型來選擇合適 的方法。
注意:跟成員方法一樣,構造方法也可以重載。
2.2:方法的重載的規則
(1):方法名稱必須相同

(2):參數列表必須不同(個數不同,或類型不同,或參數排列順序不同) 。

(3):方法的傳回型別可以相同也可以不相同。僅僅傳回型別不同不足以成為方法的重 載。

數組

數組是由相同類型的若干項資料群組成的一個資料集合。也就是說數組是用來集合相同類 型的對象並通過一個名稱來引用這個集合,數組是參考型別。 

聲明方法:

聲明一:  int x[];

聲明二:int [] x=new int[3];

聲明三:int[]x=new int[]{3,4,5};

 

 

數組複製的方法是使用System類提供的arraycopy()方法,其文法如下:

 

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);

 

System.arraycopy(源數組,源數組中的起始位置,目標數組,目標資料中的起始位置,要複製的數組元素的數量);

 

 

 

public class T {

 

       public static void main(String args[]){

 

              int arr1[] = {1,2,3,4,5};

 

              int arr2[] = new int[5];

 

              System.arraycopy(arr1, 0, arr2, 0, 5);

 

              for (int i = 0; i < arr2.length; i++) {

 

                     System.out.println(arr2[i]);

 

              }

 

       }

 

}

 

 

Arrays類

 

對數組的一些基本操作,像排序、搜尋與比較等都是很常見的。在java中提供了Array是類可以協助您作這幾個操作,Array是類位於java.util包中,他提供了幾個方法可以直接使用。

 

sort()                       協助您對指定的數組排序,所使用的是快速排序法

 

binarySearch()      讓您對已排序的數組進行二元搜尋,如果找到指定的值就返回該值所在的索引,否則就返回負值

 

fill()                           當您配置一個數組之後,會依據資料類型來給定預設值。例如整數數組就初始值為0,可以使用Arrays.fill()方法將所有的元素設定為指定的值

 

equals()                   比較兩個數組中的元素值是否全部相等,如果是將返回true,否則返回false

繼承

public class Employee {  

String name;

  Date hireDate;  

Date dateOfBirth;  

String jobTitle;   int grade;  

... }

public class Manager extends Employee {  

String department;  

Employee[] subordinates;  

... }

在這樣的定義中,Manager 類被定義,具有 Employee 所擁有的所有變數及方法。所有 這些變數和方法都是從父類的定義中繼承來的。

關鍵字是extends.

在 Java 程式設計語言中,對象的初始化是非常結構化的,這樣做是為了保證安全。在前面 的模組中,看到了當一個特定對象被建立時發生了什麼。由於繼承性,對象被完成,而且下 述行為按順序發生:

(1)儲存空間被分配並初始化到 0 值    

(2)進行顯式初始化    

(3)調用構造方法 

關鍵字 super

關鍵字 super 可被用來引用該類的父類,它被用來引用父類的成員變數或方法。父類行 為被調用,就好象該行為是本類的行為一樣,而且調用行為不必發生在父類中,它能自動向 上層類追溯。
super 關鍵字的功能:

(1):點取父類中被子類隱藏了的資料成員

(2):點取已經覆蓋了的方法

(3):作為方法名表示父類構造方法

例如:

public class Employee {

private String name;

private int salary;

public String getDetails() {

return "Name: " + name + "\nSalary: " + salary; }

}

public class Manager extends Employee {

private String department;
public String getDetails() {

return super.getDetails() + // 調用父類的方法 "\nDepartment: " + department;

}

}

構造方法不能被繼承                                                              

 儘管一個子類從父類繼承所有的方法和變數,但 它不繼承構造方法,掌握這一點很重要。 一個類能得到構造方法,只有兩個辦法。或者寫構造方法,或者根本沒有寫構造方法, 類有一個預設的構造方法。 

調用父類構造方法

在許多情況下,使用預設構造方法來對父類對象進行初始化。 當然也可以使用 super 來顯示調用父類的構造方法。
public class Employee {

String name;

public Employee(String n) {

name = n;

}

}
public class Manager extends Employee {

String department;

public Manager(String s, String d) {

super(s);

department = d;

}

}

注意:無論是 super 還是 this,都必須放在構造方法的第一行。

單繼承性                         

單繼承性:當一個類從一個唯一的類繼承時,被稱做單繼承性。單繼承性使代碼更可靠。 介面提供多繼承性的好處,而且沒有(多繼承的)缺點。 Java 程式設計語言允許一個類僅能繼承一個其它類,即一個類只能有一個父類。這個限制 被稱做單繼承性。單繼承性與多繼承性的優點是物件導向程式員之間廣泛討論的話題。Java 程式設計語言加強了單繼承性限制而使代碼更為可靠,儘管這樣有時會增加程式員的工作。後面 會學到一個被叫做介面(interface)的語言特徵,它允許多繼承性的大部分好處,而不受 其缺點的影響。

 

 

Java學習筆記[第5章-第7章]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.