044.数组-数组遍历-值传递与引用传递
- 为什么需要数组 定义26个char类型变量,分别放置26个字母,并把这些变量值打印出来。
- 数组的概念 数组是多个相同类型数据的组合,实现对这些数据的统一管理。 数组中的元素可以是任意数据类型,包括基本类型和引用类型,但是不能混用。 可以一次性定义很多变量,并把这些变量从0开始编号(下标/索引),方便存取。 举例:房间
- 数组的语法
动态初始化
元素类型[] 数组名 = new 元素类型[数组长度];
int[] arr = new int[5];
静态初始化
元素类型[] 数组名 = new 元素类型[]{元素,元素,...};
int[] arr = new int[]{1,2,3,4,5};
int[] arr = {1,2,3,4,5}; 相当于 int[] arr = new int[5]; arr[0]=1; arr[1]=2; arr[2]=3; arr[3]=4; arr[4]=5; - 数组创建后,没有赋值,那么就是默认值。
long/int/short/byte 0
float/double 0.0
char \u0000
boolean false
String null - 数组使用步骤
声明数组
开辟空间
给数组各个元素赋值
使用数组 - 数组成员(元素)的赋值和读取
- 数组下标从0开始,下标越界会抛异常。
数组下标越界异常
int[] arr = new int[3];
System.out.println(arr[3]);
注意:Java的数组索引不能取负数,和python不一样
空指针异常
int[] ints={1,2,3,4};
ints = null;
System.out.println(ints[0]);
- 数组遍历 获取数组长度:使用数组的length属性 获取数组中最大的值
int[] arr1 = {1, 2, 3, 4, 8, 6};
int max = arr1[0];
for (int i = 1; i < arr1.length; i++) {
if (max < arr1[i]) {
max = arr1[i];
}
}
System.out.println(max);
数组扩容 无法在原有数组的基础上直接扩容,只能新建一个数组,把原数组的值赋值进新数组
int[] arr1 = {1,2,3,4,5};
int[] arr2 = new int[arr1.length+1];
for (int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
arr2[arr2.length-1]=8;
for (int j = 0; j < arr2.length; j++) {
System.out.println(arr2[j]);
}
- 数组拷贝 数组也是一种数据类型,引用类型。
- 值传递与引用传递
a、栈内存 存储局部变量,离开作用域,自动释放
b、堆内存 数组和对象,通过new建立的实例都存放在堆内存中 当没有任何引用指向实例的时候,gc会不定时回收
c、方法区、本地方法区
public class YinYong {
public static void main(String[] args) {
//值传递
int a = 100;
int b = a;
b = 200;
System.out.println("a:" + a);
System.out.println("b:" + b);
//引用传递
int[] arr1 = new int[5];
arr1[0] = 100;
arr1[1] = 200;
arr1[2] = 300;
arr1[3] = 400;
arr1[4] = 500;
int[] arr2 = arr1;
arr2[4] = 300;
System.out.println("arr1[4]:" + arr1[4]);
}
}
047.二维数组
- 二维数组的定义
//动态初始化
int[][] arr = new int[2][3];
arr[0][1] = 78;
//静态初始化
int[][] arr = {{1,2,3},{4,5,6}}; - 二维数组的长度
arr.length //二维数组长度3
arr[0].length //二维数组中第一个一维数组长度 - 二维数组的遍历
public class ErWei {
public static void main(String[] args) {
int[][] arr = { {1,2,5}, {7,2}, {3,8,9} };
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.println(arr[i][j]);
}
}
}
}
- 二维数组的其他定义方式
int[] x;
int x[];
int[][] y;
int y[][];
int[] y[];
int[] x,y[]; //定义两个数组,x是一维的,y是二维的
//中括号跟着变量类型走,一起定义的变量都有效
//中括号跟着变量名走,只有当前变量名有效
048.数组练习
1.下面数组定义正确的有
String strs[] = {'a','b','c'};//错
String[] strs = {"a","b","c"};//对
String[] strs = new String{"a","b","c"};//错
String strs[] = new String[]{"a" "b" "c"};//错,掉了逗号
String[] strs = new String[3]{"a","b","c"};//错,不需要写3
2. 输出的结果是
String foo = "blue";
boolean[] bar = new boolean[2];
if(bar[0]){
foo = "green";
}
System.out.println(foo);//blue,因为char型数组,默认初始化为false
- 输出的结果是
char[] arr1 = {'a','b','c','d'};
char[] arr2 = arr1;
arr2[2] = 'x';
System.out.println(arr1[2]);//x
- 随机生成十个整数,存入数组。倒序打印、求均值、求最大值和最大值下标。
- 声明int[] x,y[],以下选项允许通过的是:
x[0] = y; //int[][] -> int
y[0] = x; //对,int[] -> int[]
y[0][0] = x; //int[] -> int
x[0][0] = y;//错
y[0][0] = x[0];//对, int -> int x = y;//错
049.十进制转十六进制代码实现
原理:将该数不断除以16,直到商为0,每步得到的余数倒过来,就是对应的十六进制
050.Java中文文档
Java API中文文档:https://www.matools.com/api/java8 查看方式 
浙公网安备 33010602011771号