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月前
|
Java 程序员
Java编程中的异常处理:从基础到高级
在Java的世界中,异常处理是代码健壮性的守护神。本文将带你从异常的基本概念出发,逐步深入到高级用法,探索如何优雅地处理程序中的错误和异常情况。通过实际案例,我们将一起学习如何编写更可靠、更易于维护的Java代码。准备好了吗?让我们一起踏上这段旅程,解锁Java异常处理的秘密!
|
20天前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
24天前
|
算法 Java 调度
java并发编程中Monitor里的waitSet和EntryList都是做什么的
在Java并发编程中,Monitor内部包含两个重要队列:等待集(Wait Set)和入口列表(Entry List)。Wait Set用于线程的条件等待和协作,线程调用`wait()`后进入此集合,通过`notify()`或`notifyAll()`唤醒。Entry List则管理锁的竞争,未能获取锁的线程在此排队,等待锁释放后重新竞争。理解两者区别有助于设计高效的多线程程序。 - **Wait Set**:线程调用`wait()`后进入,等待条件满足被唤醒,需重新竞争锁。 - **Entry List**:多个线程竞争锁时,未获锁的线程在此排队,等待锁释放后获取锁继续执行。
61 12
|
21天前
|
存储 安全 Java
Java多线程编程秘籍:各种方案一网打尽,不要错过!
Java 中实现多线程的方式主要有四种:继承 Thread 类、实现 Runnable 接口、实现 Callable 接口和使用线程池。每种方式各有优缺点,适用于不同的场景。继承 Thread 类最简单,实现 Runnable 接口更灵活,Callable 接口支持返回结果,线程池则便于管理和复用线程。实际应用中可根据需求选择合适的方式。此外,还介绍了多线程相关的常见面试问题及答案,涵盖线程概念、线程安全、线程池等知识点。
112 2
|
1月前
|
安全 算法 Java
Java多线程编程中的陷阱与最佳实践####
本文探讨了Java多线程编程中常见的陷阱,并介绍了如何通过最佳实践来避免这些问题。我们将从基础概念入手,逐步深入到具体的代码示例,帮助开发者更好地理解和应用多线程技术。无论是初学者还是有经验的开发者,都能从中获得有价值的见解和建议。 ####
|
1月前
|
Java 调度
Java中的多线程编程与并发控制
本文深入探讨了Java编程语言中多线程编程的基础知识和并发控制机制。文章首先介绍了多线程的基本概念,包括线程的定义、生命周期以及在Java中创建和管理线程的方法。接着,详细讲解了Java提供的同步机制,如synchronized关键字、wait()和notify()方法等,以及如何通过这些机制实现线程间的协调与通信。最后,本文还讨论了一些常见的并发问题,例如死锁、竞态条件等,并提供了相应的解决策略。
57 3
|
1月前
|
开发框架 安全 Java
Java 反射机制:动态编程的强大利器
Java反射机制允许程序在运行时检查类、接口、字段和方法的信息,并能操作对象。它提供了一种动态编程的方式,使得代码更加灵活,能够适应未知的或变化的需求,是开发框架和库的重要工具。
57 4
|
存储 算法 Java
Java8语法最佳实践-什么是对象(上)
计算机革命起源机器。编程语言就像是那台机器。它不仅是我们思维放大的工具与另一种表达媒介,更像是我们思想的一部分。语言的灵感来自其他形式的表达,如写作,绘画,雕塑,动画和电影制作。编程语言就是创建应用程序的思想结构。
175 0
Java8语法最佳实践-什么是对象(上)
|
存储 安全 Java
Java8语法最佳实践-什么是对象(下)
计算机革命起源机器。编程语言就像是那台机器。它不仅是我们思维放大的工具与另一种表达媒介,更像是我们思想的一部分。语言的灵感来自其他形式的表达,如写作,绘画,雕塑,动画和电影制作。编程语言就是创建应用程序的思想结构。
104 0
|
8天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
46 17