数组

1.格式

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

数据类型有基本数据类型八个和引用数据类型


2.数组的定义:

用处:

存储同种数据类型多个元素的集合

简单写法:

int[] a = {,,,,,,};

3.数组的初始化:

动态初始化:给出数组长度,由系统给出默认数据初始值

写法: int[] a = new int[5];

静态初始化:给出初始化数据,由系统给出长度

写法:int a[] ={,,,,}写法二:int[] a = new int[];a=new int[]{,,,,};

写法二可以创建对象,在之后赋值,而写法一只能写在同一行

基本数据类型初始化值:

整型:0,字符型:\u0000,浮点型:0.0,布尔型:false

数组索引越界异常原因:访问了不存在的索引

空指针异常:数组已经不再指向堆内存

4.数组的遍历:

概念:依次输出数组中的每一个元素。学习数组时要牢记相关概念,专业术语,不然运用解说的时候不能表达清楚,思考也会模糊。

小知识:当两个数组共有同一个地址池时,改变一个数组元素,另一个也将随之改变。


5.数组的操作:获取最值,反转(元素对调),查表法(根据数组索引找到对应元素),基本查找(数组元素查找,查找指定元素第一次在数组中出现的索引)

获取最值:

int max = arr[0];

for(int i=1;i<array.lenth;i++){

if(max<arr[i]){

max=arr[i];

}

return max;

}


数组元素反转(就是元素对调):

for(int i=0;i<arr.length/2;i++){

// arr[0]和[arr.lenth-1]交换

// 1--lenth-1-12和lenth-1-1-1------

int temp = arr[i];

arr[i] = arr[arr.length-1-i];

arr[arr.lenth-1-i]=temp;

}

查表法(根据数组索引找到对应元素):

思路:键盘录入一个数,通过调用方法输出对应的星期,根据索引返回的星期为char值,参数week为int型:
import java.util.Scanner;
class Demo_5_4 {
//数组查表法:输出星期(数组)
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int week= sc.nextInt();
System.out.println(Weeks(week));//方法后加()而不是[ ]要看清,因为调用的是方法而不是数组。
}
public static  char  Weeks(int week){
char[] arr= {' ','一','二','三','四','五','六','日'};
return arr[week];
}
}


基本查找(数组元素查找,查找指定元素第一次在数组中出现的索引):

public static void getIndex(int[] arr,int value){
for(int i=0;i<arr.length;i++){
if(arr[i]==value){
return i;
}
}
return -1; //如果数组中的所有元素与查找的元素没有匹配的,返回-1
}


6.二维数组:

二维数组类似于一维数组,但一个一维数组包含多个元素,而二维数组是有多个一维数组,每个一维数组包含多个元素

格式:int[][] arr = new [4][12];----arr二维数组中,包含四个一维数组,每个一位数组有12个元素。从左往右,从上往下开始定义索引,从arr[0][0]开始计算。

二维数组遍历:

用嵌套for遍历,外for循环表示一维数组的个数(相当于二维数组长度),内for循环表示一维数组的(长度)

不同长度的数组怎么遍历:

如 int arr[][] ={{12,3,3,},{41,58}};

在嵌套for循环中,a[i][j]  i代表数组长度,j代表一维数组的长度。可用a[i].length表示二维数组中一维数组的长度,即:在嵌套内循环的长度限定该为a[i].length.

length 意思为获取该属性的长度。


容易出错混淆点:方法调用时怎么确定是否定义变量

例子:

import java.util.Scanner;
//找最值
class Demo_5_3 {
public static void main(String[] args) {
int[] a = {14,45,15,21,64,87};

int s = getMax(a);
System.out.print(s);---需要先定义int型对象,通过对象来打印结果,


getMin(a); ---没有定义对象,直接调用方法,在方法中传入参数。

}
public static int getMax(int[] arr){-----返回值类型为int类型,有返回值,返回的是int型值,调用该方法时要定义int型对象。
int Max = arr[0];
for(int i=0;i<arr.length;i++){
if(Max<arr[i]){
Max = arr[i];
}
}
return Max;
}
public static void getMin(int[] arr){----返回值为void类型,没有返回值,调用该不需要创建对象。
int min = arr[0];
for(int i=0;i<arr.length;i++){
if(min<arr[i]){
min = arr[i];
}
}
System.out.print(min);
}
}

基本数据类型的值传递,不改变原值,因为调用后就会弹栈,局部变量随之消失

如:int a; change(a)输出a的值,之后再打印  a的值,a的值还是原值不变,虽然调用了change()方法,但调用完就会弹栈,a的值不会改变。

引用数据类型的值传递,因为原值,因为即使使用方法弹栈,但堆内存数组对象还在,可以通过地址继续访问

如:创建数组对象,通过方法改变值,虽然使用该方法并弹栈了,但数组对象还在堆内存中,改变的值还存在。


7.内存:

在内存中,有方法区,堆,栈;可以简单解释为,加载类 .classl进入方法区,成员变量、创建的对象定义在堆中,调用的方法在栈里,当调用的方法使用完成后,会进行弹栈,把相关数据当成垃圾清理。而在堆中的对象随对象的创建而创建,随对象的使用而存在,随对象的使用完毕而结束。只要有调用该对象,该对象就存在。

而局部变量在方法中,随方法的弹栈而消失。


问:Java中到底是传值还是传址

1.既是传值,也是传址,基本数据类型传递的值,引用数据类型传递的地址

2.Java中只有传值,因为地址值也是值(支持者是高司令(Java之父))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值