java自學之路-day06
JAVA06
引用數據類型
- 數組
- 類
- 接口
- 也是一種引用類型
- 用於定義屬性和功能對現實中的事物的描述 例如 學生類的定義
- 格式
自定義數據類型
public calss 類名{
屬性和方法
屬性定義
修飾符 數據類型 變量名=值
方法定義
修飾符 返回類型 方法名(參數列表){
}
}
- 創建引用類型變量的格式
數據類型 變量名 =new 數據類型();
實現引用類型的步驟
a) 導入包 在同一文件夾不需要導包
b) 創建引用類型的變量
c) 變量.類型中的變量
d) 變量.屬性=
e) 變量.功能
內存圖
l 一個引用類型變量
- 方法棧 堆 方法區
- 測試類先進入方法區 執行main方法
- 自定義類進入方法區 執行創建屬性
- main方法進入方法棧 創建自定義類對象
- JVM在堆內存中 開辟一個空間 存儲自定義對象
- 自定義中的屬性跟隨容器進入堆內存 並被賦予默認值 null或者0.0…
- JVM把內存地址傳遞到引用變量
- 然後mian方法根據內存地址進行變量賦值替換默認值
- 然後打印,之後main方法結束,退棧
- 整個過程結束
l 兩個引用類型變量
- 方法棧 堆 方法區
- 測試類先進入方法區 執行main方法
- 自定義類進入方法區 執行創建屬性
- main方法進入方法棧 創建自定義類對象
- JVM在堆內存中 開辟一個內存空間 存儲自定義對象
- 自定義中的屬性跟隨容器進入堆內存 並被賦予默認值 null或者0.0…
- JVM把內存地址傳遞到引用變量
- JVM在堆內存中 再次開辟一個內存空間 存儲自定義對象
- 自定義中的屬性跟隨容器進入堆內存 並被賦予默認值 null或者0.0…
- JVM把內存地址傳遞到引用變量
- 然後mian方法根據兩個不同內存地址進行變量賦值替換默認值
- 然後打印,之後main方法結束,退棧
- 整個過程結束
練習
汽車 brand(品牌) color outputvolume(排量)
學生 name num sex
ArrayList集合類
- 一個容器
- 引用數據類型
- 使用步驟
a) 導入包
b) 創建引用類型變量
數據類型< 集合存儲的數據類型> 變量名=new 數據類型<集合存儲的數據類型>();
ArrayList<數據類型> array=new ArrayList<數據類型>
變量名.方法
集合存儲的數據類型
- 不存儲基本類型
- 只存儲引用類型
- 可以存儲基本類型對應的引用類型
集合方法
- .add(數據類型); 添加集合元素
- .get( int index); 根據索引(從0開始)取出集合中的元素
- .size(); 返回集合的長度
遍歷ArrayList
For循環遍歷輸出.get();
補充方法
- set(int 索引,修改後的元素); 修改元素
- add(int 索引,添加的元素); 添加元素
- remove(int 索引); 刪除元素
- clear();清空集合所有的元素
- 凡是具體實物用一個class封裝類來表示
- 集合來存儲商品對象
- 遍歷集合來顯示商品個屬性
- 集合的set方法來實現修改信息
- 可以內存地址重復指向一個相同的變量名,但不能同時,兩次新建對象堆內存一共開辟兩部分內存空間給兩個自定義類引用類型變量,生成的兩個不同的內存地址添加到集合中,所以信息會不同
練習 隨機抽獎器
練習 庫存管理器集合版
奇數求和練習
計算1-100之間的所有的奇數和
- 先把根據題目數據定義好變量
a) 定義一個變量用於保存求和
Int sum=0;
- 利用循環讓變量從0變化到100
for(i=0;i<=100;I++){
}
- 判斷變量是否為奇數
for(i=0;i<=100;I++){
if(i %2==1){
sum+=I;
}
}
- 如果是奇數就和預先定義好的變量相加求和
Sop(sum);
- 擴展
for(i=1;i<=100;i+=2){
sum+=i;
}
計算水仙花數
求三位數 100-999中的水仙花數
- 個位數的立方+十位數的立方+百位數的立方=自己本身
- 步驟
a) 定義變量存儲三個數位上的整數
b) 利用循環,變量從100變道999
c) 利用求模 除法 求出循環得到的三位數的每一數位
d) 對三個數位進行立方求和
e) 判斷和是否和這個三位數相等
f) 如果相等就是水仙花數
ASCII編碼
- 計算機運行的都是二進制
- 為了計算機直接識別人類的文字
- 美國人提出:人類的文字和一個整數進行一一對應
- 人為規定 字母a對應97大寫A對應十進制65 機器把97轉成2進制能夠識別
- aA zZ 0-9 !@#$%^*一一進行對應形成一個表
- 此表就叫做ASCII表
- 中國也想計算機識別漢字
- 十進制數對應一個漢字
- 之後有了第一個中文編碼表 GB2312
- 太少了就升級為 GBK
- 各國都有了各國的編碼表
- 因此 ISO 統一了編碼表 Unicode 萬國碼表 存儲了全球所有的語言
- 所有編碼表都兼容ASCII
- 字符java 數據類型 char
- 整數java 數據類型 int
- char類型和int類型相加,int4字節 char 2個字節 char自動提升為int,在編碼表中查找得到一個整數,和int相加
char類型的存儲
int I =’a’+1
結果為98 a為97
Char h=(char)90;
- 4. 字符和整數運算會查詢ASCII編碼表
- 5. char存儲漢字是會查詢Unicode表 一個漢字兩個字節
- 6. char類型取值範圍 0-65535
a) short -32768 32767 char 0- 65535
b) short 類型二進制最高位 符號位 1負數 0正數 後面的是數值位
c) char 類型二進制 全是數值 沒有符號位 0和1都表示正數
d)
e) char不能儲存負數 無符號數據類型
練習 輸出所有英文字母包括大小寫
99乘法表
特殊格式遍歷數組
數組的逆序原理
- 數組中的元素進行位置上的交換
- 不等於反省遍歷
- 數組最遠端位置交換
- 指針思想 數組的索引
- 指針可以隨時指向任意一個索引
- 需要兩個指針 一個指向小 一個指向大
- 然後小++ 大—分別移動變換指向來進行換位
- 數組換位用第三方的變量 臨時儲存
排序
l 選擇排序
數組中的每個元素進行比較
嵌套循環
- 找規律 一共比較了三輪 每輪比較的次數在減少for(int i=0;i<arr.length-1;i++){
- 因此用嵌套for循環 外層循環來確定輪數 即數組長度減一 內存循環用來確定每輪次數 即從輪數加1到數組長度次 for(int j=i+1;j<arr.length;j++)因為需要從0元素開始比較j和i,0和0不用比較而且每次遞減 所以需要從i+1
l 冒泡排序
數組中的相鄰元素進行比較
0 1 1 2 2 3
0 1 1 2
0 1
a) 找規律
b) 一共 數組長度減一 輪 for(int i=0;i<name.length-1;i++) 0 1 2正好三輪
c) 每輪 數組長度減輪數 次 for(int j=0;j<arr.length-i-1;j++)(1. 3=4-0-1 2. 2=4-1-1 3.1=4-2-1)j=0:因為需要從0元素開始比較j和j+1 j<arr.length-i-1 :需要比較次數每次遞減 且元素從0元素開始第一次相當於沒減所以還得減一
d) 比較 j和j+1比較
折半查找(二分查找)
原理
- 折半公式
(max+min)/2
- 指針思想 指向索引
max指針
min指針
mid指針
- 循環折半
- 小指針索引 小於 大指針索引為 循環條件
- 比較元素大於中間索引 min=mid+1
- 比較元素小於中間索引 max=mid-1
- 比較元素等於中間索引 返回mid
- 首先需要理解指針思想 需要三個指針 一個指向最小的索引 一個指向最大的索引 一個指向中間的索引
- 然後進行拿著要查找的元素和中間的索引所對著的元素進行比較
- 如果等於就返回這個索引 mid 說明找到了這個數
- 如果 該元素的大於中間索引指向的元素 就把 最小索引指向 中間索引指向的數的右邊的數,也就是 最小索引 等於 中間索引加1,最大索引不變
- 如果 該元素的小於中間索引指向的元素 就把 最大索引指向 中間索引指向的數的左邊的數,也就是 最大索引 等於 中間索引減1,最小索引不變
- 判斷之後形成的新的比較排列
- 然後在進行2,3和4的比較
- 直到 最小索引和最大索引相同 也就是同時指向了一個數 也就是只剩下了一種可能 min max 以及 mid都是一個數 如果此時不等於這個數,就說明找不到了
- 但計算機會繼續進行比較
- 繼續進行 2,3 和 4的比較
- 如果這個數大於這個數 min就會+1 max不變
- 如果這個數大於這個數 max就會-1 min不變
- 此時無論哪種情況都會使得min>max 就不用比較了,說明找不到這個數
總結
java自學之路-day06