黑馬程式設計師——Java語法基礎(二)
-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------
七、函式
1.什麼是函式?
定義在類中的具有特定功能的一段獨立小程式 ,就叫函式,也可以稱為方法。
2.函式的格式:
修飾符 返回值型別 函式名(引數型別 形式引數1,引數型別 形式引數2,…)
{
執行語句;
return返回值;
}
其中:
返回值型別:函式執行後的結果的資料型別。
引數型別:是形式引數的資料型別。
形式引數:是一個變數,用於儲存呼叫函式時傳遞給函式的實際引數。
實際引數:傳遞給形式引數的具體數值。
return:用於結束函式。
返回值:該值會返回給呼叫者。
3.函式特點:
1)定義函式可以將功能程式碼進行封裝,便於對該功能進行復用。
2)函式只有被呼叫才會被執行。
3)函式的出現提高了程式碼的複用性。
4)對於函式沒有具體返回值的情況,返回值型別用關鍵字void表示,那麼該函式中的return語句如果在最後一行可以省略不寫。
注意:
a) 函式中只能呼叫函式,不可以在函式內部定義函式。
b) 定義函式時,函式的結果應該返回給呼叫者,交由呼叫者處理。4.函式過載:
1)定義:在同一個類中,如果兩個函式同名,那麼引數列表的個數或者引數型別不同(包括引數的先後順序)即為過載。
2)作用:方便於閱讀,優化了程式設計。
3)過載示例:
- class Overload //函式過載
- {
- publicstaticvoid main(String[] args)
- {
- System.out.println(get(2)+"-----"+get(1,3));
- }
- publicstaticint get(int x)//定義一個函式,返回x的平方
- {
- return x*x;
- }
- publicstaticint get(int a,int b)//定義一個函式,返回a+b的和
- {
- return a+b;
- }
- }
注:過載與返回值型別無關,同一個類中,如果兩個函式返回值型別不同,而函式名、引數列表的個數和引數型別相同,那麼是不允許同時存在的,因為呼叫時不能確定具體呼叫的物件。
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個元素(最後一個數)比較為止。
程式碼示例:
- //選擇排序
- publicstaticvoid selectSort(int[] arr)
- {
- //定義一個臨時變數
- int temp=0;
- //對arr陣列進行遍歷
- for (int x=0;x<arr.length ;x++ )
- {
- for (int y=x+1;y<arr.length ;y++ )
- {
- //將角標為x的值與之後的每一個元素進行比較,如果y角標的值比x角標的值打,將x和y的值互換
- if (arr[x]<arr[y])
- {
- temp=arr[x]; //將x角標的值賦給temp
- arr[x]=arr[y];//將y角標的值賦給x角標
- arr[y]=temp; //將temp的值賦給y角標
- }
- }
- }
- }
氣泡排序:
原理:在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。
程式碼示例:
- //氣泡排序
- publicstaticvoid bubbleSort(int[] arr)
- {
- //定義臨時變數
- int temp=0;
- //將arr陣列進行遍歷
- for (int x=arr.length;x>0 ;x-- )
- {
- for (int y=0;y<x-1 ;y++ )
- {
- //將角標為y的值與角標為(y+1)的值進行比較,如果y角標元素的值比(y+1)角標元素的值大,將兩個元素的值互換
- if (arr[y]<arr[y+1])
- {
- temp=arr[y+1]; //將角標y+1元素的值賦給temp
- arr[y+1]=arr[y]; //將角標y元素的值賦給角標為y+1的元素
- arr[y]=temp; //將temp的值賦給角標為y的元素
- }
- }
- }
- }
2)查詢:
對陣列進行查詢的方法主要介紹兩種,即二分查詢法和查表法。
二分查詢法:
原理:定義兩個指標start和end分別指向陣列的最前和最後兩個數,將start和end的角標值相加併除以2,並將該值用變數mid進行記錄,如果陣列mid角標的數值比要查詢的值大,則把mid角標賦給end,反之賦給start,如果相等則停止查詢,就這樣不斷重複迴圈該過程,直到start等於end,或者找到查詢的值為止。
程式碼示例:
- //二分查詢
- publicstaticvoid halfSearch(int[] arr,int a)
- {
- //定義兩個指標start和end分別指向arr陣列的最前和最後兩個數
- int start=0,end=arr.length-1;
- //定義一個變數mid和標誌flag
- int flag=0,mid=0;
- //建立迴圈,只要指標start<=end就繼續迴圈
- while (start<=end)
- {
- //將兩個指標的角標值相加再除以2賦給mid
- mid=(start+end)/2;
- if (arr[mid]>a)
- //如果角標為mid的元素的值大於要查詢的值,則將mid-1的賦給指正end
- end=mid-1;
- elseif (arr[mid]<a)
- //如果角標為mid的元素的值小於要查詢的值,則將mid-1的賦給指正end
- start=mid+1;
- else
- {
- //如果角標為mid的元素的值等於要查詢的值,則將flag置為1
- flag=1;
- break;
- }
- }
- if (flag==1)
- //如果標誌被置為1,則要查詢的值的角標為mid
- System.out.println("要查詢的數在陣列的角標為:"+mid);
- else
- //如果標誌flag為0,則陣列中沒有要查詢的值
- System.out.println("要查詢的數沒有在該陣列中找到!");
- }
查表法(進位制轉換):
原理:將所有元素臨時儲存起來,建立對應關係。每一次&進位制的最大數後的值,作為索引去查建立好的表,就可以找對應的元素。
程式碼示例1:十進位制轉十六進位制
- //十進位制轉十六進位制
- publicstaticvoid toHex(int num)
- {
-
相關推薦
黑馬程式設計師——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