目录
1 .数组
1.1概念:
一组连续的存储空间,存储多个相同数据类型的值。 特点: 类型相同。 长度固定。
1..2数组的声明与赋值
[]就是数组的标识符 引用数据类型默认为 null
1.3数组的组成
数组中的每个数据格被称为“数组元素”。 对每个元素进行赋值或取值的操作被称为“元素的访问”。 访问元素时,需要使用“下标”(从0开始,依次+1,自动生成)。 访问的语法:数组名[下标]; //例如 存:a[0]=10; 取:类型 名字 = a[0]; 有效下标范围:0 ~ 数组长度-1 访问无效下标,会导致数组下标越界
2.数组的创建以及默认值
2.1数组默认值:
整数:0 小数:0.0 字符:\u0000 布尔:false 其他:null
2.2数组创建语法
先声明、再分配空间: • 数据类型[] 数组名; • 数组名 = new 数据类型[长度]; 声明并分配空间: • 数据类型[] 数组名 = new 数据类型[长度]; 声明并赋值(繁): • 数据类型[] 数组名 = new 数据类型[]{value1,value2,value3,...};//可 以先分配 声明并赋值(简): • 数据类型[] 数组名 = {value1,value2,value3,...}; (显示初始化,注 意:不可换行)。
3.数组的扩容***
3.1创建方法
创建数组时,必须显示指定长度,并在创建之后不可更改长度。
扩容的思路:
创建大于原数组长度的新数组。
将原数组中的元素依次复制到新数组中。
import java.util.Scanner; public class Demo1 { public static void main(String [] args ){ int [] arr ={1,2,3,4,5}; System.out.println("请输入一个新数组的长度"); Scanner sc =new Scanner(System.in); int a =sc.nextInt(); int [] b=array(arr,a); for(int i =0;i<a;i++){ System.out.println(b[i]); } } public static int [] array(int [] arr,int a){ int [] b=new int [a]; for(int i=0;i<arr.length;i++){ if(i==a){ break; } b[i]=arr[i]; } return b; } }
3.2 复制的方式
循环将原数组中所有元素逐一赋值给新数组。
System.arraycopy(原数组,原数组起始,新数组,新数组起始,长度)。
使用System.arraycopy(原数组,原数组起始下标,新数组,新数组的起始存储下标,需要赋值的个数或长度); src 旧数组 srcpos 旧数组的下表位置 dest新数组 destpos新数组的起始位置 数量//不能越界 System.arraycopy( nums , 0 , newNums , 0 , nums.length);java.util.Arrays.copyOf(原数组, 新长度)。
返回带有原值的新数组。
int[] nums = new int[5];//数组创建之后,长度不可变 nums[0] = 11; nums[1] = 22; nums[2] = 33; nums[3] = 44; nums[4] = 55; //.创建新数组、复制元素 int[] newNums = java.util.Arrays.copyOf(nums , nums.length * 2);//将带有原值的新数组返回给我们
4地址替换
数组作为引用类型之一,其变量中存储的是数组的地址。 完成元素复制后,需将新数组地址,赋值给原变量进行替换。 new出来的都在堆; 变量都在栈里; 堆和栈直接用地址连接; 堆里面不用的就是垃圾;
5.数组类型的参数
5.1 数组类型的参数
方法调用时,将nums中的地址赋值给oneArray,此时二者指向同一个数组。 传递参数时:基本类型传递的是变量中的值;引用类型传递的是变量中的地址。
5.2数组类型的返回值
调用数组类型返回值的方法时,方法执行后,返回的是数组的地址。
6、可变长参数*
概念:可接收多个同类型实参,个数不限,使用方式与数组相同。 语法:数据类型... 形参名 //必须定义在形参列表的最后,且只有一个。