Java基礎語法
今日內容介紹
u 自定義類
u ArrayList集合
第1章 引用數據類型(類)
1.1 引用數據類型分類
提到引用數據類型(類),其實我們對它並不陌生,如使用過的Scanner類、Random類。
我們可以把類的類型為兩種:
l 第一種,Java為我們提供好的類,如Scanner類,Random類等,這些已存在的類中包含了很多的方法與屬性,可供我們使用。
l 第二種,我們自己創建的類,按照類的定義標准,可以在類中包含多個方法與屬性,來供我們使用。
這里我們主要介紹第二種情況的簡單使用。
1.2 自定義數據類型概述
我們在Java中,將現實生活中的事物抽象成了代碼。這時,我們可以使用自定義的數據類型(類)來描述(映射)現實生活中的事物。
類,它是引用數據類型,與之前學習的所有引用數據類型相同,自定義類也是一種數據類型。只是自定義類型並非Java為我們預先提供好的類型,而是我們自己定義的一種引用數據類型用來描述一個事物。
1.3 類的定義與使用
java代碼映射成現實事物的過程就是定義類的過程。
我們就拿一部手機進行分析,它能用來做什么呢?它可以打電話,上網,聊微信等,這些就是手機所提供的功能,也就是方法;手機也有它的特征,如顏色、尺寸大小、品牌型號等,這些就是手機的特征,也就是屬性。
目前,我們只關注類中的屬性,類中的方法在面向對象部分再進行學習。
1.3.1 類的定義格式
l 類的定義格式
創建java文件,與類名相同
public class 類名{
數據類型 屬性名稱1;
數據類型 屬性名稱2;
…
}
通過類的定義格式,來進行手機類的描述,如下所示
public class Phone {
/*
* 屬性
*/
String brand;// 品牌型號
String color;// 顏色
double size; // 尺寸大小
}
上述代碼,就是創建一個類的的過程,類的名稱我們給起名為Phone,類中包含了三個屬性(brand品牌型號、color顏色、size尺寸大小)。注意,類中定義的屬性沒有個數要求。
1.3.2 類的使用格式
Phone類定義好后,我們就可以使用這個類了,使用方式和使用引用數據類型Scanner類相似。格式如下:
導包:我們將所有的類放到同一個文件夾下,可以避免導包。
創建對象:數據類型 變量名 = new 數據類型();
調用方法:目前我們定義的自定義類不涉及方法,只是屬性(自定義類中的方法部分在面向對象部分講解)
訪問屬性:變量名.屬性 (這是當前的方式,后期會采取調用方法的方式替代掉直接訪問的方式來完成對屬性的訪問。)
當有了Phone數據類型的變量后,我們就可以使用Phone類中的屬性了。對屬性的訪問我們來演示一下,如下所示:
public class Test {
public static void main(String[] args) {
//定義了一個Phone類型的變量p
Phone p = new Phone();
/*
* 通過p,使用Phone中的屬性
*/
//訪問p中的brand品牌屬性
p.brand = "蘋果6s";
//訪問p中的color顏色屬性
p.color = "白色";
//訪問p中的size尺寸大小屬性
p.size = 5.5;
System.out.println("手機品牌為" + p.brand);
System.out.println("手機顏色為" + p.color);
System.out.println("手機尺寸大小為" + p.size);
}
}
運行結果如下所示
圖1-1 運行結果
1.3.3 自定義類型注意事項與內存圖
上述代碼中,通過類Phone創建出來的變量p,它相當於我們生活中的盒子,里面包含了它能夠使用的屬性。
l 通過 p.屬性名 就可以對屬性進行操作
l 與引用類型數組類似,引用類型的自定義類型的變量,直接變量時,結果為對象地址值,這里可以通過內存圖簡單解釋。
1.4 自定義類型練習
學習了引用數據類型(類)以后,我們就能夠使用類描述任何東西了。看幾個具體的描述,如下:
l 電飯鍋,包含屬性(品牌、容量大小、顏色等)
l 汽車,包含屬性(品牌、排量、類型等)
l 學生,包含屬性(姓名,年齡,性別等)
第2章 ArrayList集合
在前面我們學習了數組,數組可以保存多個元素,但在某些情況下無法確定到底要保存多少個元素,此時數組將不再適用,因為數組的長度不可變。例如,要保存一個學校的學生,由於不停有新生來報道,同時也有學生畢業離開學校,這時學生的數目很難確定。為了保存這些數目不確定的元素,JDK中提供了一系列特殊的類,這些類可以存儲任意類型的元素,並且長度可變,統稱為集合。在這里,我們先介紹ArrayList集合,其他集合在后續課程中學習。
ArrayList集合是程序中最常見的一種集合,它屬於引用數據類型(類)。在ArrayList內部封裝了一個長度可變的數組,當存入的元素超過數組長度時,ArrayList會在內存中分配一個更大的數組來存儲這些元素,因此可以將ArrayList集合看作一個長度可變的數組。
2.1 集合的創建
創建集合的常用格式在此說明一下:
導包:import java.util.ArrayList;
創建對象:與其他普通的引用數據類型創建方式完全相同,但是要指定容器中存儲的數據類型:
ArrayList<要存儲元素的數據類型> 變量名 = new ArrayList<要存儲元素的數據類型>();
l 集合中存儲的元素,只能為<>括號中指定的數據類型元素;
l “<要存儲元素的數據類型>”中的數據類型必須是引用數據類型,不能是基本數據類型;
下面給出8種基本數據類型所對應的引用數據類型表示形式:
基本數據類型 |
對應的引用數據類型表示形式 |
byte |
Byte |
short |
Short |
Int |
Integer |
long |
Long |
float |
Float |
double |
Double |
char |
Character |
boolean |
Boolean |
我們通過舉幾個例子,來明確集合的創建方式:
l 存儲String類型的元素
ArrayList<String> list = new ArrayList<String>();
l 存儲int類型的數據
ArrayList<Integer> list = new ArrayList<Integer>();
l 存儲Phone類型的數據
ArrayList<Phone> list = new ArrayList<Phone>();
2.2 集合中常用方法
接下來,我們來學習下ArrayList集合提供的一些常用方法,如下表:
方法聲明 |
功能描述 |
boolean add(Object obj) |
將指定元素obj追加到集合的末尾 |
Object get(int index) |
返回集合中指定位置上的元素 |
int size() |
返回集合中的元素個數 |
通過代碼演示上述方法的使用。ArrayListDemo01.java
import java.util.ArrayList;
public class ArrayListDemo01 {
public static void main(String[] args) {
// 創建ArrayList集合
ArrayList<String> list = new ArrayList<String>();
// 向集合中添加元素
list.add("stu1");
list.add("stu2");
list.add("stu3");
list.add("stu4");
// 獲取集合中元素的個數
System.out.println("集合的長度:" + list.size());
// 取出並打印指定位置的元素
System.out.println("第1個元素是:" + list.get(0));
System.out.println("第2個元素是:" + list.get(1));
System.out.println("第3個元素是:" + list.get(2));
System.out.println("第4個元素是:" + list.get(3));
}
}
強調一點,ArrayList集合相當於是一個長度可變的數組,所以訪問集合中的元素也是采用索引方式訪問,第一個元素存儲在索引0的位置,第二個元素存儲在索引1的位置,依次類推。
2.3 集合的遍歷
通過集合遍歷,得到集合中每個元素,這是集合中最常見的操作。集合的遍歷與數組的遍歷很像,都是通過索引的方式,集合遍歷方式如下:ArrayListDemo02.java
1 import java.util.ArrayList;
2 public class ArrayListDemo02 {
3 public static void main(String[] args) {
4 //創建ArrayList集合
5 ArrayList<Integer> list = new ArrayList<Integer>();
6 //添加元素到集合
7 list.add(13);
8 list.add(15);
9 list.add(22);
10 list.add(29);
11 //遍歷集合
12 for (int i = 0; i < list.size(); i++) {
13 //通過索引,獲取到集合中每個元素
14 int n = list.get(i);
15 System.out.println(n);
16 }
17 }
18 }
上述代碼中,第5行定義了一個可以存儲int元素的集合;第7-10行,實現將int類型數值存儲到集合中;第12-16行,實現遍歷集合元素。這里要強調一點,get方法返回值的類型為集合中元素的類型。
2.4 集合中的常用方法補充
ArrayList集合提供的一些常用方法,如下表:
方法聲明 |
功能描述 |
boolean add(int index, Object obj) |
將指定元素obj插入到集合中指定的位置 |
Object remve(int index) |
從集合中刪除指定index處的元素,返回該元素 |
void clear() |
清空集合中所有元素 |
Object set(int index, Object obj) |
用指定元素obj替代集合中指定位置上的元素 |
l boolean add(int index, Object obj)
l 功能:在集合中指定index位置,添加新元素obj
l 功能說明:假設集合list中有元素[“java”,“javaEE”],當使用add(1,“javaWeb”)后,集合list中的元素為[“java”,“javaWeb”,“JavaEE”]。
l Object set(int index, Object obj)
l 功能:用指定元素obj替代集合中指定index位置的元素
l 功能說明:假設集合list中有元素[“java”,“javaEE”],當使用set(0,“javaWeb”)后,集合list中的元素為[“javaWeb”,“JavaEE”]。
l Object remve(int index)
l 功能:從集合中刪除指定index處的元素,返回該元素
l 功能說明:假設集合list中有元素[“java”,“javaEE”],當使用remove(0)后,集合list中的元素為[“JavaEE”],返回值為“java”。
l void clear()
l 功能:清空集合中所有元素
l 功能說明:假設集合list中有元素[“java”,“javaEE”],當使用clear()后,集合list中的元素為空[]。
第3章 隨機點名器案例
3.1 案例介紹
隨機點名器,即在全班同學中隨機的找出一名同學,打印這名同學的個人信息。
此案例在我們昨天課程學習中,已經介紹,現在我們要做的是對原有的案例進行升級,使用新的技術來實現。
我們來完成隨機點名器,它具備以下3個內容:
l 存儲所有同學姓名
l 總覽全班同學姓名
l 隨機點名其中一人,打印到控制台
3.2 案例需求分析
全班同學中隨機的找出一名同學,打印這名同學的個人信息。
我們對本案例進行分析,得出如下分析結果:
1.存儲全班同學信息(姓名、年齡)
2.打印全班同學每一個人的信息(姓名、年齡)
3.在班級總人數范圍內,隨機產生一個隨機數,查找該隨機數所對應的同學信息(姓名、年齡)
隨機點名器明確地分為了三個功能。如果將多個獨立功能的代碼寫到一起,則代碼相對冗長,我們可以針對不同的功能可以將其封裝到一個方法中,將完整獨立的功能分離出來。
而在存儲同學姓名時,如果對每一個同學都定義一個變量進行姓名存儲,則會出現過多孤立的變量,很難一次性將全部數據持有。此時,我們采用ArrayList集合來解決多個學生信息的存儲問題。
3.3 實現代碼步驟
每名學生都擁有多項個人信息,為了方便管理每個人的信息,我們對學生信息進行封裝,編寫Student.java文件
/**
* 學生信息類
*/
public class Student {
String name; //姓名
int age; //年齡
}
上述代碼中,對學生信息(姓名、年齡)進行了封裝。這樣做的好處在於,以后只要找到這名學生,就能夠知道他的每項個人信息了。
接下來我們編寫CallName.java文件,完成程序的編寫。
l main方法中調用三個獨立方法
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<Student>(); //1.1創建一個可以存儲多個同學名字的容器
/*
* 1.存儲全班同學信息
*/
addStudent(list);
/*
* 2.打印全班同學每一個人的信息(姓名、年齡)
*/
printStudent(list);
/*
* 3.隨機對學生點名,打印學生信息
*/
randomStudent(list);
}
l 存儲所有學生的個人信息
/**
* 1.存儲全班同學名字
*/
public static void addStudent(ArrayList<Student> list) {
//鍵盤輸入多個同學名字存儲到容器中
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
//創建學生
Student s = new Student();
System.out.println("存儲第"+i+"個學生姓名:");
s.name = sc.next();
System.out.println("存儲第"+i+"個學生年齡:");
s.age = sc.nextInt();
//添加學生到集合
list.add(s);
}
}
上述方法中,方法參數list中用來表示已存儲所有學生。通過Scanner,完成新學生信息(姓名,年齡)的錄入,並將學生添加到集合中。
l 打印全班同學每一個人的信息
/**
* 2.打印全班同學每一個人的信息(姓名、年齡)
*/
public static void printStudent (ArrayList<Student> list) {
for (int i = 0; i < list.size(); i++) {
Student s = list.get(i);
System.out.println("姓名:"+s.name +",年齡:"+s.age);
}
}
上述方法中,方法參數list中用來表示已存儲所有學生。通過遍歷集合中的每個元素,得到每個同學信息,並輸出打印。
l 隨機對學生點名,打印學生信息
/**
* 3.隨機對學生點名,打印學生信息
*/
public static void randomStudent (ArrayList<Student> list) {
//在班級總人數范圍內,隨機產生一個隨機數
int index = new Random().nextInt(list.size());
//在容器(ArrayList集合)中,查找該隨機數所對應的同學信息(姓名、年齡)
Student s = list.get(index);
System.out.println("被隨機點名的同學:"+s.name + ",年齡:" + s.age);
}
上述方法中,通過隨機數類Random產生一個從0到集合長度的隨機索引。使用該索引獲取ArrayList集合中對應的值,便得到了全班同學的隨機學生信息並打印。
第4章 庫存管理案例
4.1 案例介紹
現在,我們將原有的庫存管理案例,采用更好的集合方式實現。
將對下列功能進行方法封裝:
l 打印庫存清單功能
l 庫存商品數量修改功能
l 退出程序功能
4.2 案例需求分析
管理員能夠進行的操作有3項(查看、修改、退出),我們可以采用(switch)菜單的方式來完成。
-------------庫存管理------------
1.查看庫存清單
2.修改商品庫存數量
3.退出
請輸入要執行的操作序號:
每一項功能操作,我們采用方法進行封裝,這樣,可使程序的可讀性增強。
選擇“1.查看庫存清單”功能,則控制台打印庫存清單
選擇“2.修改商品庫存數量”功能,則對每種商品庫存數進行更新
選擇“3.退出”功能,則退出庫存管理,程序結束
4.3 實現代碼步驟
每種庫存商品都擁有多項商品信息,為了方便管理每種商品的信息,我們對商品信息進行封裝,編寫Goods.java文件
/*
* 庫存商品類
*/
public class Goods {
String brand; // 商品品牌型號
double size; // 商品尺寸大小
double price; // 商品價格
int count; // 商品庫存個數
}
上述代碼中,對商品信息(品牌、尺寸、價格、庫存數)進行了封裝。這樣做的好處在於,以后只要找到這個商品,就能夠知道該商品的每項信息了。
編寫Demo庫存管理.java,完成如下功能:
l 功能菜單
/**
* 庫存管理功能菜單
* @return 管理員鍵盤輸入的功能操作序號
*/
public static int chooseFunction() {
System.out.println("-------------庫存管理------------");
System.out.println("1.查看庫存清單");
System.out.println("2.修改商品庫存數量");
System.out.println("3.退出");
System.out.println("請輸入要執行的操作序號:");
//接收鍵盤輸入的功能選項序號
Scanner sc = new Scanner(System.in);
int choose = sc.nextInt();
return choose;
}
上述方法用來完成庫存管理功能菜單的顯示、接收管理員選擇的功能操作序號。這是完成了案例的第一步。接下來完成“查看、修改、退出”這三項功能。
l 編寫main主方法,調用庫存管理功能菜單方法,與“查看、修改、退出”這三個方法。
public static void main(String[] args) {
//記錄庫存商品信息
ArrayList<Goods> list = new ArrayList<Goods>();
//添加商品到庫存
addStore(list);
//通過while循環模擬管理員進行功能重復選擇操作
while (true) {
//打印功能菜單操作,接收鍵盤輸入的功能選項序號
int choose = chooseFunction();
//執行序號對應的功能
switch (choose) {
case 1://查看庫存清單
printStore(list);
break;
case 2://修改商品庫存數量
update(list);
break;
case 3://退出
exit();
return;
default:
System.out.println("----------------------------------");
System.out.println("功能選擇有誤,請輸入正確的功能序號!");
break;
}
}
}
在主方法中,創建了ArrayList集合,用來存儲庫存商品信息,通過接收到的功能選項序號,進行switch語句判斷后,調用對應的功能方法。
l 查看庫存清單功能
/**
* 查看庫存清單
*/
public static void printStore(ArrayList<Goods> list) {
//統計總庫存個數、統計庫存總金額
int totalCount = 0;
double totalMoney = 0.0;
//列表頂部
System.out.println("---------------------------查看庫存清單--------------------------");
System.out.println("品牌型號 尺寸 價格 庫存數");
//列表中部
for (int i = 0; i < list.size(); i++) {
Goods item = list.get(i);
System.out.println(item.brand+" "+item.size+" "+item.price+" "+ item.count);
//統計總庫存個數、統計庫存總金額
totalCount += item.count;
totalMoney += item.count * item.price;
}
//列表底部
System.out.println("-------------------------------------------------------------");
System.out.println("總庫存數:"+totalCount);
System.out.println("庫存商品總金額:"+totalMoney);
}
上述方法用來完成打印庫存清單功能,參數list表示庫存商品相關信息集合。
l 修改商品庫存數量功能
/**
* 修改商品庫存數量
*/
public static void update(ArrayList<Goods> list){
System.out.println("------------修改商品庫存數量-----------");
for (int i = 0; i < list.size(); i++) {
Goods item = list.get(i);
System.out.println("請輸入"+ item.brand +"商品庫存數量");
item.count = new Scanner(System.in).nextInt();
list.set(i, item);
}
}
上述方法用來完成修改商品庫存數量功能,參數list表示庫存商品相關信息集合。
l 退出功能
/**
* 退出
*/
public static void exit(){
System.out.println("----------------退出---------------");
System.out.println("您已退出系統");
}
上述方法用來完成退出程序的功能
第5章 總結
5.1 知識點總結
l 引用數據類型(類)
l 類的類型為兩種:
l 第一種,Java為我們提供好的類,如Scanner類,Scanner類等,這些已存在的類中包含了很多的方法與屬性,可供我們使用。
l 第二種,我們自己創建的類,按照類的定義標准,可以在類中包含多個方法與屬性,來供我們使用。
l 創建類的格式
public class 類名 {
//可以定義屬性
//也可以定義方法
}
l 使用類的格式:
類名 變量名 = new 類名();
l 使用類中的屬性與方法格式
使用屬性: 變量名.屬性
使用方法: 變量名.方法()
l ArrayList集合
l 它屬於引用數據類型(類)。我們可以看作一個長度可變的數組。
l 創建集合的方式
ArrayList<要存儲元素的數據類型> 變量名 = new ArrayList<要存儲元素的數據類型>();
l 集合中的常用方法
l boolean add(Object obj)
l Object get(int index)
l int size()
l boolean add(int index, Object obj)
l Object set(int index, Object obj)
l Object remve(int index)
l void clear()