Java语法掌握:打好编程基础的关键(三)

简介: Java语法掌握:打好编程基础的关键

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[] aint 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》,含有少数本人修改补充痕迹。

相关文章
|
1天前
|
IDE Java 编译器
深入解析JAVA注解:元数据如何改变编程世界
【6月更文挑战第29天】Java注解,作为元数据机制,为代码增添上下文信息,改变编程方式。注解标记在类、方法等上,不直接影响执行,但为编译器等提供额外信息。分为元注解、编译时和运行时注解,用于元数据提供、代码简化、提高可读性及自动化。示例展示了定义`@Loggable`注解来标记日志记录方法。注解广泛应用于依赖注入、ORM、Web服务等,提升效率和灵活性,是现代Java开发的关键。未来其应用将更广泛。
12 3
|
1天前
|
Java 数据处理 调度
Java多线程编程入门指南
Java多线程编程入门指南
|
1天前
|
传感器 数据采集 监控
Java串口编程入门
Java串口编程入门
|
1天前
|
安全 Java 开发者
Java并发编程中的线程安全策略
在现代软件开发中,Java语言的并发编程特性使得多线程应用成为可能。然而,随着线程数量的增加,如何确保数据的一致性和系统的稳定性成为开发者面临的挑战。本文将探讨Java并发编程中实现线程安全的几种策略,包括同步机制、volatile关键字的使用、以及java.util.concurrent包提供的工具类,旨在为Java开发者提供一系列实用的方法来应对并发问题。
8 0
|
1天前
|
监控 Java UED
Java并发编程:深入理解线程池的设计与应用
本文旨在通过数据导向和科学严谨的方式,深入探讨Java并发编程中的关键组件——线程池。文章首先概述了线程池的基本概念与重要性,随后详细解读了线程池的核心参数及其对性能的影响,并通过实验数据支持分析结果。此外,文中还将介绍如何根据不同的应用场景选择或设计合适的线程池,以及如何避免常见的并发问题。最后,通过案例研究,展示线程池在实际应用中的优化效果,为开发人员提供实践指导。
9 0
|
2天前
|
存储 安全 Java
JAVA泛型:为何它是编程界的“安全卫士”?
【6月更文挑战第28天】Java泛型增强了代码复用、可读性和类型安全。它们引入类型参数,允许在编译时检查类型,防止运行时异常。例如,泛型ArrayList防止了不兼容类型的添加,而泛型方法和类减少了重复代码。示例展示了泛型类`Box&lt;T&gt;`、泛型方法`printArray&lt;T&gt;`和泛型接口`Printer&lt;T&gt;`的使用,强调了泛型在确保类型安全和灵活性方面的价值。
|
2天前
|
存储 缓存 Java
Java并发编程之线程池的使用
Java并发编程之线程池的使用
|
2天前
|
监控 安全 算法
如何有效地处理Java中的多线程
如何有效地处理Java中的多线程
|
2天前
|
Java 调度
Java多线程编程与并发控制策略
Java多线程编程与并发控制策略
|
2天前
|
安全 算法 Java
java多线程面试题2019整理
java多线程面试题2019整理