黑马程序员技术交流社区
标题:
学习到第5天数组,跟大家分享下学习笔记
[打印本页]
作者:
wuzeshui
时间:
2016-1-12 21:25
标题:
学习到第5天数组,跟大家分享下学习笔记
数组:
概述:存储同一种数据类型的多个元素的集合(容器);
基本数据类型 引用数据类型
格式:
数据类型[] 数组名 = new 数据类型[数组的长度];
int[] arr = new int[3];
格式一:元素的数据类型[] 数组的名字 = new 元素的数据类型[元素的个数(数组的长度)];
变形:元素的数据类型 数组的名字[] = new 元素的数据类型[元素的个数(数组的长度)];
格式二:元素的数据类型[] 数组的名字 = new 元素的数据类型[]{元素1,元素2,元素3,......};
注:第二个[]里不能填任何东西,填了就会编译报错
格式三:元素的数据类型[] 数组的名字 = {元素1,元素2,元素3,......};
数组的特点:
数组中存储的元素的数据类型必须是同一个数据类型
数组里的元素的个数是固定的,也就是说在一开始定义数组的时候就已经决定了
数组有索引,索引是从0开始标号,说明索引的最大值是元素的个数减去1
属性:length (长度)
初始化:在内存中开辟了连续的内存空间,并给数组元素赋值;
动态
静态
数组动态初始化后元素的默认值:
整数: 0
浮点: 0.0
字符: \u0000
布尔: false
引用数据类型: null
栈:局部变量
堆:new出来的数组和对象
方法区:
本地方法区:
寄存器:
int[] arr1 = new int[3];
int[] arr2 = new int[3];
int[] arr3 = arr2;
静态初始化:
int[] arr = new int[]{3,7,9};
int[] arr = {3,7,9};
数组的用法:
例:
int[] arr = {1,2,4,3,6};
System.out.println(arr);//直接打印数组的名字的结果是数组在内存中的地址值
System.out.println(arr[0]);//要通过数组的索引,才能打印出数组里存储的元素
数组中元素标号的叫法:
索引,角标,下标
常见的数组问题:
数组索引越界异常:ArrayIndexOfBoundsException
访问了不存在的索引元素;
空指针异常:NullPointerException
数组引用为null的时候再来调用数组元素;
一个数组名字只可以指向一个数组实例,因为变量名只能存放一个值,所以只能指向一个数组实例
但一个数组实例可以被多个数组名字指向,因为多个变量都存放同一个值(数组实例的地址值)
遍历数组练习:
public static void main(String[] args){
int[] arr = {3,7,9,8,38}; //定义一个数组
print(arr); //调用遍历数组的方法
}
//遍历
public static void print(int[] arr){ //定义遍历数组的方法
for(int i = 0; i < arr.length; i++){ //通过for循环获取数组中的所有索引
System.out.println(arr[i]); //根据索引获取到数组的每一个元素,并打印输出
}
}
//数组求最值
public static int getMax(int[] arr){
int max = arr[0];
for(int i = 1; i < arr.length; i++){ //通过for循环获取数组中的所有索引
if(max < arr[i]){
max = arr[i];
}
}
return max;
}
//数组反转
public static void reverseArray(int[] arr){
for(int i = 0;i < arr.length / 2; i++){
int temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
}
//查找星期
public static char getWeek(int week) {
char[] arr = {' ','一','二','三','四','五','六','日'}; //定义了一张星期表
return arr[week]; //通过索引获取表中的元素
}
//数组元素查找(查找指定元素第一次在数组中出现的索引)
public static int getIndex(int[] arr,int value) {
for (int i = 0;i < arr.length ;i++ ) { //数组的遍历
if (arr[i] == value) { //如果数组中的元素与查找的元素匹配
return i;
}
}
return -1;
}
二维数组:
格式: int[][] arr = new int[3][2];
格式2: int[][] arr = new int[3][];
格式3: int[][] arr = {{12,31,42},{1,2,3,4},{5,7}};
二维数组的遍历:
/*
// 外循环控制的是二维数组的长度,其实就是一维数组的个数。
// 内循环控制的是一维数组的长度。
int[][] arr = {{12,31,42},{1,2,3,4},{5,7}};
for(int i = 0; i < arr.length;i++){
//arr[i]
for(int j = 0; j < arr[i].length;j++){
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
*/
二维数组元素求和:
/*
int sum = 0; //定义变量,记录每次相加的结果
for (int i = 0;i < arr.length ;i++ ) { //获取每一个一维数组
for (int j = 0;j < arr[i].length ;j++ ) { //获取每一个一维数组中的元素
sum = sum + arr[i][j]; //累加
}
}
System.out.println(sum);
*/
参数传递问题:
基本数据类型的值传递,不改变原值,因为调用后就会弹栈,局部变量随之消失
引用数据类型的值传递,改变原值,因为即使方法弹栈,但是堆内存数组对象还在,可以通过地址继续访问
基本数据类型,形式参数的改变不影响实际参数
引用数据类型,形式参数的改变影响实际参数 (String)、
Java中到底是传值还是传址:
java中只有值传递,因为地址值也是值(出去面试都说这种,支持者是詹姆斯丶高斯林)
几种‘空’的区别:
null //代表什么都没有,空格也没有
" " //代表字符串空格
' ' //代表字符空格
\u0000 //Unicode编码,char类型的默认值
作者:
愿随风丶飘雪
时间:
2016-1-12 22:38
哇塞,学的不错,比我强多了,好好学
作者:
aoejhx
时间:
2016-1-13 13:17
加油啊@小伙子
作者:
一大把手
时间:
2016-1-13 14:25
加油小伙子
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2