Java复习三-数组

Java复习一:https://blog.csdn.net/Zhang_Yixuan_ss/article/details/85415994

Java复习二:https://blog.csdn.net/Zhang_Yixuan_ss/article/details/85798342

一、一维数组

数组是一组相关数据的集合,一个数组实际上就是一连串的变量,数组按照使用可以分为一位数组、二维数组、多维数组。数组属于引用数据类型,因此肯定会涉及内存分配。数组声明后实际上是在栈内存中保存了此数组的名称,接下来便是要在堆内存中配置数组所需的内存,其中“长度”是告诉编译器,所声明的数组要存放多少个元素,而“new”则是命令编译器根据括号里的长度开辟空间。

1.数组的动态初始化

数组的声明: 数据类型[] 数组名 =new 数据类型[长度]

   或者   数据类型  数组名称[]  = new 数据类型[长度]

声明数组:

数据类型 数组名称[] = null

开辟空间:

数组名称= new数据类型[长度]

        数组的访问通过索引完成,即:"数组名称[索引]",但是要注意素组索引从0开始,因此数组下标等于数组长度-1,如果超过数组索引范围则会产生异常。数组本身是一个有序的集合操作,因此对数组的内容操作采用循环来输出,数组是一个有限的数据集合因此使用for循环。

数组的长度通过   数组名称.length  来获取数组的引用传递:属于引用数据类型,因此也一定可以引用,不同的栈空间可以被不同的堆内存来指向,发生引用传递。例如:

int data = new  int[3];

int temp[] = data;

 

int data []  =  null;

开辟栈空间

data  =new  int  [3]

开辟堆内存

 数组的缺陷是,长度固定。数组的优点是可以简化对多个同类型的变量的定义。

2.数组的静态初始化

格式:数据类型  数组名[]  =  {初值0,初值1,初值2,......,初值n}

public class ArrayDemo{

      public static void main(String[] args){

             int score[]  =  {91,92,93,94,95};

             for(int x = 0;x<score.length;x++){//循环输出

                      System.out.println("score["+x+"]="+score[x]);

             }

      }

}

//其中for循环可以更改为foreach输出
for(int x : score)

二、二维数组

1.二维数组动态初始化:

                     

      格式: 数组类型   数组名称  [] [] = new 数据类型[行个数][列个数]

二维数组的输出需要两层循环,外部循环控制行,内部循环控制列

   for(int x= 0; x<data.length;x++)

        for(int y = 0;y<data[x].length;y++)

2.二维数组的静态初始化:

格式:数据类型  数组名[][]  =  {{第0行初值},{第1行初值},......,{第n行初值}};

三、Java中常用的对数组操作的支持

1.数组排序

int age [] = {31,30,32,8,19};
java.util.Arrays.sort(age);
//其中sort方法可以针对各类数据类型

2.数组copy

int i1 [] = {1,2,3,4,5,6,7,8,9};//源数组
int i2 [] = {11,22,33,44,55,66};//目标数组
System.arraycopy(i1,3,i2,1,3);//copy函数调用
//括号里的为(源数组,源数组开始点,目标数组,目标数组开始点,拷贝长度)

四、可变参数

即方法中可以接收的参数不再是固定的,而是随着需要传递的,可变参数的定义格式如下:

返回值类型  方法名称(类型 ... 参数名称){}

所有可变参数接收后都是以数组的形式保存下来,所以直接按照数组的方式接受即可。

public class  Demo  
{
	public static void main(String[] args) 
	{
		System.out.println("不传参数");
		fun();
		System.out.println("传一个参数");
		fun(1);
		System.out.println("传五个参数");
		fun(1,2,3,4,5);
	}


public static void fun(int ... ary){
	for(int i = 0;i<ary.length;i++){
		System.out.println(ary[i]+"、");
		}
	}
}

五、数组对象

  • 所谓的对象数组,就是指包含了一组相关的对象,但是在对象数组的使用中,数组一点要先开辟空间,但是因为其是引用数据类型,所以数组里面的每一个对象都是null值,则在使用的时候数组中的每一个对象必须分别进行实例化操作。
  • 对象数组的声明:
类  对象数组名称[]  = new  类[数组长度];
  • 数组格式:数据类型  数组名称[]   =  new 数据类型[长度];

例子:动态方法

class Person{
	private String name;
	public Person(String name) {
		this.name = name;
	}
	public String getName() {
		return this.name;
	}
}

public class Demo{
	public static void main(String args[]) {
		//类名称  数组名称[] = new 类名称[长度];
		Person per[] = new Person[3];
		System.out.println("数组声明");
		//对象数组初始化之前,每一个元素都是默认值
		for(int x = 0 ; x < per.length;++x) {
			System.out.println(per[x]+"、");//因为只是开辟好了空间,所以都是默认值
		}
		//分别为数组中的每个元素初始化,每一个对象,都需要单独实例化
		per[0] = new Person("张三");
		per[1] = new Person("李四");
		per[2] = new Person("王五");
		System.out.println("\n====对象实例化====");
		for(int x = 0 ; x<per.length;++x) {
			System.out.println(per[x].getName()+"、");
			//输出姓名
		}
	}
}

例子:静态方法

class Person{
	private String name;
	public Person(String name) {
		this.name = name;
	}
	public String getName() {
		return this.name;
	}
}

public class Demo{
	public static void main(String args[]) {
		//类名称  数组名称[] = new 类名称[长度];
		Person per[] ={new Person("张三"),new Person("李四"),new Person("王五")};
		System.out.println("\n====数组输出====");
		for(int x = 0 ; x<per.length;++x) {
			System.out.println(per[x].getName()+"、");
			//输出姓名
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值