1 数据类型
Java一共有8种数据类型:
-
4种整型
类型 | 存储需求 |
---|---|
int | 4字节 |
short | 2字节 |
long | 8字节 |
byte | 1字节 |
-
2种浮点型
类型 | 存储需求 |
---|---|
float | 4字节 |
double | 8字节 |
-
1种字符型
-
1种布尔型
2 变量声明
2.1 局部类型推断
如果可以从变量的初始值推断变量类型,只需要使用 var关键字,而无需指定类型
var salary = 7856.98 // salary is double
2.2 枚举类型
用关键字 enum 声明一个枚举类型
enum Size = {small, medium, big};
2.3 条件运算符
condition ? expression1 : expression2
如:
x = 8;
y = 3;
System.out.println(x < y ? x : y) // 输出3
2.4 运算符优先级
运算符 | 结合性 |
---|---|
[] . (方法调用) | --> |
! ~ ++ -- +(一元运算) -(一元运算) ()(强制类型转换) new | <-- |
* / % | --> |
+ - | --> |
<< >> >>> | --> |
< <= > >= instanceof | --> |
== != | --> |
& | --> |
^ | --> |
| | --> |
&& | --> |
|| | --> |
?: | <-- |
赋值 | <-- |
2.5 变量之间的转换
强制转换:
int a = (int)2.0;
实线箭头表示无精度损失的转换
虚线箭头表示可能有精度损失的转换
3 字符串
Java没有字符串类型,而是标准Java类库中提供了一个 String类,每个用双引号括起来的字符串都是String类的一个实例
但是String不允许修改,要修改就用 StringBuffer 和 StringBuilder
StringBuilder 字符串构建器(采用单线程操作)
StringBuffer 字符串缓冲器(采用多线程操作)
4 输入与输出
4.1 输入
常见的输入流:
-
标准输入流 System.in
-
文件输入流 FileInputStream
FileInputStream fileInputStream = new FileInputStream("example.txt");
Scanner scanner = new Scanner(fileInputStream);
-
网络链接输入流
Socket socket = new Socket("example.com", 80);
InputStream inputStream = socket.getInputStream();
Scanner scanner = new Scanner(inputStream);
-
字符串输入流 ByteArrayInputStream
String data = "Hello World";
byte[] bytes = data.getBytes();
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
Scanner scanner = new Scanner(byteArrayInputStream);
4.2 输出
格式化输出
System.out.printf("%8.2f", x); // 规定了输出的宽度为8个字符,精度为2个字符
转换字符:
转换字符 | 类型 |
---|---|
d | 十进制整数 |
x或X | 十六进制整数 |
o | 八进制整数 |
f或F | 定点浮点数 |
e或E | 指数浮点数 |
g或G | 通用浮点数(e和f中较短的一个) |
a或A | 十六进制浮点数 |
s或S | 字符串 |
c或C | 字符 |
b或B | 布尔 |
h或H | 散列码 |
% | 百分号 |
创建一个格式化的字符串,而不打印输出:
String message = String.format("name: %s age: %d", name, age);
5 分支
带标签的break:(相当于 go to)
标签还可以放在 if 上面,注意的是只能跳出代码块,而不能跳入
public static void main(String[] args) {
int i = 10;
int sum = 0;
label:
while (i > 0) {
for (int j = 1; j <= 10; j++) {
sum += j * i;
break label;
}
i--;
}
System.out.println(sum); // 10
}
switch 语句:
switch (choice)
{
case 1 ->
break ;
case 2 ->
break ;
default ->
}
6 数组拷贝
不能用 int[] a = b
的形式进行数组拷贝,这样 a 和 b 指向同一个数组,改变一个的同时另一个也变化 所以使用 Array 类的 copyOf 方法:
int[] a = Array.copyOf(b, b.length);