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