Content
学习链接:廖雪峰的官方网站里的Java教程.
Java快速入门
-
JSR 规范,Java Specification Request;Java 规范要求
JCP 组织,Java Community Process;Java 社区进程 -
RI,Reference Implementation;参考实现
TCK,Technology Compatibility Kit;技术兼容包 -
IDE,Integrated Development Environment;集成开发环境
-
Java入口程序规定的方法必须是静态方法,方法名必须为main,括号内的参数必须是String数组
-
类,好的命名,首字母大写
方法,好的命名,首字母小写 -
特殊的多行注释,以
/**
开头,以*/
结束
写在类和方法的定义处,可以用于自动创建文档 -
快捷键
Ctrl + Shift + F
,格式化代码 -
变量的一个重要特点是可以重新赋值 原有的值被覆盖
-
一个字节8位,二进制表示范围从
00000000 ~ 11111111
,换算成十进制是0 ~ 255
,换算成十六进制是00 ~ ff
-
Java只定义了带符号的整型;最高位是符号位
-
因为小数用科学计数法表示的时候,小数点是可以“浮动”的,所以称为浮点数
-
float 类型可最大表示3.4x1038,而 double 类型可最大表示1.79x10308
-
Java 语言对布尔类型的存储并没有做规定,因为理论上存储布尔类型只需要1 bit,但是通常JVM内部会把 boolean 表示为4字节整数
-
Java的 char 类型除了可表示标准的ASCII码外,还可以表示一个Unicode字符
-
常量的作用是用有意义的变量名来避免魔术数字 (Magic number)
常量名通常全部大写 -
用 var 定义变量,只是少写了变量名
-
语句块,
{}
-
定义变量时,要遵循作用域最小化原则,尽量将变量定义在尽可能小的作用域 20.3.1
-
整数运算永远是精确的
除数为 0 时 运行时将报错,但编译不会报错
溢出不会出错,却会得到一个奇怪的结果(超出 int 范围) -
n++ 表示先引用 n 再加 1
-
不带符号的右移运算,使用 >>>,它的特点是符号位跟着动
对 byte 和 short 类型进行移位时,会首先转换为 int 再进行位移
左移实际上就是不断地 ×2,右移实际上就是不断地 ÷2 -
对两个整数进行位运算,实际上就是按位对齐,然后依次对每一位进行运算
按位与运算实际上可以看作两个整数表示的 IP 地址10.0.17.77
和10.0.17.0
,通过与运算,可以快速判断一个 IP 是否在给定的网段内 -
超出范围的强制转型会得到错误的结果,因为高位字节直接被扔掉了
-
浮点数不能做位运算和移位运算;浮点数常常无法精确表示
十进制的 0.1 换算成二进制是一个无限循环小数
0.5 这个浮点数却可以精确地表示 -
比较两个浮点数是否相等,正确的比较方法是判断两个浮点数之差的绝对值是否小于一个很小的数
Math.abs(x - 0.1) < 0.00001
- 浮点数运算在除数为 0 时,不会报错,但会返回几个特殊值
NaN、Infinity、-Infinity·
-
浮点数强制转型为整数,小数部分会被丢掉;若溢出,返回整型的最大值
-
如果一个布尔运算的表达式能提前确定结果,则后续的计算不再执行,直接返回结果;(短路运算)
-
三元运算符中,x 和 y 的类型必须相同;因为返回值是二者之一 20.3.2
-
因为Java在内存中总是使用Unicode表示字符,
所以,一个英文字符和一个中文字符都用一个char类型表示,它们都占用两个字节 -
Java的编译器对字符串做了特殊照顾,可以使用 + 连接任意字符串和其他数据类型
-
字符串不可变
-
引用类型的变量可以指向一个空值null,它表示不存在,即该变量不指向任何对象
-
数组一旦创建后,大小就不可改变
数组是引用类型 -
不推荐 省略 if 语句块的花括号 的写法
-
判断引用类型是否指向同一个对象,用
==
判断其内容是否相等,用equals()
为避免空指针异常 NullPointException:
s1 != null && s1.equals("hello")
- 当所有 case 都不匹配后,执行 default (最好写上)
Java 12 后,新的switch语法,不但不需要break,还可以直接返回值
case "mango" -> {
System.out.println("Selected mango");
System.out.println("Good choice!");
}
//分隔
int opt = switch (fruit) {
case "apple" -> 1;
case "pear", "mango" -> 2;
default -> {
int code = fruit.hashCode();
yield code; // switch语句返回值
}
}; // 注意赋值语句要以;结束
-
for 循环的功能非常强大,它使用计数器实现循环,计数器变量通常命名为 i
for 循环会先初始化计数器,然后,在每次循环前检测循环条件,在每次循环后更新计数器 -
for each 循环的变量 n 不再是计数器,而是直接对应到数组的每个元素,迭代
但是无法拿到数组元素的索引 -
对于数组,有
toString()
和sort()
两个常用方法
多维数组就是数组里面嵌套数组
//a, b交换值
a = a + b;
b = a - b;
a = a - b;
- 命令行参数,类型是
String[]
字符数组,由JVM接收 用户输入 并传给 main 方法;
End.