- 数组 —— Java篇
- 数组的概念:
- 数组的创建
- 数组的创建有两种方式:
- 数组名的地址
- 代码演示:
- 数组的 null 化
- 数组的遍历
- 求数组的长度:
- 代码实例:
- 数组的遍历
- 代码实例:
- 打印数组:
- 扩展for 语句:
- 注意不要越界访问数组
- 数组的传参
- 上述代码:图解
- 通过数组的引用类型(地址)方法交换数值
- 最后:
- 每博一文案
数组的概念:
-
数组就是一种存储多个数据的容器,数组中的每一个元素类型需要保持一致性,
-
数组本身是也是一种引用类型,引用类型存放数组的首地址,与C语言中的指针相似,存放地址。
-
数组是元素是在堆区存放的,与C语言不同,C语言是在栈区上开辟空间的
数组的创建 数组的创建有两种方式:
//数组的类型[] 数组名 = new 数组类型[]{元素1,元素2,元素3};
int[] arr = new int[]{...}; // 动态初始化
int[] arr = {...};
// 数组的类型[] 数组名 = {元素1,元素2,元素3};静态初始化
- 它们在一定的程度上是没有什么区别的
public class Study05 {
/*数组的声明,定义*/
public static void main1 (String[] args) {
int[] arr ={1,2,3};
int[] arr1 = new int[]{4,5,6};
int[] arr2 = new int[3];
// new 实例化一个对象
// int[] 引用类型 ——> 与C语言中的指针类似,arr ,arr1,arr2 存放地址;
// int[] arr,arr,arr2 是在内存栈上的开辟占用空间,存放数据的(指向后面堆区开辟的首地址)
// 而后面的 new ... 是在堆区中开辟空间,存放数据的
/*Java虚拟机栈 Java本地方法栈
* 堆 方法区 程序计数器 */
}
}
数组名的地址
- 在 Java 当中你是取不到,数组真实的地址的,你所取到的地址只是被哈希加密过的一个数值,这一点鲜明的体现了 Java 不同于C语言的安全性。
- 不过你可以间接的认为是一个地址,因为地址的特点就是唯一性,儿被哈希加密过返回的值,也是具有唯一性的
代码演示:
public class Study05 {
public static void main (String[] args) {
int[] array = new int[]{1,2,3,4,5,6};
System.out.println("array ="+array);
/*注意 Java 是无法拿到地址的,再次鲜明出Java是一种安全语言
* Java中的地址是被哈希函数加密了过的,但也是具有唯一性的特征,
* 所以你可以间接的认为是个地址*/
}
}
数组的 null 化
- null 在 Java 中是表示 ”空引用“,也就是一个无效的引用。
- null 的作用类型于C语言中的 NULL (空指针),都是表示一个无效的内存位置,因此不能对这个内存进行任何的读写 *** 作,一旦尝试读写,就会抛出 NUllPoninterException
public class Study05 {
public static void main (String[] args) {
int[] arr = null;
System.out.println(arr);
System.out.println(arr[0]);
}
数组的遍历 求数组的长度:
- 使用 {数组名+length} 可以求出对应数组的长度
public class Study05 {
public static void main (String[] args) {
int arr[] = new int[]{1,2,3,4,5,6,7,8,9,10};
int len = arr.length;
System.out.println("len ="+len);
}
}
数组的遍历
- 通过访问数组的下标,实现打印数组
代码实例:
public class study05 {
public static void main3 (String[] args) {
int[] array = new int[]{1,2,3,4,5,6};
int len = array.length; // 求数组的长度;
for (int i = 0; i < len; i++) {
System.out.println(array[i]);
}
}
}
打印数组: 扩展for 语句:
- 我们已经学过了,for 循环语句的基本用法,
- 这里我介绍另外一种 for 的用法,—— 扩展for语句 ( foreach ) ,就可以非常简洁地实现数组的遍历。
- 废话不多说,上 *** 作
public class Study05 {
public static void main8 (String[] args) {
int[] arr = new int[]{1,2,3,4,5,6,7,8,9,10};
for (int num:arr) { // 这里是 foreach
System.out.print(num);
}
}
}
- 上述代码的解析:
- 在扩展for语句中for (int num : arr ), 冒号{ : }的意思是 ”…中” ,可以将其读作英文的 “in"
- 括号中的 { num } 表示的是当前正在查看的元素的一个临时寄放,遍历过程中正在查看的元素,所以其定义的类型要与数组元素的类型一致;
- 使用扩展 foreach 语句的好处如下:
- 省去了确认数组的长度(元素个数)的 *** 作
- 可以使用与迭代器相同的方法来执行遍历
注意不要越界访问数组
public class Study05 {
// 下标越界访问示范
public static void main6 (String[] args) {
int[] arr = new int[]{1,2,3};
System.out.println(arr[3]); // 下标越界访问了
}
}
数组的传参
- 数组——> 引用类型——> 地址
- 引用变量是在栈区上开辟空间的,而后面数组元素是在堆区中开辟空间的
public class Study05{
// 数组引用类型参数
public static void printArray (int[] arr2) {
for (int num:arr2) {
System.out.print(num+"\t");
}
}
public static int[] tranSform(int[] arr3) {
int[] ret = new int[arr3.length];
for (int i = 0; i < arr3.length; i++) {
ret[i] = arr3[i]*2;
}
return ret;
}
public static void main13 (String[] args) {
Study05 tranSform = new Study05();
Study05 printArray = new Study05();
int[] arr1 = new int[]{1,2,3};
Study05.printArray(arr1);
System.out.println("\n 变化后的数值");
int[] output = Study05.tranSform(arr1);
Study05.printArray(output);
}
}
上述代码:图解
通过数组的引用类型(地址)方法交换数值
- 通过数组传参,而实现方法的交换数值
public class Study05 {
// 通过数组进行数值的交换
public static void printarray (int[] array) {
int tmp = array[0];
array[0] = array[1];
array[1] = tmp;
}
public static void main11 (String[] args) {
Study05 printarray = new Study05();
int[] array = new int[]{10,90};
for (int tmp:array) {
// System.out.println("为交换前的数值:array[0]="+array[0]+"array[1]"+array[1]);
System.out.print(tmp);
}
System.out.println("\n交换后的数值:");
Study05.printarray(array);
for (int tmp:array) {
System.out.print(tmp);
}
}
}
最后: 每博一文案
面对利益的时候,人与人的交往中利益永远是很重要的。
试金石生活中总是会有这样的人,吃饭时指点江山,结账时不见人影,需要帮助好言好语,别人有难时,默不作声,
这样的人看着好卖肉请,其实却是口不对心。
面对利益的时候斤斤计较,连一分钱都要算清你这样的人,交往受伤的总会是自己。
—————— 一禅心灵庙语
限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵——多多益善,谢谢大家,后会有期,江湖再见!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)