一、定义类
1、类的格式
public class 类名{ // 类名最好和文件名一样
数据类型 属性名称1;
数据类型 属性名称2;
…
}
// phone.java public class Phone { // 属性 String brand; // 品牌型号 String color; // 颜色 double size; // 尺寸大小 }
2、类的调用
1)导包:如果所有的类都在同一个文件夹下,就可以不用导包。
2)创建对象:数据类型 变量名= new 数据类型();
3)调用方法:目前我们定义的自定义类不涉及方法,只是属性(自定义类中的方法部分在面向对象部分讲解)
4)访问属性:变量名.属性(这是当前的方式,后期会采取调用方法的方式替代掉直接访问的方式来完成对属性的访问。)
// DiaoyongPhone.java public class DiaoyongPhone { public static void main(String[] args){ // main方法 phone p = new phone(); // 定义了一个Phone类型的变量p p.brand = "iPhoneX"; p.color = "土豪金"; p.size = 5.5; System.out.println(p.brand); System.out.println(p.color); System.out.println(p.size); } }
3、类对象在内存中的储存和调用
当初始化一个类的时候,JVM虚拟机会将这个变量名推入栈中,然后在堆内存中开辟一块空间,用来存储类中的属性(一开始设置为null),然后变量名指向那块内存地址。
二、集合
在前面我们学习了数组,数组可以保存多个元素,但在某些情况下无法确定到底要保存多少个元素,此时数组将不再适用,因为数组的长度不可变。为了保存这些数目不确定的元素,JDK中提供了一系列特殊的类,这些类可以存储任意类型的元素,并且长度可变,统称为集合。在这里,我们先介绍ArrayList集合,其他集合在后续课程中学习。
ArrayList集合是程序中最常见的一种集合,它属于引用数据类型(类)。在ArrayList内部封装了一个长度可变的数组,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。
1、创建集合
导包:import java.util.ArrayList;
创建对象:与其他普通的引用数据类型创建方式完全相同,但是要指定容器中存储的数据类型:
ArrayList<要存储元素的数据类型> 变量名= new ArrayList<要存储元素的数据类型>();
-
集合中存储的元素,只能为<>括号中指定的数据类型元素;
-
“<要存储元素的数据类型>”中的数据类型必须是引用数据类型,不能是基本数据类型;
2、集合的方法
import java.util.ArrayList; public class ArrayListDemo { 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)); } }
3、集合的遍历
import java.util.ArrayList; public class ArrayListDemo { 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"); // 集合遍历 for (int i = 0;i < list.size(); i++){ String n = list.get(i); System.out.println(n); } } }
4、其他方法
boolean add(int index, Object obj)
-
功能:在集合中指定index位置,添加新元素obj
-
功能说明:假设集合list中有元素[“java”,“javaEE”],当使用add(1,“javaWeb”)后,集合list中的元素为[“java”,“javaWeb”,“JavaEE”]。
Object set(int index, Object obj)
-
功能:用指定元素obj替代集合中指定index位置的元素
-
功能说明:假设集合list中有元素[“java”,“javaEE”],当使用set(0,“javaWeb”)后,集合list中的元素为[“javaWeb”,“JavaEE”]。
Object remove(int index)
-
功能:从集合中删除指定index处的元素,返回该元素
-
功能说明:假设集合list中有元素[“java”,“javaEE”],当使用remove(0)后,集合list中的元素为[“JavaEE”],返回值为“java”。
void clear()
-
功能:清空集合中所有元素
-
功能说明:假设集合list中有元素[“java”,“javaEE”],当使用clear()后,集合list中的元素为空[]。
示例1:随机点名器
import java.util.ArrayList; import java.util.Random; public class CallName { public static void main(String[] args){ ArrayList<Student> stu = new ArrayList<Student>(); add(stu); randomStudentName(stu); printArrayList(stu); } // 使用random随机出一个索引,取出学生信息 public static void randomStudentName(ArrayList<Student> array){ Random r = new Random(); int num = r.nextInt(array.size()); Student s = array.get(num); System.out.println(s.name + "====" + s.age); } // 总览学生的信息,遍历集合 public static void printArrayList(ArrayList<Student> array){ for (int i = 0;i < array.size();i++){ Student s = array.get(i); System.out.println(s.name + "====" + s.age); } } public static void add (ArrayList<Student> array){ //创建StudentName类型变量 Student sn1 = new Student(); Student sn2 = new Student(); Student sn3 = new Student(); Student sn4 = new Student(); Student sn5 = new Student(); sn1.name = "张三1"; sn1.age = 201; sn2.name = "张三2"; sn2.age = 202; sn3.name = "张三3"; sn3.age = 203; sn4.name = "张三4"; sn4.age = 204; sn5.name = "张三5"; sn5.age = 205; //将StudentName变量,存储到集合中 array.add(sn1); array.add(sn2); array.add(sn3); array.add(sn4); array.add(sn5); } }
示例2:库存管理系统
1 /* 2 实现库存管理案例: 3 1. 存储商品信息 4 存储商品类型变量 5 将商品类型的变量,存储到集合中 6 7 2. 查看库存清单 8 将集合进行遍历, 获取出集合中存储的Goods类型变量 9 输出每一个Goods类型的属性 10 计算求和: 总库存,总金额 11 12 3. 修改商品的库存 13 集合遍历 ,获取出集合中存储的Goods类型变量 14 变量调用Goods类的属性count,值进行修改 (键盘输入) 15 */ 16 //import java.util.ArrayList; 17 import java.util.*; 18 public class Shopp{ 19 public static void main(String[] args){ 20 //创建ArrayList集合,存储Goods类型 21 ArrayList<Goods> array = new ArrayList<Goods>(); 22 //调用添加商品信息的方法 23 addGoods(array); 24 //进入死循环中 25 while(true){ 26 //调用选择功能的方法,获取到用户输入的功能序号 27 int number = chooseFunction(); 28 //对序号判断,如果=1 进入查看库存功能 = 2 进入修改库存功能 =3 结束 29 switch(number){ 30 case 1: 31 //进入查看库存,调用查看库存的方法,传递存储商品信息的集合 32 printStore(array); 33 break; 34 35 case 2: 36 //进入修改库存功能,调用修改库存的方法,传递集合 37 update(array); 38 break; 39 40 case 3: 41 return ; 42 43 default: 44 System.out.println("无此功能"); 45 break; 46 } 47 } 48 } 49 /* 50 方法定义,修改库存 51 键盘的输入,将Goods中的属性值,修改 52 */ 53 public static void update(ArrayList<Goods> array){ 54 Scanner sc = new Scanner(System.in); 55 //遍历集合,获取集合中的每个元素 56 for(int i = 0 ; i < array.size(); i++){ 57 //集合方法get获取的是集合的元素,元素类型Goods 58 Goods g = array.get(i); 59 System.out.println("请输入"+g.brand+"的库存数"); 60 //Goods属性,count进行修改 61 g.count = sc.nextInt(); 62 } 63 } 64 /* 65 定义方法,实现选择菜单,用户根据功能选择菜单 66 */ 67 public static int chooseFunction(){ 68 System.out.println("-------------库存管理------------"); 69 System.out.println("1.查看库存清单"); 70 System.out.println("2.修改商品库存数量"); 71 System.out.println("3.退出"); 72 System.out.println("请输入要执行的操作序号:"); 73 Scanner sc = new Scanner(System.in); 74 int number = sc.nextInt(); 75 return number; 76 } 77 78 /* 79 定义方法,查看库存清单,遍历集合 80 */ 81 public static void printStore(ArrayList<Goods> array){ 82 //输出表头 83 System.out.println("----------商场库存清单----------"); 84 System.out.println("品牌型号 尺寸 价格 库存数"); 85 //定义变量,保存总库存数,和总金额 86 int totalCount = 0 ; 87 double totalMoney = 0; 88 //遍历集合 89 for(int i = 0 ; i < array.size(); i++){ 90 //get(索引)获取出集合中的元素,存储的是Goods类,获取的也是Goods类型 91 //使用Goods类型变量,接受get方法结果 92 Goods g = array.get(i); 93 System.out.println(g.brand+" "+g.size+" "+g.price+" "+g.count); 94 totalCount = totalCount+g.count; 95 totalMoney = totalMoney + g.count*g.price; 96 } 97 System.out.println("总库存数: "+totalCount); 98 System.out.println("商品库存总金额: "+totalMoney); 99 } 100 101 /* 102 定义方法,将商品的信息存储到集合中 103 集合是所有方法的共享数据,参数传递 104 */ 105 public static void addGoods (ArrayList<Goods> array){ 106 //创建商品类型变量 Goods类型的变量 107 Goods g1 = new Goods(); 108 Goods g2 = new Goods(); 109 g1.brand = "MacBook"; 110 g1.size = 13.3; 111 g1.price = 9999.99; 112 g1.count = 3; 113 114 g2.brand = "Thinkpad"; 115 g2.size = 15.6; 116 g2.price = 7999.99; 117 g2.count = 1; 118 119 //Goods类型的变量,存储到集合中 120 array.add(g1); 121 array.add(g2); 122 } 123 }