Article Outline
Java中的数组以及java-util-Random的简单介绍
<!--more-->
Random
package com.DeeJay;
import java.util.Random;
public class RandomDemo {
public static void main(String[] args) {
Random r = new Random();
int randomNumber = r.nextInt(10); // 可以选定范围 为 [0,10) 的一个区间
System.out.println(randomNumber);
}
}
数组
Java中的数组是存储同一种数据类型多个元素的容器。
数组既可以存储基本数据类型,也可以存储引用数据类型。
数组的定义
// define:
int[] arr1; // 1.推荐的定义方法 定义了一个int类型的数组,数组名为arr1
int arr2[]; // 2.定义了一个int类型的变量,变量名是数组arr2
数组的初始化
即 开辟内存空间,给数组中每个元素赋值
数组初始化分为动态初始化和静态初始化。
// 数组初始化(开辟内存空间,给数组中每个元素赋值)
// 1.动态初始化(给定长度,由系统给出初始值)
int[] arr3 = new int[10];
/*
* new 代表为数组申请内存分配 , 10 代表数组的长度
* */
System.out.println(arr3); // [I@299a06ac 为arr3的地址值
for(int i = 0; i < arr3.length; i ++) {
System.out.println(arr3[i]); // 输出10个 0
}
// 2.静态初始化 (给出初始值,由系统决定长度)
// 静态初始化的语法举例:
int[] arr4 = new int[] {1,2,3,4,5};
for(int i = 0; i < arr4.length; i++) {
System.out.println(arr4[i]); // 输出1 2 3 4 5
}
对于上述静态初始化的例子 可以简写为 int[] arr5 = {1,2,3,4,5};
二维数组
二维数组的定义
//define
int[][] arr1; // 推荐的方式
int arr2[][];
int[] arr3[];
二维数组的初始化
一样分为动态和静态
// 动态初始化
// 写法: 数据类型[][] = new 数据类型[m][n];
// m 代表这个二维数组中一维数组的个数,即二维数组的length, n代表的是一位数组的长度
int[][] arr1 = new int[3][2];
System.out.println(arr1.length); //3
// 静态初始化
// 数据类型[][] = new 数据类型[][]{ {}, {}, {}, ...};
// 简写 : 数据类型[][] = { {}, {}, {}, ... };
// int[][] arr2 = new int[][] {{1,2,3}, {4,5,6}, {7,8,9}};
int[][] arr2 = {{1,2,3}, {4,5,6}, {7,8,9}};
for(int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i]); // 依次输出[I@299a06ac [I@383534aa [I@6bc168e5 代表了三个元素即三个一维数组
for(int j = 0; j < arr2[i].length; j ++) {
System.out.println(arr2[i][j]); // 依次输出了这三个一维数组的每个元素
}
}
Java中的栈和堆
- 栈中存放的是 局部变量(定义在方法内部的变量);
- 堆中存放的是 new出来的对象;
int[] arr3 = new int[10];
这句语句,即把堆中的new int[10];
创造的对象的地址(即[I@299a06ac
)赋值给了这个arr3变量。
arr3这个变量在栈中,其存储的是一个地址([I@299a06ac
),指向的是堆中new int[10];
创建出来的那一个对象。
对于堆中的对象,每一种不同的类型的默认值也不一样: 类型 | 默认值 -- | -- byte,short,int,long | 0 float,double | 0.0 char | '\u0000' boolean | false 引用类型(类,数组,接口) | null
比如上面的arr3,其每一项元素都为int,所以默认值都为0;
另外堆中的对象,在使用完毕后, 会在垃圾回收器空闲的时候被回收(不是立即); 而在栈中的局部变量,使用完后是立即被回收的;