一个Java源码只能定义一个public类型的class,并且class名称和文件名要完全一致。
使用javac可以将.java源码编译成.class字节码。
使用java可以运行一个已编译的Java程序,参数是类名。
Java提供了两种变量类型:基本类型和引用类型。
基本类型包括整型,浮点型,布尔型,字符型。
变量可重新赋值,等号是赋值语句,不是数学意义的等号。
常量在初始化后不可重新赋值,使用常量便于理解程序意图。
整数运算的结果永远是精确的。
运算结果会自动提升。
可以强制转型,但超出范围的强制转换会得到错误的结果。
应该选择合适范围的整型(int 或 long),没有必要为了节省内存而使用byte 和short进行整数运算。
浮点数常常无法精确表示,并且浮点数的运算结果可能有误差;
比较两个浮点数通常比较他们的绝对值之差是否小于一个特定值;
整型和浮点型运算时,整型会自动提升为浮点型;
可以将浮点型强制转为整型,但超出范围后将始终返回整型的最大值。
与运算和或运算是短路运算;
三元运算 b ? x : y后面的类型必须相同,三元运算也是“短路运算”,只计算x或y。
Java的字符类型char是基本类型,字符串类型String是引用类型;
基本类型的变量是“持有”某个数值,引用类型的变量是“指向”某个对象;
引用类型的变量可以是空值null;
要区分空值null和空字符串""。
数组是同一数据类型的集合,数组一旦创建后,大小就不可变;
可以通过索引访问数组元素,但索引超出范围将报错;
数组元素可以是值类型(如int)或引用类型(如String),但数组本身是引用类型。
Java提供的输出包括:System.out.println() / print() / printf(),其中printf()可以格式化输出;
Java提供Scanner对象来方便输入,读取对应的类型可以使用:scanner.nextLine() / nextInt() / nextDouble() / …
if … else 可以做条件判断,else是可选的。
不推荐省略花括号{}。
多个if … else 串联要特别注意判断顺序。
要注意 if 的边界条件。
要注意浮点数判断相等不能直接用“==”运算符。
引用类型判断内容相等要使用equals(),注意避免NullPointerException。
switch语句可以做多重选择,然后执行匹配的case语句后续代码。
注意千万不要漏写break,建议打开fall-through警告。
总是写上default,建议打开missing default警告。
switch的计算结果必须是整型、字符串或枚举类型。
从Java 13开始,switch语句升级为表达式,不再需要break,并且允许使用yield返回值。
while循环先判断循环条件是否满足,再执行循环语句。
while循环可能一次都不执行。
编写循环时要注意循环条件,并避免死循环。
do while循环先执行循环,再判断条件。
do while循环会至少执行一次。
for循环通过计数器可以实现复杂循环。
for each循环可以直接遍历数组的每个元素。
最佳实践:计数器变量定义在for循环内部,循环体内部不修改计数器。
break语句可以跳出当前循环。
break语句通常配合if,在满足条件时提前结束整个循环。
break语句总是跳出最近的一层循环。
continue语句可以提前结束本次循环。
continue语句通常配合if,在满足条件时提前结束本次循环。
遍历数组可以使用for循环,for循环可以访问数组索引,for each循环直接迭代每个数组元素,但无法获取索引。
使用Arrays.toString()可以快速获取数组内容。
常用的排序算法有冒泡排序、插入排序和快速排序等;
冒泡排序使用两层for循环实现排序;
交换两个变量的值需要借助一个临时变量;
可以直接使用Java标准库提供的Arrays.sort()进行排序;
对数组排序会直接修改数组本身。
二维数组就是数组的数组,三维数组就是二维数组的数组。
多维数组的每个数组元素长度都不要求相同。
打印多维数组可以使用Arrays.deepToString()。
最常见的多维数组是二维数组,访问二维数组的一个元素使用array[row][col]。
命令行参数类型是String[]数组;
命令行参数有JVM接收用户输入并传给main方法;
如何解析命令行参数需要由程序自己实现。
原文:https://www.cnblogs.com/kuaie/p/12797822.html