public class FirstSample {
public static void main(String[] args) {
System.out.prinln("Hello, world!");
}
}
main方法必须声明为public,且是静态的(static)。System.exit方法。在Java中,有三种标记注释的方法:
///* *//** */在Java中,一共有8种基本类型,包括4整数型、2中浮点型、1中字符类型和1中布尔类型。
| 类型 | 存储需求 | 取值范围 |
|---|---|---|
int |
4字节 | -2147483648 ~ 2147483647 (正好超过20亿) |
short |
2字节 | -32768 ~ 32767 |
long |
8字节 | -9223372036854775808 ~ 9223372036854775807L |
byte |
1字节 | -128 ~ 127 |
float |
4字节 | 大约 ±3.40282347E+38F(有效位数为6~7位) |
double |
8字节 | 大约 ±1.79769313486231570E+308(有效位数15位) |
char |
2字节 | |
boolean |
1bit |
1_0000_0000。float类型的数值有一个后缀F或f。BigDecimal类。char类型描述了UTF-16编码中地一个代码单元。Character类的isJavaIdentifierStart和isJavaIdentifierPart方法来检验哪些Unicode字符属于Java中的“字母”。final指示常量。习惯上,常量名使用全大写。static final设置一个类常量,这个常量可以在该类的多个方法中使用。类常量的定义位于main方法的外部。如果同时声明为public,那么其他类的方法也可以使用这个方法。当参与/运算的两个操作数都是整数时,表示整数除法;否则,表示浮点数除法。
整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。
使用strictfp关键字标记的方法必须使用严格的浮点计算来生成可再生的结果。
Math类包含多种数学函数:
| 运算操作 | 方法 |
|---|---|
| 求平方根 | sqrt |
| 求整数余数 | floorMod |
| 三角函数 | sin、cos、tan、atan、atan2 |
| 常量 | PI、E |
数据类型之间的转换:

图中,实心箭头表示无信息丢失的转换,虚箭头表示可能有精度损失的转换。
两个数值进行二元操作时:
如果两个操作数中有一个是 double 类型, 另一个操作数就会转换为 double 类型。
否则, 如果其中一个操作数是 float 类型, 另一个操作数将会转换为 float 类型。
否则, 如果其中一个操作数是 long 类型, 另一个操作数将会转换为 long 类型。
否则, 两个操作数都将被转换为 int 类型。
强制类型转换:
double x = 9.9997;
int nx = (int) x;
对浮点数进行舍入运算,需要使用Math.round方法:
double x = 9.997;
int nx = (int) Math.round(x);
此时仍使用强制类型转换,是因为round方法返回的值为long类型。
不要在boolean类型与任何数值类型之间进行强制类型转换。如果确要转换,可以使用条件表达式b?1:0。
>>是算数移位(扩展符号位),>>>是逻辑移位(填充0),不存在<<<运算符。
Java中不适用逗号运算符。不过可以在for语句的第1部分和第3部分中使用逗号分隔表达式列表。
Java没有内置的字符串类型,而是在标准类库中提供了一个预定义类String。要想通过控制台进行输入,首先需要构造一个与“标准输入流”System.in关联的Scanner对象。
Scanner in = new Scanner(System.in);
之后可以使用nextLine、next、nextInt、nextDouble等方法读取输入数据。
Scanner类定义在java.util包中,使用时必须用import指令导入。
格式化输出使用System.out.printf()。
要想读取一个文件,需要构造一个Scanner对象:
Scanner in = new Scanner(Path.of("C:\\mydir\\myfile.txt"), StandardCharsets.UTF_8);
要想写入文件,就需要构造一个PrintWriter对象,如果文件不存在,则创建该文件。
PrintWriter out = new PrintWriter(Path.of("C:\\mydir\\myfile.txt"), StandardCharsets.UTF_8);
如果用一个不存在的文件构造一个Scanner,或者用一个无法创建的文件名构造一个PrintWriter,编译器会报出异常,并且认为这些异常比“被零除”异常更严重。
获取IDE中的程序启动目录:
String dir = System.getProperty("user.dir");Java中没有goto语句,但break语句可以带标签,可以利用它从内层循环挑出。标签必须放在希望跳出的最外层循环之前,并且必须紧跟一个冒号。
使用break语句的代码,需要检测循环是正常结束,还是由break跳出。
for语句的3个部分应该对同一个计数器变量进行初始化、检测和更新。
java.math包中的两个类BigInteger和BigDecimal,可以处理包含任意长度数字序列的数值。声明数组
int[] a = new int[100]; // 数组长度可以是变量
int[] smallPrimes = {2, 3, 5, 7, 11, 13, }; // 最后一个值后面允许有逗号,方便继续添加
smallPrimes = new int[] {17, 19, 23, 29, 31, 37, }; // 使用匿名数组重新初始化一个数组而无须创建新变量
int[] a = new int[0]; // java中允许长度为0的数组
int[] b = new int {};
如果经常扩展数组的大小,应该使用数组列表(array list)。
创建一个数字数组时,所有元素都初始化为0。boolean数组的元素会初始化为false。对象数组的元素会初始化为一个特殊值null。
越界访问数组会引发array index out of bounds异常。
for each循环:
for (int element : a)
System.out.println(element);可以利用Arrays类的toString方法,将数组转换为字符串,然后打印。
int[] luckyNumbers = smallPrimes; // 两个变量将引用同一个数组
int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers, luckyNumbers.length); // 拷贝到一个新的数组
luckyNumbers = Arrays.copyOf(luckyNumbers, 2 * luckyNumbers.length); // 增加数组大小每一个Java应用程序都有一个带String args[]参数的main方法。注意程序名并没有存储在args[]数组中。
Arrays类中的sort方法使用优化的快速排序算法。
Math.random方法将返回一个0到1之间(包含0、不包含1)的随机浮点数。
Java中可以使用多维数组,和不规则数组。多维数组实际被解释为“数组的数组”。
int[][] a = new int[3][6]; // 二维数组
for (int[] row : a) // for each 打印二维数组
for (int value : row)
{}
System.out.println(Arrays.deepToString(a)); // 快速实现打印多维数组原文:https://www.cnblogs.com/harr/p/12416911.html