楊老師課堂_Java教程第六篇之引用資料型別_類的運用
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/kese7952/article/details/78962868
今天主要是講解以下知識點:
1、自定義型別的定義及使用
2、自定義類的記憶體圖
3、ArrayList集合的基本功能
4、王者榮耀隨機迎戰案例及庫存案例程式碼優化
01引用資料型別_類
* A: 資料型別
* a: java中的資料型別分為:基本型別和引用型別
* B: 引用型別的分類
* a: Java為我們提供好的類,比如說:Scanner,Random等。
* b: 我們自己建立的類,按照類的定義標準,可以在類中包含多個方法與屬性,來供我們使用。
02自定義類的概述
* A: 自定義類的概述
* java程式碼對映成現實事物的過程就是定義類的過程。
* 舉例:
我們就拿一部手機進行分析,它能用來做什麼呢?它可以打電話,上網,聊微信,打遊戲等,這些就是手機所提供的功能,也就是方法(或者說是函式);手機也有它的特徵,如顏色、尺寸大小、品牌型號等,這些就是手機的特徵,也就是屬性
* 目前,我們只關注類中的屬性,類中的方法在物件導向部分再進行學習。
03自定義類的格式
* A: 自定義類的格式
* a: 使用類的形式,對現實中的事物進行描述。
* b: 事物由方法和屬性兩部分組成。
* 方法: 這個事物具備的功能。
* 屬性: 這個事物具備的特徵。
* c: 格式
public class 類名{
屬性定義
修飾符 資料型別 變數名 = 值
方法定義
修飾符 返回值型別 方法名(引數列表){
}
}
04自定義的手機類
* A: 自定義的手機類
* a: 案例程式碼
public class Phone{
/*
定義手機的屬性
*/
String color ;
String brand ;
double size ;
}
05測試手機類
* A: 呼叫方法執行流程
* a: 實現引用型別的步驟
* 1: 匯入包 , 類都是在同一個資料夾,不需要匯入包
* 2: 建立引用型別的變數
* 3: 變數.型別中的功能
* b: 案例程式碼
public class TestPhone{
public static void main(String[] args){
// 2: 建立引用型別的變數
Phone p = new Phone();
//System.out.println(p); //輸出記憶體的地址
//3: 變數.型別中的功能
//變數 p.的方式,呼叫類中的屬性
//屬性就是變數 , 賦值和獲取值
p.color = "曜石黑";
p.brand = "華為P10";
p.size = 5.2;
//獲取屬性值
System.out.println(p.color+" "+p.brand+" "+p.size);
}
}
06自定義類的記憶體圖_1
* A: 自定義類的記憶體圖_1
* a: ![記憶體分佈圖](http://java.javabs.cn/csdn/2.jpg)
07自定義類的記憶體圖_2
* A: 自定義類的記憶體圖_1
* a: ![記憶體分佈圖](http://java.javabs.cn/csdn/2.jpg)
08兩個引用型別變數記憶體圖
* A: 自定義類的記憶體圖_1
* a: a: ![引用型別變數記憶體圖](http://java.javabs.cn/csdn/3.jpg)
09自定義類的練習
* A: 實體類的程式碼
/*
印表機,包含屬性(品牌、容量大小、顏色等)
定義類,描述事物,印表機
屬性: 品牌,大小 ,顏色
定義類,類名字,Printer
類的範圍,定義三個屬性
*/
public class Printer{
//定義三個屬性
String brand ;
double size ;
String color ;
}
/*
汽車,包含屬性(品牌、排量、型別等)
定義類,類名 Car
屬性 品牌 排量 型別
*/
public class Car{
//定義汽車三個屬性
String brand ;
double licheng ;
String type;
}
/*
學生,包含屬性(姓名,年齡,性別等)
定義類,類名Student
三個屬性: 姓名,年齡,性別 (char)
*/
public class Student{
String name;
int age ;
char sex ;
}
/*
遊戲,包含屬性(姓名,職業,裝備等)
定義類,類名KingGlory
三個屬性: 姓名,職業,裝備 (String)
*/
public class KingGlory{
String name;
String job ;
String equipment ;
}
* B: 測試類的程式碼
/*
定義的測試類
同時測試,印表機,汽車,學生,遊戲
*/
public class Test{
public static void main(String[] args){
//建立印表機引用型別
Printer printer = new Printer();
printer.brand = "惠普HP";
printer.color = "白色";
printer.size = 25;
System.out.println(printer.brand+" "+printer.color+" "+printer.size);
//建立汽車引用型別
Car c = new Car();
c.brand = "特斯拉";
c.type = "新能源汽車";
c.licheng = 525;
System.out.println(c.brand+" "+c.type+" "+c.licheng);
//建立學生引用型別
Student stu = new Student();
stu.name = "多隆";
stu.age = 20;
stu.sex = `男`;
System.out.println(stu.name+" "+stu.age+" "+stu.sex);
//建立遊戲引用型別
KingGlory kg = new KingGlory();
kg.name = "趙雲";
kg.job = 戰士;
kg.equipment = `抵抗之靴+黑色戰斧+泣血之刃+破軍+振興之鎧+暴烈之甲`;
System.out.println(kg.name+" "+kg.job+" "+kg.equipment);
}
}
10ArrayList建立變數的步驟
* A: ArrayList建立變數的步驟
* a: 匯入包 java.util包中
* b: 建立引用型別的變數
資料型別< 集合儲存的資料型別> 變數名 = new 資料型別<集合儲存的資料型別>();
集合儲存的資料型別: 要將資料儲存到集合的容器中
建立集合引用變數的時候,必須要指定好,儲存的型別是什麼
* c: 變數名.方法
注意: 集合儲存的資料,8個基本型別對應8個引用型別
儲存引用型別,不儲存基本型別
11ArrayList建立變數舉例
* A: ArrayList建立變數的示例程式碼
import java.util.ArrayList;
public class ArrayListDemo{
public static void main(String[] args){
//建立集合容器,指定儲存的資料型別
//儲存字串
ArrayList<String> array = new ArrayList<String>();
//建立集合容器,儲存整數
ArrayList<Integer> array2 = new ArrayList<Integer>();
//建立集合容器,儲存手機型別
ArrayList<Phone> array3 = new ArrayList<Phone>();
}
}
12ArrayList的常見方法
* A: ArrayList的常見方法
* a: add(引數) 向集合中新增元素
* b: get(int index) 取出集合中的元素,get方法的引數,寫入索引
* c: size() 返回集合的長度, 集合儲存元素的個數
* B: 案例程式碼
import java.util.ArrayList;
public class ArrayListDemo_1{
public static void main(String[] args){
//定義集合,儲存字串元素
ArrayList<String> array = new ArrayList<String>();
//呼叫集合方法add儲存元素
array.add("We");
array.add("love");
array.add("to");
array.add("learn");
array.add("java");
//輸出集合的長度,呼叫集合方法size, size方法的返回值型別 int
int size = array.size();
System.out.println(size);
//獲取出集合中的一個元素,獲取1索引的元素
//集合的方法get, 獲取元素後結果資料型別
String s = array.get(1);
System.out.println(s);
System.out.println(array.get(0));
System.out.println(array.get(1));
System.out.println(array.get(2));
System.out.println(array.get(3));
}
}
13ArrayList集合的遍歷
* A: 案例程式碼
/*
集合的遍歷
實現思想也是索引思想
集合的索引從0開始,到 size()-1
方法get(int index)
*/
import java.util.ArrayList;
public class ArrayListDemo_2{
public static void main(String[] args){
ArrayList<Integer> array = new ArrayList<Integer>();
array.add(111);
array.add(125);
array.add(123);
array.add(120);
array.add(128);
//對集合進行遍歷
//使用方法 size+get組合進行遍歷
for(int i = 0 ; i < array.size(); i++){
System.out.println( array.get(i) );
}
}
}
14ArrayList補充方法
* A: ArrayList補充方法
* a: add(int 索引,儲存的元素) 將元素新增到指定的索引上
* b: set(int 索引,修改後的元素) 將指定索引的元素,進行修改
* c: remove(int 索引) 刪除指定索引上的元素
* d: clear() 清空集合中的所有元素
* B: 案例程式碼
import java.util.ArrayList;
public class ArrayListDemo_3{
public static void main(String[] args){
ArrayList<Integer> array = new ArrayList<Integer>();
array.add(1);
array.add(2);
array.add(3);
array.add(4);
//在索引2上,新增元素7
array.add(2,7);
//將0索引上的元素,修改成10
array.set(0,10);
//將4索引上的元素,刪除
array.remove(4);
array.clear();
//使用方法 size+get組合進行遍歷
for(int i = 0 ; i < array.size(); i++){
System.out.println( array.get(i) );
}
}
}
15王者榮耀隨機迎戰案例分析
* A: 王者榮耀隨機迎戰案例分析
王者榮耀娛樂模式中的火焰山大戰會隨機的給出英雄進行遊戲,列印這名英雄的資訊。
我們對本案例進行分析,得出如下分析結果:
1.儲存全部英雄資訊(姓名、職業)
將容器換成集合,集合中存的是Hero型別
2.列印全部英雄每一個人的資訊(姓名、職業)
遍歷集合
3.在英雄總人數範圍內,隨機產生一個隨機數,查詢該隨機數所對應的英雄資訊(姓名、職業)
王者榮耀隨機迎戰明確地分為了三個功能。如果將多個獨立功能的程式碼寫到一起,則程式碼相對冗長,我們可以針對不同的功能可以將其封裝到一個方法中,將完整獨立的功能分離出來。
而在儲存英雄姓名時,如果對每一個英雄都定義一個變數進行姓名儲存,則會出現過多孤立的變數,很難一次性將全部資料持有。此時,我們採用ArrayList集合來解決多個英雄資訊的儲存問題
16王者榮耀隨機迎戰程式碼實現
* A: 王者榮耀隨機迎戰案例程式碼
/*
王者榮耀隨機迎戰,集合改進 (的姓名英雄和職業)
遊戲中有英雄這個事物,使用定義類的形式,描述英雄事物
屬性: 姓名,職業
姓名儲存了陣列, 將容器換成是集合
String[] h = {"",""};
集合中,儲存的是英雄的姓名嗎? 應該儲存Hero型別
儲存英雄:
英雄型別,儲存到集合中
總覽: 遍歷集合
隨機: 隨機數,作為索引,到集合中找到元素
三個功能,共享的資料,集合容器,
定義三個方法,必須引數傳遞集合
*/
import java.util.ArrayList;
import java.util.Random;
public class RandomAgainst{
public static void main(String[] args){
//定義集合,儲存的是HeroName型別變數
ArrayList <HeroName> array = new ArrayList<HeroName>();
//呼叫新增方法
add (array);
//呼叫遍歷集合
printArrayList(array);
randomHeroName(array);
}
/*
隨機數,當作集合的索引,到集合中找到元素
*/
public static void randomHeroName(ArrayList<HeroName> array ){
Random r = new Random();
int number = r.nextInt( array.size());
//隨機數,索引,到集合中get
HeroName h = array.get(number);
System.out.println( h.name +" "+h.job);
}
/*
總覽英雄的資訊,遍歷集合
*/
public static void printArrayList(ArrayList<HeroName> array){
for(int i = 0 ; i < array.size();i++){
//儲存集合的時候, 集合.add(hn1) hn1 是HeroName型別變數
//獲取的時候,集合.get方法,獲取出來的是什麼, 還是HeroName型別變數
HeroName h = array.get(i);
System.out.println(h.name+" "+h.job);
}
}
/*
定義方法,實現儲存英雄的姓名和年齡
建立HeroName型別變數,儲存到集合中
*/
public static void add (ArrayList<HeroName> array){
//建立HeroName型別變數
HeroName hn1 = new HeroName();
HeroName hn2 = new HeroName();
HeroName hn3 = new HeroName();
HeroName hn4 = new HeroName();
HeroName hn5 = new HeroName();
hn1.name = "趙雲";
hn1.job = "戰士";
hn2.name = "后羿";
hn2.job = "射手";
hn3.name = "甄姬";
hn3.job = "法師";
hn4.name = "張飛";
hn4.job = "輔助";
hn5.name = "劉禪";
hn5.job = "坦克";
//將HeroName變數,儲存到集合中
array.add(hn1);
array.add(hn2);
array.add(hn3);
array.add(hn4);
array.add(hn5);
}
}
17庫存案例分析加入集合
* A: 庫存案例分析加入集合
* a:![記憶體分佈圖](http://java.javabs.cn/csdn/2.jpg)
18庫存案例新增商品資訊
* A: 案例程式碼
/*
定義,.描述商品的類
商品 4個屬性
商品名字 大小 價格 庫存
String double double int
定義類,類名Goods
這個型別的變數,儲存到集合中
*/
public class Goods{
//定義商品名字
String brand ;
//大小屬性
double size ;
// 價格屬性
double price ;
//庫存屬性
int count ;
}
/*
實現庫存管理案例:
1.儲存商品資訊
儲存商品型別變數
將商品型別的變數,儲存到集合中
*/
//import java.util.ArrayList;
import java.util.*;
public class Shopp{
public static void main(String[] args){
//建立ArrayList集合,儲存Goods型別
ArrayList<Goods> array = new ArrayList<Goods>();
//呼叫新增商品資訊的方法
addGoods(array);
}
/*
定義方法,將商品的資訊儲存到集合中
集合是所有方法的共享資料,引數傳遞
*/
public static void addGoods (ArrayList<Goods> array){
//建立商品型別變數 Goods型別的變數
Goods g1 = new Goods();
Goods g2 = new Goods();
g1.brand = "HuaWei";
g1.size = 5.8;
g1.price = 2999.99;
g1.count = 3;
g2.brand = "IPhone X";
g2.size = 5.8;
g2.price = 8999.99;
g2.count = 1;
//Goods型別的變數,儲存到集合中
array.add(g1);
array.add(g2);
}
}
19庫存案例檢視庫存清單
* A: 案例程式碼
/*
實現庫存管理案例:
1.儲存商品資訊
儲存商品型別變數
將商品型別的變數,儲存到集合中
2.檢視庫存清單
將集合進行遍歷, 獲取出集合中儲存的Goods型別變數
輸出每一個Goods型別的屬性
計算求和: 總庫存,總金額
*/
//import java.util.ArrayList;
import java.util.*;
public class Shopp{
public static void main(String[] args){
//建立ArrayList集合,儲存Goods型別
ArrayList<Goods> array = new ArrayList<Goods>();
//呼叫新增商品資訊的方法
addGoods(array);
}
/*
定義方法,檢視庫存清單,遍歷集合
*/
public static void printStore(ArrayList<Goods> array){
//輸出表頭
System.out.println("----------商場庫存清單----------");
System.out.println("品牌型號 尺寸 價格 庫存數");
//定義變數,儲存總庫存數,和總金額
int totalCount = 0 ;
double totalMoney = 0;
//遍歷集合
for(int i = 0 ; i < array.size(); i++){
//get(索引)獲取出集合中的元素,儲存的是Goods類,獲取的也是Goods型別
//使用Goods型別變數,接受get方法結果
Goods g = array.get(i);
System.out.println(g.brand+" "+g.size+" "+g.price+" "+g.count);
totalCount = totalCount+g.count;
totalMoney = totalMoney + g.count*g.price;
}
System.out.println("總庫存數: "+totalCount);
System.out.println("商品庫存總金額: "+totalMoney);
}
/*
定義方法,將商品的資訊儲存到集合中
集合是所有方法的共享資料,引數傳遞
*/
public static void addGoods (ArrayList<Goods> array){
//建立商品型別變數 Goods型別的變數
Goods g1 = new Goods();
Goods g2 = new Goods();
g1.brand = "HuaWei";
g1.size = 5.8;
g1.price = 2999.99;
g1.count = 3;
g2.brand = "IPhone X";
g2.size = 5.8;
g2.price = 8999.99;
g2.count = 1;
//Goods型別的變數,儲存到集合中
array.add(g1);
array.add(g2);
}
}
20庫存案例修改庫存清單及測試程式碼的實現
* A: 案例程式碼
/*
實現庫存管理案例:
1.儲存商品資訊
儲存商品型別變數
將商品型別的變數,儲存到集合中
2.檢視庫存清單
將集合進行遍歷, 獲取出集合中儲存的Goods型別變數
輸出每一個Goods型別的屬性
計算求和: 總庫存,總金額
3.修改商品的庫存
集合遍歷 ,獲取出集合中儲存的Goods型別變數
變數呼叫Goods類的屬性count,值進行修改 (鍵盤輸入)
*/
//import java.util.ArrayList;
import java.util.*;
public class Shopp{
public static void main(String[] args){
//建立ArrayList集合,儲存Goods型別
ArrayList<Goods> array = new ArrayList<Goods>();
//呼叫新增商品資訊的方法
addGoods(array);
//進入死迴圈中
while(true){
//呼叫選擇功能的方法,獲取到使用者輸入的功能序號
int number = chooseFunction();
//對序號判斷,如果=1 進入檢視庫存功能 = 2 進入修改庫存功能 =3 結束
switch(number){
case 1:
//進入檢視庫存,呼叫檢視庫存的方法,傳遞儲存商品資訊的集合
printStore(array);
break;
case 2:
//進入修改庫存功能,呼叫修改庫存的方法,傳遞集合
update(array);
break;
case 3:
return ;
default:
System.out.println("無此功能");
break;
}
}
}
/*
方法定義,修改庫存
鍵盤的輸入,將Goods中的屬性值,修改
*/
public static void update(ArrayList<Goods> array){
Scanner sc = new Scanner(System.in);
//遍歷集合,獲取集合中的每個元素
for(int i = 0 ; i < array.size(); i++){
//集合方法get獲取的是集合的元素,元素型別Goods
Goods g = array.get(i);
System.out.println("請輸入"+g.brand+"的庫存數");
//Goods屬性,count進行修改
g.count = sc.nextInt();
}
}
/*
定義方法,實現選擇選單,使用者根據功能選擇選單
*/
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 number = sc.nextInt();
return number;
}
/*
定義方法,檢視庫存清單,遍歷集合
*/
public static void printStore(ArrayList<Goods> array){
//輸出表頭
System.out.println("----------商場庫存清單----------");
System.out.println("品牌型號 尺寸 價格 庫存數");
//定義變數,儲存總庫存數,和總金額
int totalCount = 0 ;
double totalMoney = 0;
//遍歷集合
for(int i = 0 ; i < array.size(); i++){
//get(索引)獲取出集合中的元素,儲存的是Goods類,獲取的也是Goods型別
//使用Goods型別變數,接受get方法結果
Goods g = array.get(i);
System.out.println(g.brand+" "+g.size+" "+g.price+" "+g.count);
totalCount = totalCount+g.count;
totalMoney = totalMoney + g.count*g.price;
}
System.out.println("總庫存數: "+totalCount);
System.out.println("商品庫存總金額: "+totalMoney);
}
/*
定義方法,將商品的資訊儲存到集合中
集合是所有方法的共享資料,引數傳遞
*/
public static void addGoods (ArrayList<Goods> array){
//建立商品型別變數 Goods型別的變數
Goods g1 = new Goods();
Goods g2 = new Goods();
g1.brand = "HuaWei";
g1.size = 5.8;
g1.price = 2999.99;
g1.count = 3;
g2.brand = ""IPhone X
g2.size = 5.8;
g2.price = 8999.99;
g2.count = 1;
//Goods型別的變數,儲存到集合中
array.add(g1);
array.add(g2);
}
}
作者: 楊校
出處: http://blog.csdn.net/kese7952
分享是快樂的,也見證了個人成長曆程,文章大多都是工作經驗總結以及平時學習積累,基於自身認知不足之處在所難免,也請大家指正,共同進步。
本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出, 如有問題, 可郵件(397583050@qq.com)諮詢。
相關文章
- 楊老師課堂之ArrayList集合解析
- 楊老師課堂之Nginx學習之反向代理Nginx
- 楊老師課堂之JavaSe部分面試題Java面試題
- Java中的基本資料型別與引用資料型別Java資料型別
- js資料型別之基本資料型別和引用資料型別JS資料型別
- JAVA中基本資料型別和引用資料型別Java資料型別
- 辜老師的C++課堂筆記C++筆記
- JAVA_資料型別介紹與基本資料型別之間的運算規則Java資料型別
- 區別值型別資料和引用型別資料型別
- Java的基本型別和引用型別Java型別
- 基本資料型別與API引用型別的使用資料型別API
- Java中的資料型別和運算子Java資料型別
- 好程式設計師web前端教程分享引用型別與基本型別程式設計師Web前端型別
- java基礎之java的基本資料型別Java資料型別
- 引用型別之Object型別Object
- Java集合不能存放基本資料型別,只存放物件的引用Java資料型別物件
- 課時5:閒聊之Python的資料型別Python資料型別
- [java基礎]之資料型別Java資料型別
- JAVA基礎--資料型別和運算子Java資料型別
- Java引用型別原理剖析Java型別
- Java引用型別與WeakHashMapJava型別HashMap
- python教程1.2:變數+資料型別+運算子Python變數資料型別
- java的四大引用型別Java型別
- 基本資料型別與引用資料型別,及記憶體分配資料型別記憶體
- Java引用型別解析:掌握強引用、軟引用、弱引用和幻象引用的妙用Java型別
- 好程式設計師Java實用教程系列之物件的轉型程式設計師Java物件
- Java-API-基本資料型別包裝類JavaAPI資料型別
- 詳聊Java的四種引用型別Java型別
- DM 類資料型別資料型別
- 享學課堂java架構師VIP課程全套完整Java架構
- 張馳課堂:六西格瑪培訓資料的幾種型別,你知道嗎?型別
- Java資料型別Java資料型別
- JavaScript筆記5:計時器、物件、基本資料型別、引用資料型別JavaScript筆記物件資料型別
- Java基礎語法之資料型別Java資料型別
- [Java基礎]之 資料型別轉換Java資料型別
- Java中的資料型別Java資料型別
- Java的基本資料型別Java資料型別
- JavaScript 基礎 (二) - 引用資料型別 (物件)JavaScript資料型別物件
- java中多型的理解——父類引用指向子類物件Java多型物件