本帖最后由 枫烬 于 2015-11-6 00:56 编辑
笔记内容:数组
笔记来源:冯佳Java基础视频第6天
正文:
概述
- 数组是存储同一种数据类型多个元素的集合/容器,可以存储基本数据类型或是引用数据类型。
- 数据类型[] 数组名 = new 数据类型[数组长度];
[]的个数代表数组的维度
- 特点:
- 数组的每个元素都有编号(index,索引,角标),从0开始,最大编号为arr.length-1
- 在堆内存里面是一块连续的内存空间
- 初始化:不允许动静结合
- 动态初始化,指定长度,系统给出初始化值
- 静态初始化,指定初始化值,系统来决定长度
默认初始化值: 整数类型 | byte,short,int,long | 0 | 浮点类型 | float,double | 0.0 | 布尔类型 | boolean | false | 字符类型 | char | '\u0000' | 引用数据类型 |
| null |
‘\u0000’:每个0都是代表16进制的0
Sys.out.print(arr); ==>[I@da6
内存
栈 | 存储局部变量 | 先进后出 | 堆 | 存储new出来的数组或对象 |
| 方法区 | 存储代码 |
| 本地方法区 | 和系统有关 |
| 寄存器 | cpu用 |
|
局部变量:定义在方法声明和方法体里的变量
类文件运行加载后,主方法main以栈针的形式压栈到栈底,定义数组,在堆创建数组的连续空间
- 异常
- ArrayIndexOutOfBoundsException 数组索引越界异常
- NullPointerException空指针异常
操作
- //遍历数组
- public static void testArray01(int[] arr){
- for (int i = 0;i < arr.length ;i++ ) {
- System.out.print(arr[i]+"\t");
- }
- System.out.println();
- }
复制代码
- 最大值
- //获取数组最大值
- public static void getArrayMax(int[] arr){
- int max = arr[0];
- for (int i = 1;i<arr.length ;i++) {
- if (max < arr[i]) {
- max = arr[i];
- }
- }
- System.out.println("最大值为:"+max+"。");
-
- }
复制代码
- 最小值
- //获取最小值
- public static int getArrayMin(int[] arr) {
- int min = arr[0];
- for (int i = 1;i <arr.length ;i++ ) {
- if (min > arr[i]) {
- min = arr[i];
- }
- }
- return min;
- }
复制代码
- 反转
- //反转
- public static void reverseArray(int[] arr) {
- for (int i = 0;i < arr.length/2 ;i++ ) {
- int temp = arr[i];
- arr[i] = arr[arr.length-i-1];
- arr[arr.length-i-1] = temp;
- }
- }
复制代码
- 排序
- 由值返回角标
- //由值返回角标
- public static int getIndex(int[] arr,int value) {
- for (int i = 0;i < arr.length ;i++) {
- if (arr[i] == value) {
- return i;
- }
- }
- return -1;
- }
- }
复制代码
- 由角标返回值
- //星期
- public static void getWeek(int week){
- char[] weekDay = {'一','二','三','四','五','六','日'};
- System.out.println("这是星期"+weekDay[week-1]+"。");
-
- }
复制代码
二维数组
数据类型[ ][ ] 数组名称 = new 数据类型[ a ][ b]; ==》a个一维数组,每个一维数组中有b个元素
Int[]x,y[]; x是一维数组,y是二维数组;
默认初始化值是null 参数传递问题: 基本类型数据的值传递,不改变原值,因为调用后会弹栈,局部变量消失。调用时,用的只是将变量的值赋给局部变量。 引用数据类型的值传递,改变原值,因为即使方法弹栈,但堆内存数组对象还在,可通过地址访问
java传值/传址? 只有传值,因为地址值也是值
形参的改变会影响实参吗? 基本数据类型,形参的改变不影响实参 引用数据类型,形参的改变影响实参
|