数组类型
数组:
java的数组必须先初始化,然后才可以使用,所谓初始化,就是为数组的数组元素分配内存空间,并为每个数组元素赋初始值。
数组的初始化:静态初始化、动态初始化
静态初始化:
初始化时程序员显式指定每个数组元素的初始值,由系统决定数组长度。
实例:
int [ ] a ; //定义了一个int类型的数组,数组名为a
a=new int [ ] {5,6,8,20}; //使用静态初始化,初始化数组时只指定数组元素的初始值,不指定数组长度
实例2:
Object b;
b=new Object [ ] {“java”,“python”}; //定义数组时所指定数组元素类型的子类 String是Object的子类。
也可以在定义的同时对数组进行初始化
如:
int [ ] a={5,5 ,6};
动态初始化:
格式:数组名 = new type[length] //length是一个int类型的参数,代表数组的长度。
实例:
int [ ]a;
a=new int[5];
此时系统会为数组赋初值
数组元素类型为整形:初值为0;
浮点型:初值为0.0
字符型:初值为’\u0000’
布尔类型:初值为false
引用类型:初值为null
*注意不要同时使用静态初始化和动态初始化,也就是说不能同时为数组赋值和赋数组长度引长度。
使用数组:
对数组的操作包括赋值、取出数组中的元素。
访问数组中的元素就是通过【】里的索引值访问对应的数组元素,访问到数组元素,就可以将它视为一个普通变量来使用了。
注意数组的索引值时从0开始的,索引值的最大值为数组长度-1;
如果访问数组的索引值小于0或者>=数组长度,则会出现数组索引越界的情况
所有的数组都提供一个length属性,我们可以通过length访问到数组长度
例:输出prices数组每个数组元素的值
for(var i=0;i<price.length;i++)
{
System.out.println(price[i]);
}
foreach循环
特点:这种循环遍历数组和集合更加简洁。使用foreach循环遍历数组和集合元素时,无须获得数组和集合的长度,无须根据索引值来访问数组元素和集合个数,foreach循环自动遍历数组和集合的每个元素。
语法格式:
for(type variableName :array | collection
{
//varialbeName自动迭代访问每个元素
}
上面中type是数组元素或集合元素的类型,或者直接使用var定义,variableName是一个形参名,foreach循环将自动将数组元素、集合元素、依次赋给该变量。
例:(参考java疯狂讲义)
public class ForEachTest
{
public static void main(String[] args)
{
String [] books={"fsdfs","sfsdfsdfsd","fsdfasdfsd"};
for(String book : books)
{
System.out.println(book);
}
}
}
从上面的程序可以看出:使用foreach循环遍历数组元素时无须获得数组长度,也无须根据索引值来访问数组元素。
foreach循环和普通循环不同的是,它无须循环条件,无须循环迭代语句,这些部分都由系统来完成,foreach循环自动迭代数组的每个元素,当每个元素都被迭代完,循环自动结束。
- 对于foreach 循环而言,循环变量的类型可由编译器自动识别,因此可以使用var来定义类型。
- 使用foreach循环来迭代输出数组元素和集合元素时,通常不要对循环变量进行赋值,在foreach循环中对数组元素进行赋值,结果可能导致不能正确遍历数组元素,不能正确取出每个数组元素的值。因为foreach中的循环变量相当于一个临时变量,系统会把值赋给临时变量,而这个临时变量并不是数组元素。