1.数据类型
2.运算符
3.字符串
4.控制流程
5.数组
类型 | 存储需求 | 取值范围 |
---|---|---|
int | 4字节 | -2147483648-2147483647 |
short | 2字节 | -32768-32767 |
long | 8字节 | -9223372036854775808-9223372036854775807 |
byte | 1字节 | -128-127 |
2.0-1.1
会打印0.8999999999999999
而不是期望的0.9,这是因为浮点数采用二进制表示,而在二进制系统中无法精确表示分数1/10类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4字节 | 大约 ± 3.40282347 ∗ 1 0 38 \pm3.40282347*10^{38} ±3.40282347∗1038 |
double | 8字节 | 大约 ± 1.79769313486231570 ∗ 1 0 308 \pm1.79769313486231570*10^{308} ±1.79769313486231570∗10308 |
\u0000-\uFFFF
if(x=0){
... // 该代码在C++中不会报错,在Java中会报错,因为x=0不能转换为布尔值
}
System.out.println(10.0 / 0); // Infinity
System.out.println(10 / 0); // 报错
System.out.println(1000000000 * 3); // -1294967296
System.out.println(Math.multiplyExact(1000000000, 3)); // 报错
数据类型之间的转换:
int n = 123456789;
float f = n;
System.out.println(f); // 1.23456792E8
double x = 9.01;
int k = (int)x;
System.out.println(k); // 9
System.out.println((byte) 270); // 截断为14
int x = 4;
x += 3.5; // 相当于x = (int)x+3.5
System.out.println(x); // 输出7
位运算符:
&&
和||
是短路运算符:如果第一个操作数已经确定表达式的值,第二个操作数无需计算$
和|
不采用短路方式求值,如果应用在布尔值上就得到布尔值,应用在整数中就得到整数值boolean a = false;
boolean b = true;
System.out.println(a & b); // false
int a = 0b001;
int b = 0b010;
System.out.println(a | b); // 3(即0b011)
>>>
会用0填充高位(>>
使用符号填充高位),不存在<<<
运算符“”
是一个Java对象,它具有自己的长度(0)和内容(空)。同时String
变量还可以存储null
,表示目前没有和任何对象关联CharSequence
接口,所以以CharSequence
接口作为形参时可以传入String
类型作为实参nextLine
方法读取下一行输入,next
方法读取下一个单词(以空白符为分隔符){
int i;
{
int a;
int i; // 报错
}
}
for(double x = 0; x != 10; x += 0.1){
System.out.println("float存在误差"); // 一直打印
}
switch
的使用在不同的JDK版本是有区别的:
switch
分为表达式和语句,对于Java11及之前的版本而言,只有语句,而在Java14中可以使用表达式:String name = "psj";
// switch语句
int demo = 1;
switch (name) {
case "psj": // 注意case后面不能写一个范围,而是一个具体的值
demo = 2;
break;
default :
demo = 3;
break;
}
// switch表达式(Java14才能使用->)
int demo = switch(name){
case "psj" -> 2;
default -> 1; // 不能写为return 1
}
case
可以使用逗号将多个字符串分隔:String s = "";
switch(s){
case "psj", "psj2" -> ...
}
在Java中可以使用带标签的break
(类似goto
):
int a = 0, b = 0;
read_data: // 此时while为带标签的语句块,如果满足if(b == 100)就会跳转到带标签的语句块末尾
while (a < 100) {
a++;
b += 50;
if (b == 100) {
break read_data;
}
}
System.out.println(a); // 3
System.out.println(b); // 100
new int[0]
或 new int[]{}
可以创建长度为0的数组,并且长度为0不等于null
要使用forEach
循环必须是一个数组或者是实现了Iterable
接口的对象
Java中可以将数组变量拷贝到另一个数组变量(即两个变量引用同一个数组)
int[] a = {1,2};
int[] b = a;
b[0] = 3;
System.out.println(a[0]); // 3
System.out.println(b[0]); // 3
main
方法中常见的String[] args
的含义如下:在命令行输入:java Test -g a b
agrs[0]:"-g" agrs[1]:"a" agrs[2]:"b"
Arrays.deepToString(xxx)
int[][] a = {{1, 2}, {2, 3}};
System.out.println(Arrays.deepToString(a)); // [[1, 2], [2, 3]]
int[][] a = new int[10][]
类名必须以字母开头(可以使用$
和_
开头,但是标准命名是以大写字母开头,如果名称有多个单词组成则每个单词首字母大写),后面可以跟字母和数字的任意组合(也可以使用$
和_
,但是没有意义),长度没有限制,但是不能使用Java保留字
作为变量名的标识符由字母(可以是某种语言中表示字母的任意Unicode
字符)、数字(表示数字的Unicode
字符也可)、货币符号($、¥
等)和标点连接符(_
和波浪线等)
从Java10开始,如果可以从变量的初始值推断变量类型,则不需要声明类型,使用var即可:
var a = 10;
final
表示该变量只能被赋值一次,赋值后就不能更改,并且全部使用大写表示
在java.math
包中,BigInteger
类实现任意精度的整数运算,BigDecimal
实现任意精度的浮点数运算,这两个类都可以处理包含任意长度数字序列的数值