1. 程式人生 > >黑馬程式設計師——Java語法基礎(二)

黑馬程式設計師——Java語法基礎(二)

-----------android培訓java培訓、java學習型技術部落格、期待與您交流!------------

七、函式

     1.什麼是函式?

      定義在類中的具有特定功能的一段獨立小程式 ,就叫函式,也可以稱為方法。

     2.函式的格式:

                           修飾符 返回值型別 函式名(引數型別 形式引數1,引數型別 形式引數2,…) 

                         {

                           執行語句;

                            return返回值;

                         }

      其中:

              返回值型別:函式執行後的結果的資料型別。

              引數型別:是形式引數的資料型別。

              形式引數:是一個變數,用於儲存呼叫函式時傳遞給函式的實際引數。

              實際引數:傳遞給形式引數的具體數值。

              return:用於結束函式。

             返回值:該值會返回給呼叫者。

      3.函式特點:

      1)定義函式可以將功能程式碼進行封裝,便於對該功能進行復用。

      2)函式只有被呼叫才會被執行。

      3)函式的出現提高了程式碼的複用性。

      4)對於函式沒有具體返回值的情況,返回值型別用關鍵字void表示,那麼該函式中的return語句如果在最後一行可以省略不寫。

      注意:

             a) 函式中只能呼叫函式,不可以在函式內部定義函式。

             b) 定義函式時,函式的結果應該返回給呼叫者,交由呼叫者處理。

      4.函式過載:

      1)定義:在同一個類中,如果兩個函式同名,那麼引數列表的個數或者引數型別不同(包括引數的先後順序)即為過載。

      2)作用:方便於閱讀,優化了程式設計。

      3)過載示例:

  1. class Overload //函式過載 
  2. {  
  3.     publicstaticvoid main(String[] args)   
  4.     {  
  5.         System.out.println(get(2)+"-----"+get(1,3));  
  6.     }  
  7.     publicstaticint get(int x)//定義一個函式,返回x的平方
  8.     {  
  9.         return x*x;  
  10.     }  
  11.     publicstaticint get(int a,int b)//定義一個函式,返回a+b的和
  12.     {  
  13.         return a+b;  
  14.     }  
  15. }  
 上面自定義的兩個函式發生了過載,因為函式名一樣,但引數列表不同。

 注:過載與返回值型別無關,同一個類中,如果兩個函式返回值型別不同,而函式名、引數列表的個數和引數型別相同,那麼是不允許同時存在的,因為呼叫時不能確定具體呼叫的物件。

      4)過載的應用場合:

      當定義的功能相同,但參與運算的未知內容不同,可通過過載實現。

5.問題思考

     函式定義名稱是為什麼?有什麼作用?

     ——可以讓人見名知意,方便於呼叫,增加程式碼的閱讀性。

八、陣列

1.什麼是陣列?

     同一種類型資料的集合,就成為陣列。

     2.一維陣列:

     1)定義:一維陣列是由數字組成的以單純的排序結構排列的結構單一的陣列。

     2)格式:格式有兩種。

     格式1:元素型別 [ ]   陣列名 = new 元素型別 [元素個數或陣列長度] 

     示例: int [ ]  arr = new int [3]

     格式2:元素型別 [ ]   陣列名 = new 元素型別 [ ]{元素1,元素2,…}

     示例:int [ ]  arr = new int [ ]{1,2,3,4,5}

     靜態初始化格式:元素型別 [ ]   陣列名 = {元素1,元素2,…}

     示例:int [ ] arr={1,2,3,4,5}

     注:new是用來在堆記憶體中產生一個容器實體。

     3)記憶體分配:

     陣列引用資料型別,記憶體分配情況如下圖:

     

     3.二維陣列:

     1)定義:一個一維陣列存放的元素為一維陣列時,該陣列即為二維陣列。

     2)格式:主要有3種。

     格式1示例: int[ ][ ] arr= new int[3][2]

     格式2示例: int[ ][ ] arr= new int[3][ ]

     格式3示例:int[ ][ ] arr = {{3,8,2},{2,7},{9,0,1,6}}

     注:此種格式中每個一維陣列都是預設初始化值null,一種特殊定義寫法:int[ ]   x,y[ ]; x是一維陣列,y是二維陣列。

 4.陣列常識:

     1)使用輸出語句直接列印陣列,如System.out.println(arr),得到的結果是一個雜湊值,也叫地址值。

     2)陣列在堆記憶體開闢空間後,就有預設的初始化值。如:int預設0;boolean預設false;double預設是0.0;float預設是0.0;string預設為null。

     3)為了提高程式運算效率,java對記憶體空間進行了不同區域的劃分,因為每一片區域都有特定的處理資料方式和記憶體管理方式。主要介紹棧記憶體和堆記憶體的特點:

     棧記憶體:用於儲存區域性變數,當資料使用完,所佔空間會自動釋放。

     堆記憶體:

               a)陣列和物件,通過new建立的例項都存放在堆記憶體中。

             b)每一個實體都有記憶體地址值。

             c)實體中的變數都有預設初始化值。

             d)實體不在被使用,會在不確定的時間內被垃圾回收器回收。

     4)兩個常見異常:角標越界異常(ArrayIndexOutOfBoundsException)和空指標異常(NullPointerException)

     角標越界異常:訪問到了陣列中的不存在的腳標時發生。

     空指標異常:引用沒有指向null,卻在操作實體中的元素。

     注:通過new進行初始化陣列時,在編譯時期陣列物件還沒建立,因此陣列角標越界異常(ArrayIndexOutOfBoundsException)和空指標異常(NullPointerException)只在執行時期產生。

     5)獲取陣列長度:

獲取陣列arr的長度為arr.length()方法獲取,如果arr為二維陣列,那麼arr.length()獲取的是一維陣列的個數,如果陣列元素arr[x]還是一個數組時,可通過arr[x].length()獲取其內元素的個數,即arr[x]的長度。

     5.陣列常見操作:

     1)排序:

     排序有內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存,主要排序方法有選擇排序、氣泡排序、快速排序、希爾排序、堆排序、插入排序、歸併排序等。

     

     排序有很多方法可以實現,這裡只對選擇排序和氣泡排序進行介紹:

     選擇排序:

     原理:在要排序的一組數中,選出最小(或者最大)的一個數與第1個位置的數交換;然後在剩下的數當中再找最小(或者最大)的與第2個位置的數交換,依次類推,直到第n-1個元素(倒數第二個數)和第n個元素(最後一個數)比較為止。

     程式碼示例:

  1. //選擇排序
  2. publicstaticvoid selectSort(int[] arr)  
  3. {   
  4.     //定義一個臨時變數
  5.     int temp=0;  
  6.     //對arr陣列進行遍歷
  7.     for (int x=0;x<arr.length ;x++ )  
  8.     {  
  9.         for (int y=x+1;y<arr.length ;y++ )  
  10.         {  
  11.             //將角標為x的值與之後的每一個元素進行比較,如果y角標的值比x角標的值打,將x和y的值互換
  12.             if (arr[x]<arr[y])  
  13.             {  
  14.                 temp=arr[x]; //將x角標的值賦給temp
  15.                 arr[x]=arr[y];//將y角標的值賦給x角標
  16.                 arr[y]=temp; //將temp的值賦給y角標
  17.             }  
  18.         }  
  19.     }  
  20. }  

      氣泡排序:

     原理:在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。

     程式碼示例:

  1. //氣泡排序
  2. publicstaticvoid bubbleSort(int[] arr)  
  3. {  
  4.     //定義臨時變數
  5.     int temp=0;  
  6.     //將arr陣列進行遍歷
  7.     for (int x=arr.length;x>0 ;x-- )  
  8.     {  
  9.         for (int y=0;y<x-1 ;y++ )  
  10.         {  
  11.             //將角標為y的值與角標為(y+1)的值進行比較,如果y角標元素的值比(y+1)角標元素的值大,將兩個元素的值互換
  12.             if (arr[y]<arr[y+1])  
  13.             {  
  14.                 temp=arr[y+1]; //將角標y+1元素的值賦給temp
  15.                 arr[y+1]=arr[y]; //將角標y元素的值賦給角標為y+1的元素
  16.                 arr[y]=temp; //將temp的值賦給角標為y的元素
  17.             }  
  18.         }  
  19.     }  
  20. }  

     2)查詢:

     對陣列進行查詢的方法主要介紹兩種,即二分查詢法和查表法。

     二分查詢法:

     原理:定義兩個指標start和end分別指向陣列的最前和最後兩個數,將start和end的角標值相加併除以2,並將該值用變數mid進行記錄,如果陣列mid角標的數值比要查詢的值大,則把mid角標賦給end,反之賦給start,如果相等則停止查詢,就這樣不斷重複迴圈該過程,直到start等於end,或者找到查詢的值為止。

 程式碼示例:

  1. //二分查詢
  2. publicstaticvoid halfSearch(int[] arr,int a)  
  3. {  
  4.     //定義兩個指標start和end分別指向arr陣列的最前和最後兩個數
  5.     int start=0,end=arr.length-1;  
  6.     //定義一個變數mid和標誌flag
  7.     int flag=0,mid=0;  
  8.     //建立迴圈,只要指標start<=end就繼續迴圈
  9.     while (start<=end)  
  10.     {  
  11.         //將兩個指標的角標值相加再除以2賦給mid
  12.         mid=(start+end)/2;  
  13.         if (arr[mid]>a)  
  14.             //如果角標為mid的元素的值大於要查詢的值,則將mid-1的賦給指正end
  15.             end=mid-1;  
  16.         elseif (arr[mid]<a)  
  17.             //如果角標為mid的元素的值小於要查詢的值,則將mid-1的賦給指正end
  18.             start=mid+1;  
  19.         else
  20.         {  
  21.             //如果角標為mid的元素的值等於要查詢的值,則將flag置為1
  22.             flag=1;  
  23.             break;  
  24.         }  
  25.     }  
  26.     if (flag==1)  
  27.         //如果標誌被置為1,則要查詢的值的角標為mid
  28.         System.out.println("要查詢的數在陣列的角標為:"+mid);  
  29.     else
  30.         //如果標誌flag為0,則陣列中沒有要查詢的值
  31.         System.out.println("要查詢的數沒有在該陣列中找到!");  
  32. }  

查表法(進位制轉換):

      原理:將所有元素臨時儲存起來,建立對應關係。每一次&進位制的最大數後的值,作為索引去查建立好的表,就可以找對應的元素。

程式碼示例1:十進位制轉十六進位制

  1. //十進位制轉十六進位制
  2. publicstaticvoid toHex(int num)  
  3. {  
  4. 相關推薦

    黑馬程式設計師——Java語法基礎

    -----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 七、函式      1.什麼是函式?       定義在類中的具有特定功能的一段獨立小程式 ,就叫函式,也可以稱為方法。      2.函式的

    黑馬程式設計師——Java IO流之流操作規律總結、File類、Properties類、序列流等

    -----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 六、流操作規律總結  1.明確源和目的:   源:    字元流:FileReader(純文字檔案)。    位元組流:FileInputStream(

    黑馬程式設計師——Java面向物件之封裝、繼承、多型、介面等

    -----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 五、面向物件的特徵  面向物件主要有三大特徵: 1.特徵一 —— 封裝  1)定義:是指隱藏物件的屬性和實現細節,僅對外提供公共訪問方式。 2)好處:

    黑馬程式設計師——Java語言基礎

    -----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------     對於Java初學者,學好Java語言基礎是非常重要的,這將影響將來程式設計的程式碼質量與效率。那麼Java語言基礎內容包括哪些呢?Java基礎內

    黑馬程式設計師——Java集合框架之泛型

    培訓、java培訓、java學習型技術部落格、期待與您交流!------------               泛型 一、泛型概述 1.什麼是泛型? 泛型就是指將資料型別引數化,把以前固定的資料型別用一個代表資料型別的引數進行表示,該引數可以接受傳入的任意資料型別。可以這

    黑馬程式設計師——Java集合框架之迭代器、Collection層次結構等

    -----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 集合框架概述 一、什麼是集合框架   1.什麼是集合?   集合是指把具有相同性質的一類東西匯聚成一個整體,簡單說就是指儲存資料的一個容器。集

    黑馬程式設計師——Java面向物件之匿名物件、程式碼塊、static關鍵字等

       a)子類只繼承父類的預設(預設)建構函式,即無形參建構函式。如果父類沒有預設建構函式,那子類不能從父類繼承預設建構函式。    b)子類從父類處繼承來的父類預設建構函式,不能成為子類的預設建構函式。    c)在建立物件時,先呼叫父類預設建構函式對物件進行初始化,然後呼叫子類自身自己定義的建構函

    黑馬程式設計師——Java集合框架之Map集合、Collections與Arrays工具類

    -----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ Map集合 一、概述 Map集合儲存的元素是鍵值對,即將鍵和值一對一對往裡存,而且要保證鍵的唯一性。  問題思考:   1.如何保證鍵的唯一性?   

    黑馬程式設計師——Java面向物件之內部類、異常、包等

    -----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 六、物件的其他重要內容 1.單例設計模式  1)什麼是單例設計模式?   單例設計模式是指能夠確保一個類只有一個例項,並且能夠自行向整個系統提供這個例項

    黑馬程式設計師——Java IO流之IO流概述、字元流、位元組流等

    -----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ IO流 一、概述 1.IO流是用來處理裝置之間的資料傳輸。  2.Java對資料的操作時通過流的方式。  3.Java用於操作流的物件都在IO包中。  

    黑馬程式設計師-IOS學習筆記常用關鍵字和方法

    ------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流!------- 常用關鍵字和方法: 一.記憶體管理情況 1- autorelease,當用戶的程式碼在持續執行時,自動釋放池是不會被銷燬的,這段時間內使用者可以安全地使用自動釋放的物件。當

    黑馬程式設計師-----OC記憶體管理

    ---------------------- ASP.Net+Unity開發、.Net培訓、期待與您交流! ---------------------- OC記憶體管理1>記憶體管理原則 ①只要還有人在用某個物件,那麼這個物件就不會被回收;只要想用這個物件,就讓計數

    Java語言基礎---程式流程控制語句、函式

    Java語言基礎組成:關鍵字、識別符號、註釋、常量和變數、運算子、語句、函式、陣列 一. 程式流程控制語句 1. 順序結構: 簡單的語句都是順序結構的。 2. 判斷結構: 【if 語句定義】 (1) if(條件表示式)   { 

    黑馬程式設計師——Java語言基礎之陣列

    八、陣列            1、定義:同一種資料型別的集合,其實質就是一個容器。            2、好處:自動給陣列的元素從0開始編號,方便操作。            3、格式1: 元素型別[ ]  陣列名= new 元素型別 [元素的個數或者陣列的長度] ;                

    黑馬程式設計師 java程式設計基礎知識筆記

    ---------------------- ASP.Net+Unity開發、.Net培訓、期待與您交流! ----------------------Java程式設計基礎 java程式的註釋: 根據不同的功能,分三種: 1、單行註釋比如:int num = 10;//定

    Java程式設計師學習Go指南

    摘抄:https://www.luozhiyun.com/archives/211 Go中的結構體 構建結構體 如下: type AnimalCategory struct { kingdom string // 界。 phylum string // 門。 class stri

    Java語法

    version rgs tab uip class a void 文件名 私有 tail 語法糖之四:內部類   內部類:顧名思義,在類的內部在定義一個類。內部類僅僅是編譯時的概念,編譯成字節碼後,內部類會生成單獨的Class文件。   四種:成員內部類、局部內部類、匿名內

    Java14-java語法基礎十三接口

    eight java 抽象方法 數據 都是 align 之間 如圖所示 描述 Java14-java語法基礎(十三)接口 一、接口 1、接口的作用 Java出於安全性、簡化程序結構的考慮,不支持多繼承而僅支持單繼承。然而實際問題中很多情況下僅僅依靠單繼承並不能將復雜的問

    Java——語言基礎運算子、鍵盤錄入和流程控制語句

    運算子 什麼是運算子? 對常量和變數進行操作的符號稱為運算子。 運算子的分類 算數運算子:+、-、*、/、%、++、– ++、–單獨使用放在運算元前面和後面效果一樣; 參與運算 放在運算元的前面,先自增或自減,然後再參與運算; -放在操作書後面,先參與

    簡易小程式複習C語法基礎1

    #include<stdio.h> int main() { printf("Enter a number to sum:\n"); printf("Enter \"0\" if you want to quit.\n"); long su