没有特殊说明, 我的所有这个系列的 Java13 的笔记都是从廖老师那里摘抄, 总结过来的, 侵删
兜兜转转到了大四, 学过了 C,C++,C#,Java,Python, 学一门丢一门, 到了最后还是要把 Java 捡起来. 虽然 Python 好写舒服, 但是毕竟不能完全面向对象, 也没有那么多的应用场景, 所以, 奉劝看到本文的各位, 还是提前学好 C# 或者 Java, 话不多说, 这个系列, 干就完了!
输出
println 是 print line 的缩写, 表示输出并换行. 因此, 如果输出后不想换行, 可以用 print()
格式化输出使用 System.out.printf(), 通过使用占位符 %?,printf()可以把后面的参数格式化成指定格式
由于 % 表示占位符, 因此, 连续两个 %% 表示一个 % 字符本身.
占位符 | 说明 |
---|---|
%d | 格式化输出整数 |
%x | 格式化输出十六进制整数 |
%f | 格式化输出浮点数 |
%e | 格式化输出科学计数法表示的浮点数 |
%s | 格式化字符串 |
输入
导入 java.util.Scanner, 创建 Scanner 对象并传入 System.in,Scanner 会自动转换数据类型, 因此不必手动转换
if 判断
当 if 语句块只有一行语句时, 可以省略花括号{}, 但是尽量不要省略花括号, 这样在版本控制系统的时候会出现问题.
串联多个 if 时正确的方式是按照判断范围从大到小依次判断, 或者从小到大判断, 不要从中间范围判断.
用 if 时, 还要特别注意边界条件,>和>= 是不同的.
注意判断浮点数相等用 == 判断不靠谱, 正确的方法是利用差值小于某一个临界值来判断.
判断引用类型相等
在 Java 中, 判断值类型的变量是否相等, 可以使用 == 运算符. 但是, 判断
引用类型的变量
是否相等,== 表示是否指向同一个对象, 却不表示对象的值是否相同.
要判断引用类型的变量值的内容是否相等, 必须使用 equals()方法
如果使用 equals()时其中一个变量是 null 那么会报错
NullPointerException
可以把一个一定不是 null 的变量放到前面 "hello".equals(s)
switch 多重选择
使用 switch 时, 注意 case 语句并没有花括号{}
如果有几个 case 语句执行的是同一组语句块, 可以在执行语句前多放几个 case
使用 switch 语句时, 只要保证有 break,case 的顺序不影响程序逻辑
使用 IDE 时, 可以自动检查是否漏写了 break 语句和 default 语句, 方法是打开 IDE 的编译检查.
switch 表达式
新语法使用 ->, 如果有多条语句, 需要用 {} 括起来, 不要写 break 语句
- public class Main {
- public static void main(String[] args) {
- String fruit = "apple";
- switch (fruit) {
- case "apple" -> System.out.println("Selected apple");
- case "pear" -> System.out.println("Selected pear");
- case "mango" -> {
- System.out.println("Selected mango");
- System.out.println("Good choice!");
- }
- default -> System.out.println("No fruit selected");
- }
- }
- }
新的 switch 语法, 不但不需要 break, 还可以直接返回值.
- public class Main {
- public static void main(String[] args) {
- String fruit = "apple";
- int opt = switch (fruit) {
- case "apple" -> 1;
- case "pear", "mango" -> 2;
- default -> 0;
- }; // 注意赋值语句要以; 结束
- System.out.println("opt =" + opt);
- }
- }
- yield
本来新的 switch 语句返回简单的值没有问题, 但是如果需要复杂的语句, 我们也可以写很多语句, 放到 {...} 里, 然后, 用 yield 返回一个值作为 switch 语句的返回值.
while 循环
当 while 循环是一个死循环, 但是, Java 的 int 类型有最大值, 达到最大值后, 再加 1 会变成负数, 结果, 意外退出了 while 循环.
do while 循环
for 循环
- for (初始条件; 循环检测条件; 循环后更新计数器) {
- // 执行语句
- }
使用 for 循环时, 千万不要在循环体内修改计数器!
为了保证变量应该把访问范围缩到最小的原则, 对于 for 循环中使用的 i 最好在循环体内定义.
for 循环还可以缺少初始化语句, 循环条件和每次循环更新语句
for each 循环
- public class Main {
- public static void main(String[] args) {
- int[] ns = { 1, 4, 9, 16, 25 };
- for (int n : ns) {// 注意形式, 先定义数组元素 n, 注意这里不再是计数器 n, 它对应着数组的每一个元素, 在循环的主语句中可以直接调用.
- System.out.println(n);
- }
- }
- }
除了数组外, for each 循环能够遍历所有 "可迭代" 的数据类型, 包括后面会介绍的 List,Map 等
break 和 continue
无论是 while 循环还是 for 循环, 有两个特别的语句可以使用, 就是 break 语句和 continue 语句.
break 语句总是跳出最近的一层循环.
来源: http://www.bubuko.com/infodetail-3395119.html