Java语法掌握:打好编程基础的关键(二)https://developer.aliyun.com/article/1480872
do/while 循环
至少执行一次
int i = 10; do { // 循环内容 System.out.println(i); // 更新循环条件 i++; } while (i < 10);
多重选择:switch 语句
在处理多个选项时,使用 if/else 结构显得有些笨拙。
switch 语句将从与选项值相匹配的 case 标签处开始执行直到遇到 break 语句,或者执行到 switch 语句的结束处为止。如果没有相匹配的 case 标签,而有 default 子句,就执行这个子句。
case 标签可以是:
- 类型为 char、 byte、 short 或 int 的常量表达式。
- 枚举常量。
- 从 Java SE 7 开始,case 标签还可以是字符串字面量。
**有可能触发多个 case 分支。如果在 case 分支语句的末尾没 break 语句,那么就会接着执行下一个 case 分支语句。**这种情况相当危险,常常会引发错误。
int i = 3; switch (i) { case 1: System.out.println("这是1"); break; case 2: System.out.println("这是2"); break; case 3: System.out.println("这是3"); break; default: System.out.println("这是默认"); break; }
大数值
如果基本的整数和浮点数精度不能够满足需求,那么可以使用 java.math 包中的两个很有用的类:Biglnteger 和 BigDecimal。这两个类可以处理包含任意长度数字序列的数值。Biglnteger 类实现了任意精度的整数运算,BigDecimal 实现了任意精度的浮点数运算。
注意的是,不能使用+ - * / 来处理运算,而是需要使用它们提供的API。
Biglnteger
BigDecimal
使用 BigDecimal 的 divide 方法进行除法运算的时候,需要指定小数位的取舍方式( rounding mode )。
RoundingMode.HALF_UP 是在学校中学习的四舍五入方式。它适用于常规的计算。
默认保留一位小数,如果想指定保留小数位,可以参考下面
BigDecimal value = d2.divide(d1, 2, RoundingMode.HALF_UP);
提供的其他的取舍方式还有:
方式 | 描述 |
RoundingMode.UP | 向远离 0 的方向舍入。保留两位小数为例: 1.371 -> 1.38 -1.371 -> -1.38 |
RoundingMode.DOWN | 向靠近 0 的方向舍入。保留两位小数为例: 1.371 -> 1.37 -1.371 -> -1.37 |
RoundingMode.CEILING | 全向右靠,向大靠拢。保留两位小数为例: 1.371 -> 1.38 -1.371 -> -1.37 |
RoundingMode.FLOOR | 跟 CEILING 相反,全向左靠,向小靠拢。保留两位小数为例: 1.371 -> 1.37 -1.371 -> -1.38 |
RoundingMode.HALF_UP | 四舍五入。保留两位小数为例: 1.375 -> 1.38 -1.371 -> -1.37 |
RoundingMode.HALF_DOWN | 五舍六入。保留两位小数为例: 1.375 -> 1.37 1.376 -> 1.38 |
RoundingMode.HALF_EVEN | - |
RoundingMode.UNNECESSARY | - |
数组
数组是一种数据结构,用来存储同一类型值的集合。**通过一个整型下标可以访问数组中的每一个值。**例如,如果 a 是一个整型数组,a[i] 就是数组中下标为 i 的整数。
int[] a = new int[100];
创建了一个可以存储 100 个整数的数组。索引从 0-99,试图访问元素 a[100](或任何在 0~99之外的下标),程序就会引发 “array index out of bounds” 数组下标越界异常而终止执行。
要想获得数组中的元素个数,可以使用 array.length
有个更加简单的方式打印数组中的所有值,即利用 Arrays 类的 toString 方法。调用 Arrays.toString(a)
返回一个包含数组元素的字符串,这些元素被放置在括号内,并用逗号分隔,例如,“[2,3,5,7,11,13]”
声明数组有两种方式,int[] a
和 int a[]
,但是推荐使用第一种!
- 数字数组,所有元素都初始化为 0
- boolean数组的元素会初始化为false
- 对象数组的元素则初始化为一个特殊值null,这表示这些元素未存放任何对象。
数组的初始化以及匿名数组
int[] array = { 2 , 3, 5 , 7, 11, 13 }; int[] array = new int[] { 17, 19, 23, 29, 31, 37 }
在 Java 中,允许数组长度为 0。
数组的复制
在 Java 中,允许将一个数组变量拷贝给另一个数组变量。这时,两个变量将引用同一个数组。
int[] array1 = {1,2,3,4,5} int[] array2 = array1 array2[0] = -1
由于两个引用指向了同一个变量,那么 array1[0] 的值也就发生的变化。
如果想实现完全的复制出单独一份数组的话,需要使用 Arrays.copyOf 方法:
int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers, luckyNumbers.length);
第 2 个参数是新数组的长度。这个方法通常用来增加数组的大小。
数组的排序
要想对数值型数组进行排序,可以使用 Arrays 类中的 sort 方法,这个方法使用了优化的快速排序算法。
int[] a = new int[10000]; Arrays.sort(a);
多维数组
double[][] balances = new double[5][5]; int[][] magicSquare = { {1, 2, 3, 4}, {1, 2, 3, 4, 5, 6}, {1, 2, 3, 4, 5, 6, 7}, {1, 2, 3, 4}, };
一但数组被初始化,就可以利用两个方括号访问每个元素,例如,balances[i][j]。
Java 还可以方便地构造一个“不规则“数组,即数组的每一行有不同的长度。
常用API
笔记大部分摘录自《Java核心技术卷I》,含有少数本人修改补充痕迹。