[java基础]数组
1 /**
2 文件路径:G:JavaByHands数组
3 文件名称:ArrayTest.java
4 编写时间:2016/6/13
5 编写说明:学习数组的使用方法~~
6 知识来源:疯狂java讲义
7 */
8
9 /*
10 数组是用来储存多个数据的一种数据结构~~
11 一个数据被成为一个数组元素
12 可以通过数组元素的索引来访问数组元素
13 java要求所有的数组元素具有相同的数据类型
14 一旦数组初始化完成,数组在内存中所占的空间将被固定下来,长度不可变
15 数组既可以储存基本数据类型,也可以储存引用数据类型
16 数组本身就是一种引用类型
17
18 定义数组:type[] arrayName;==> 类型[] 数组名;
19
20 初始化数组
21 1:静态初始化:初始化时,指定每个数组元素的初始值,由系统决定数组长度
22 格式:arrayName = new type[]{element1,element2...};
23 简化:arrayName = {element1,element2...};{这样会报错...没有初始化...}
24 常用:type[] arrayName = {element1,element2...};
25 type为数组元素的数据类型,必须与定义数组变量时采用的type相同
26 也可以是定义数组时所使用的type的子类
27 数组元素由花括号括起来,并用逗号隔开
28
29 2:动态初始化:动态初始化是指指定数组的长度,由系统为每个数组元素指定初始值
30 格式:arrayName = new type[length];
31 length表示数组的长度,即可以容纳数组元素的个数,int型
32 type同静态初始化~~
33
34 规则:
35 整 形:默认值为0
36 浮 点 型:默认值为0
37 字 符 型:默认值为‘u0000’
38 布 尔 型:默认值为false
39 引用类型:默认值为null
40
41 !注意:静态初始化和动态初始化不能同时使用~~
42
43 使用数组
44 访问数组元素和对数组元素赋值一般都是通过在数组引用变量后面加索引值来实现
45 索引:方括号加int类型的值~~java中索引从0开始
46 String[] arrX = {"1","2","3","4","5"}; String[] arrX = {"赵","钱","孙","李","周"};
47 | | | | | | | | | |
48 索引值 [0] [1] [2] [3] [4] [0] [1] [2] [3] [4]
49 重要的事情说三遍:
50 索引值一定是从0开始的,最后一个索引值是数组的长度-1 !!!
51 索引值一定是从0开始的,最后一个索引值是数组的长度-1 !!!
52 索引值一定是从0开始的,最后一个索引值是数组的长度-1 !!!
53
54 数组长度:length
55 获取数组中的值,可以利用for循环,对数组进行遍历~~
56 int[] arr = {1,2,3,4,5,6};
57 for(int i = 0 ; i < arr.length ; i ++ ){
58
59 System.out.println(i);
60
61 }
62
63 jdk1.5以上提供了foreach循环
64 int arr2 = {1,3,5,7,9};
65 for(int i : arr2) {
66
67 System.out.println(i);
68
69 }
70 利用foreach循环迭代循环数组元素时,循环变量相当于是一个临时变量,改变这个变量,不会改变数组中的值~~
71
72
73 */
74
75 public class ArrayTest{
76
77 public static void main(String[] args){
78
79 //静态初始化数组
80 int[] arr;
81 arr = new int[]{1,2,3,4,5};
82
83 /*注意:这样写会报错...虽然看书上有这种写法...但实测的时候报错...
84 *用eclipse也测了一下...依然报错
85 *Array constants can only be used in initializers 数组常量只能用于初始化
86 *还是需要实践呀~~
87 */
88 //int[] arr1;
89 //arr1 = {1,2,3,4,5};
90
91 int[] arr1 = {1,2,3,4,5};
92
93 int[] arr2 = {1,2,3,4,5};
94
95 //初始化数组,数组元素是定义类型的子类
96 Object[] objArr;
97 objArr = new String[] {"对象","子类"};
98
99 //动态初始化数组
100 int[] arr3 = new int[5];
101 //初始化数组,数组元素是定义类型的子类
102 Object[] objArr1 = new String[3];
103
104 //对动态初始化的数组赋值
105 arr3[0] = 5;
106 arr3[4] = 7;
107
108 //输出单个的数组元素的值
109 int i = arr1[3];
110 System.out.println(i);
111
112 //循环遍历数组
113 for(int j = 0; j < arr2.length; j ++) {
114 System.out.print("arr2["+ j +"] = " + arr2[j] + ",");
115 }
116118
119 //foreach 循环
120 for(int k : arr1) {
121 System.out.print(k);
122 }
123
124 }
125 }
1 /**
2 文件路径:G:JavaByHands数组
3 文件名称:ArrayTest1.java
4 编写时间:2016/6/20
5 编写说明:学习数组的使用方法2~~
6 知识来源:疯狂java讲义
7 */
8
9 /*
10 数组是一种引用数据类型,数组元素和数组变量在内存中是分开存放的
11
12 数组的引用变量是一个引用,可以指向任何一个有效的内存,只有当该引用指向有效内存后才可以访问数组元素。
13 引用变量是访问真实对象的根本方式。
14
15 *********************************************************
16
17 关于java中堆和栈的区别
18 知识来源:http://www.cnblogs.com/perfy/p/3820594.html
19
20 java把内存划分为两种:
21 1:栈内存
22 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配的
23 当一段代码块定义一个变量的时候,JAVA就在栈中为这个变量分配了内存空间
24 当超过了变量的作用域之后,java会自动释放掉为该变量分配的内存空间
25 之后,该内存空间就可以被立即另做他用
26
27 2:堆内存
28 堆内存用来存放由new创建的对象和数组
29 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理
30 new出来的对象和数组,即使程序运行到使用该对象和数组的语句所在代码块之外的地方,
31 所占据的内存空间依然存在不会释放
32 直到没有引用变量指向它的时候,才会变成垃圾,不能再被使用
33 直到某个不确定的时间被垃圾回收器收走(释放掉...)
34
35 堆中产生了一个数组或者对象之后,可以在栈中定义一个特殊的变量,
36 让栈中的变量取值等于数组或对象在堆内存中的首地址值
37 栈中的变量就成为了数组或对象的引用变量
38 然后就可以在程序中使用栈中的引用变量来访问堆中的数组或者对象
39 引用变量就是普通的变量,相当于为数组或者对象起的一个名称
40
41 *********************************************************
42
43 如果堆内存中的数组不再被任何引用变量指向,那么这个数组将成为垃圾,该数组所占的内存空间将会被系统的垃圾回收机制回收
44 为了让垃圾回收机制回收一个数组所占的内存空间,则可以将数组变量赋值为null,即切断了数组引用变量与实际数组之间的引用关系
45
46 只要数组类型相互兼容,可以让一个数组变量指向另一个实际数组
47 大概意思就是:
48 int[] a = {1,2,3}; int b = {4,5,6,7}; ==> b = a ; ==> b = {1,2,3}
49 */
50
51 //正常的情况下,文件名不要这样命名...会被打死的...
52 public class ArrayTest1 {
53
54 public static void main(String[] args) {
55
56 //定义一个静态数组a
57 int[] a = {1,2,3,4,5,6,7};
58 //定义一个动态数组b
59 int[] b = new int[3];
60
61 //分别获取a,b的长度
62 int la = a.length;
63 int lb = b.length;
64
65 //输出
66 System.out.println(la); //7
67 System.out.println(lb); //3
68
69 //如果这时候 给b赋值null
70 b = null ;
71 /*
72 这个时候,以前b指向的那个实际数组就没有
73 那个实际数组就会成为一个垃圾,等待回收器回收
74 假如在给b赋null之前,将另一个引用变量指向了那个实际数组...
75 那那个实际数组会依然存在~~
76 */
77
78 //然后将a的值赋给b
79 b = a ;
80
81 //再次获取b的长度
82 lb = b.length;
83 //输出
84 System.out.println(lb); //7
85
86 }
87
88 }