1. 引用数据类型(类)
1.1 引用数据类型分类
提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类、Random类。
我们可以把类的类型为两种:
第一种,Java为我们提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供我们使用。
第二种,我们自己创建的类,按照类的定义标准,可以在类中包含多个方法与属性,来供我们使用。
这里我们主要介绍第二种情况的简单使用。
1.2 自定义数据类型概述
我们在Java中,将现实生活中的事物抽象成了代码。这时,我们可以使用自定义的数据类型(类)来描述(映射)现实生活中的事物。
类,它是引用数据类型,与之前学习的所有引用数据类型相同,自定义类也是一种数据类型。只是自定义类型并非Java为我们预先提供好的类型,而是我们自己定义的一种引用数据类型用来描述一个事物。
1.3 类的定义与使用
java代码映射成现实事物的过程就是定义类的过程。
我们就拿一部手机进行分析,它能用来做什么呢?它可以打电话,上网,聊微信等,这些就是手机所提供的功能,也就是方法;手机也有它的特征,如颜色、尺寸大小、品牌型号等,这些就是手机的特征,也就是属性。
目前,我们只关注类中的属性,类中的方法在面向对象部分再进行学习。
1.3.1 类的定义格式
类的定义格式
创建java文件,与类名相同public class类名{
数据类型 属性名称1;
数据类型 属性名称2;
…
}
通过类的定义格式,来进行手机类的描述,如下所示
public classPhone {/** 属性*/String brand;//品牌型号
String color;//颜色
double size; //尺寸大小
}
上述代码,就是创建一个类的的过程,类的名称我们给起名为Phone,类中包含了三个属性(brand品牌型号、color颜色、size尺寸大小)。注意,类中定义的属性没有个数要求。
1.3.2 类的使用格式
Phone类定义好后,我们就可以使用这个类了,使用方式和使用引用数据类型Scanner类相似。格式如下:
导包:我们将所有的类放到同一个文件夹下,可以避免导包。
创建对象:数据类型 变量名= new数据类型();
调用方法:目前我们定义的自定义类不涉及方法,只是属性(自定义类中的方法部分在面向对象部分讲解)
访问属性:变量名.属性 (这是当前的方式,后期会采取调用方法的方式替代掉直接访问的方式来完成对属性的访问。)
当有了Phone数据类型的变量后,我们就可以使用Phone类中的属性了。对属性的访问我们来演示一下,如下所示:
public classTest {public static voidmain(String[] args) {//定义了一个Phone类型的变量p
Phone p = newPhone();/** 通过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.3.3 自定义类型注意事项与内存图
上述代码中,通过类Phone创建出来的变量p,它相当于我们生活中的盒子,里面包含了它能够使用的属性。
通过 p.属性名 就可以对属性进行操作
与引用类型数组类似,引用类型的自定义类型的变量,直接变量时,结果为对象地址值,这里可以通过内存图简单解释。
1.4 自定义类型练习
学习了引用数据类型(类)以后,我们就能够使用类描述任何东西了。看几个具体的描述,如下:
电饭锅,包含属性(品牌、容量大小、颜色等)
汽车,包含属性(品牌、排量、类型等)
学生,包含属性(姓名,年龄,性别等)
2. ArrayList集合
在前面我们学习了数组,数组可以保存多个元素,但在某些情况下无法确定到底要保存多少个元素,此时数组将不再适用,因为数组的长度不可变。例如,要保存一个学校的学生,由于不停有新生来报道,同时也有学生毕业离开学校,这时学生的数目很难确定。为了保存这些数目不确定的元素,JDK中提供了一系列特殊的类,这些类可以存储任意类型的元素,并且长度可变,统称为集合。在这里,我们先介绍ArrayList集合,其他集合在后续课程中学习。
ArrayList集合是程序中最常见的一种集合,它属于引用数据类型(类)。在ArrayList内部封装了一个长度可变的数组,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。
2.1 集合的创建
创建集合的常用格式在此说明一下:
导包:import java.util.ArrayList;
创建对象:与其他普通的引用数据类型创建方式完全相同,但是要指定容器中存储的数据类型:
ArrayList 变量名 = new ArrayList();
集合中存储的元素,只能为<>括号中指定的数据类型元素;
“”中的数据类型必须是引用数据类型,不能是基本数据类型;
下面给出8种基本数据类型所对应的引用数据类型表示形式:
我们通过举几个例子,来明确集合的创建方式:
存储String类型的元素
ArrayList list = new ArrayList();
存储int类型的数据
ArrayList list = new ArrayList();
存储Phone类型的数据
ArrayList list = new ArrayList();
2.2 集合中常用方法
接下来,我们来学习下ArrayList集合提供的一些常用方法,如下表:
方法声明
功能描述
boolean add(Object obj)
将指定元素obj追加到集合的末尾
Object get(int index)
返回集合中指定位置上的元素
int size()
返回集合中的元素个数
通过代码演示上述方法的使用。ArrayListDemo01.java
importjava.util.ArrayList;public classArrayListDemo01 {public static voidmain(String[] args) {//创建ArrayList集合
ArrayList list = new ArrayList();//向集合中添加元素
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
importjava.util.ArrayList;public classArrayListDemo02 {public static voidmain(String[] args) {//创建ArrayList集合
ArrayList list = new ArrayList();//添加元素到集合
list.add(13);
list.add(15);
list.add(22);
list.add(29);//遍历集合
for (int i = 0; i < list.size(); i++) {//通过索引,获取到集合中每个元素
int n =list.get(i);
System.out.println(n);
}
}
}
上述代码中,第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替代集合中指定位置上的元素
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 remve(int index)
功能:从集合中删除指定index处的元素,返回该元素
功能说明:假设集合list中有元素[“java”,“javaEE”],当使用remove(0)后,集合list中的元素为[“JavaEE”],返回值为“java”。
void clear()
功能:清空集合中所有元素
功能说明:假设集合list中有元素[“java”,“javaEE”],当使用clear()后,集合list中的元素为空[]。