Java学习笔记(四)

来源:互联网 发布:数控铣削与编程实例 编辑:程序博客网 时间:2024/04/29 15:27

1.数组

数组的概念:是一种可以保存一组数的数据类型。

定义数组的语法:
元素的数据类型[] 数组变量名 = new 元素的数据类型[元素的个数];

例子:
int[] array = new int[10]

数组的特点:
  1. 数组的元素是连续分配的,在堆内存中分配。系统会进行默认初始化。
  2. 数组可以保存若干元素。一个数组只能保存一种类型的数据。如果存在继承,数组中可以存放子类元素。例如水果数组中可以存放香蕉、苹果等。
  3. 数组一旦初始化完成,数组在内存中所占的空间就被固定,数组长度不能修改。
  4. 数组是一种数据类型,一种引用类型。
  5. 通过组名+下标访问数组元素,数组下标从来0开始,数组通过下标访问任意元素的效率是非常高的。因为元素所占的空间是确定的,首地址也是确定的。
数组初始化:
  1. 静态初始化:指定每个数组元素的初始值,由系统决定数组长度。
  2. 动态初始化:指定长度,由系统为数组赋默认值(0);
静态初始化例子:
int[] ints = new int[]{1,2,3,4,5,6,7};
声明和赋值 可以分开进行。
int[] ints;
ints = new int[]{1,23,5,5,6,7};

动态初始化例子:
例如:int[] array = new int[10];
动态初始化,声明数组变量 和 赋值(申请空间)可以分开进行。
动态初始化需要使用new 关键字。

常会出现的异常信息:
java.lang.ArrayIndexOutOfBoundsException:N (数组索引越界异常)

数组在内存中:

引用类型数组:

数组元素是引用。在没有初始化时,默认每个元素的值时null。

初始化:也分为动态和静态。
静态:Student[] s = new Student[]{new Student(),new Student()};
动态:Student[] s = new Student[2];

多维数组:
从数组底层的运行来看没有多维数组,本质上还是引用类型数组, 数组也是一种引用类型。
代码实例:

浮点数转换成人民币读法
import org.jetbrains.annotations.NotNull;import java.util.Arrays;/** * Created by Chenxp on 2017/7/21. */public class Num2Rmb {    private String[] hanArr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};    private String[] unitArr = {"十", "百", "千", "万", "十万"};    private String[] rmb = {"角", "分"};    @NotNull    private String[] divide(double num){        long zheng = (long)num;        long xiao = Math.round((num - zheng) * 100);        String xiaoStr = "";        if(xiao < 10){            xiaoStr += "0" + String.valueOf(xiao);        }        return new String[]{zheng + "", xiaoStr};    }    private String toHanStr(String numStr){        String result = "";        int numLen = numStr.length();        boolean flag = false;        System.out.println(numStr);        for(int i = 0; i < numLen; i ++){            int num = numStr.charAt(i) - 48;            if(num == 0 && i == 0){                return "零";            }            if(i < numLen - 1 && num + (numStr.charAt(1 + i) - 48) == 0){                continue;            }            if(num == 0 && i == numLen - 1){                break;            }            if(i != numLen - 1 && num != 0){                result += hanArr[num] + unitArr[numLen - 2 - i];            }else{                result += hanArr[num];            }        }        return result + "元";    }    public String addUnit(String xiao){        String result = "";        int xiaoLen = xiao.length();        for(int i = 0; i < xiaoLen; i ++){            int num = (int)(xiao.charAt(i) - 48);            if(num == 0){                continue;            }            result = result + hanArr[(xiao.charAt(i) - 48)] + rmb[i];        }        return result;    }    public static void main(String[] args){        Num2Rmb nr = new Num2Rmb();        String[] numStr = nr.divide(2378.02);        System.out.println(numStr[0] + "," + numStr[1]);        System.out.println(nr.toHanStr(numStr[0]) + nr.addUnit(numStr[1]));    }}