版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
定义数组
- 数组是一种引用类型的变量,因此使用数组定义一个引用变量相当于定义一个指针,定义时还未指向任何有效的内存,因此定义数组时不能指定数组的长度,当对数组进行初始化后才可以使用
- 数组初始化:
- 静态初始化
public class ArrayTest { public static void main(String[] args) { //定义一个int数组类型的变量,变量名为intArr,并静态初始化 int[] intArr; intArr = new int[] {5,6,8,20}; //定义一个Object数组类型的变量,变量名为objArr,并静态初始化 Object[] ObjArr; ObjArr = new String[] {"Java","李刚"}; Object[] ObjArr1; ObjArr1 = new Object[] {"Java","李刚"}; } }
说明:数组定义和初始化同时完成,简写:int[] a = {5,6,7,9};
- 动态初始化
语法:int[] prices = new int[5]; Object[] books = new String[4];
使用数组(foreach循环)
访问数组元素,对数组元素进行赋值和取出数组元素值。注意:访问数组元素时的指定索引小于0,或者大于等于数组的长度,编译程序不会出现任何错误,但运行时会出现异常 。
foreach循环自动遍历数组和集合的每个元素,使用如下:
public class ForEachTest { public static void main(String[] args) { String[] books = {"疯狂Java讲义","李刚","使用forEach循环遍历"}; for (String book : books) { System.out.println(book); } } }
注意:无需获得数组和集合的长度,无需根据索引来访问数组元素和集合元素,foreach中循环变量相当于一个临时变量,并不是数组元素,如果希望改变数组元素的值,不能使用foreach循环
深入数组
- 内存中的数组:实际数组存储在堆中,如果引用该数组对象的数组引用变量,则被存储在栈中。堆内存中的对象不会随方法的结束而销毁,栈随方法的执行结束被自然销毁
注意:当未定义b中的元素值时,输出为o。for大循环的后面跟不跟“;”,程序照常执行,不会报错public class ArrayInRam { public static void main(String[] args) { int[] a = {5, 3, 4, 8}; int[] b = new int[4]; System.out.println(a.length); System.out.println(b.length); for(int i = 0; i < a.length; i++) { System.out.println(a[i]); } for(int i = 0; i < b.length; i++) { System.out.println(b[i]); } b = a; System.out.println(b.length); } }
- 引用类型数组的初始化:先定一个Person类,得到不同人的年龄和身高
class Person { public int age; public int heigth; public void info() { System.out.println("我的年龄是:" + age + ", 我的身高是:" + heigth); } } public class ReferenceArrayTest { public static void main(String[] args) { Person[] students = new Person[2]; Person zhang = new Person(); zhang.age = 15; zhang.heigth = 168; Person lee = new Person(); lee.age = 17; lee.heigth = 170; students[0] = zhang; students[1] = lee; students[0].info(); students[1].info(); } }
注意:当定义一个对象时后跟(),使用一种方法是后跟(),student[0]和zhang访问Person实例的实例变量和方法效果完全一样
Java中没有多维数组,Java语言里的数组类型是引用类型。当数组元素引用再次指向真是的数组内存,这样看上去像多维数组。多维数组初始化时,可以只定义最左边维的大小,也可以一次指定每一维的大小
功能:将浮点数转换成人民币读法字符串
import java.util.Arrays; public class Num2Rmb { private String[] hanArr = {"零","壹","二","叄","肆","伍","陆","柒","捌","玖"}; private String[] unitArr = {"十","百","千"}; //将整数和小数部分分开 private String[] divide(double num) { long zhengshu = (long)num; long xiaoshu = Math.round((num - zhengshu) * 100); return new String[] {String.valueOf(zhengshu) + "", String.valueOf(xiaoshu)}; } //把一个四位的数字字符串变换成汉字 private String toHanStr(String numStr) { String result = ""; int numLen = numStr.length(); for(int i = 0; i < numLen; i++) { //char型数字转换成int型数字 int num = numStr.charAt(i) - 48; if(i != numLen -1 && num !=0) { result += hanArr[num] + unitArr[numLen - 2 - i]; } else { result += hanArr[num]; } } return result; } public static void main(String[] args) { Num2Rmb n = new Num2Rmb(); System.out.println(Arrays.toString(n.divide(236711125.123))); System.out.println(n.toHanStr("6109")); } }
说明:Math.round()把一个数字四舍五入为最接近的整数;.charAt()返回指定位置的字符串,单个字符串;String.valueOf()返回string类型的值;Arrays.toString将一个数组转换成一个字符串