- Java 源文件的文件名称必须与公共类的名称相同
- main 方法必须声明为 public
- 8 种基本类型(priviate type),其中 4 种整型(整数),2 种浮点类型(有小数部分的数值),1 种用于表示 Unicode 编码的字符单元的字符类型 char,和 1 种用于表示真值的 boolean 类型
- 4 种整型:byte(1字节),short(2字节), int(4字节), long(8字节)。在 Java 中,整型的范围运行 Java 代码的机器无关
- long型数值后有一个后缀 L,十六进制数值有一个前缀0x或0X,八进制有一个前缀0,二进制有一个前缀0b/0 B
- 十进制表示中位上的数只能是 0123456789,八进制表示中位上的字只能是 01234567,二进制表示位上的字只能是 01,所以八进制的 010 对应八进制中的 8,而二进制的 0b1000 对应二进制中的 8,这个 8 是表示数值的大小,不是表示的位形式
- 2 种浮点型:float(4 字节),double(8 字节),绝大部分采用double类型,float类型有一个后缀 F/f,double类型有一个后缀 D/d
- 计算机是如何保存浮点类型的值的?(比如 -3.4,用二进制表示正数和小数分别为 -11.100,而 IEEE 浮点数的表示格式为 -1^s^ x 1.f x (2^e^ - 127),这里单精度浮点型的 8 个字节,其中s占 1 位,f占 23 位,e占 8 位,这样一共就占用32位,浮点数的范围可以用 IEEE 浮点数的表示格式算出。另外,操作系统在实现对浮点数存储和读取的时候,这套转换机制应该是已经嵌入了操作系统内核程序里面了。想知道更多?继续往后面学吧~)
- 上述 IEEE 的表示格式中,其中s为符号位,f为有效位,e为指数位。double型的浮点数的 IEEE 表示格式中,1 位符号位,52 位有效位,11 位指数位
- Double.isNan(x)
- 浮点型不适用与无法接受舍入误差的金融计算中,应该使用 BigDecimal 类
- char类型原本用于表示单个字符,但在现在的 Unicode字符,有的可以用一个char值描述,另外一些 Unicode 字符则需要两个char值。所以说char可以表示单个字符的时候,需要注意是相对于什么字符集
- '\u0000','\Uffff',\是char中的转义字符,表示十六进制。\b表示退格符,\t表示制表符,\n表示换行符,\r表示回车符,\"表示双引号,\'表示单引号,\\表示反斜杠\。特别注意 Unicode 的转义序列会在解析代码之前就得到处理,可能会产生意料之外的结果,比如注释中的 \u 可能会解析出换行符出来从而导致语法错误
- UTF-16 编码采用不同长度的编码表示所有 Unicode 码点(code point)。在基本的多语言级别中,每个字符用 16 位表示,通常称为代码单元(code unit)。在 Java 中,char类型描述了 UTF-16编码中的一个代码单元。强烈建议不要在程序中使用 char类型,除非确实需要处理 UTF-16 代码单元,最好讲字符串作为抽象数据类型处理
- Character.isJavaIdentifierStart(x), Character.isJavaIdentifierPart(x)可用来判断 Unicode 字符是否属于 Java 中的“字母”
- 整数被 0 除将会产生一个异常,浮点数被 0 除将会得到无穷大或 NAN 结果
- 在欧几里得规则里面有这样一条最优规则:余数总是要>=0,使用 Math.floorMod()方法可以在模数为正,被模数不管正负的情况下,都能得到正的余数
- 在运算结果比运行速度更重要的场景下,应该使用 StrictMatch 类,它使用“自由发布的 Math 库”实现算法以确保在所有平台上得到相同的结果
- Math.sqrt, Math.sin, Math.cos, Math.tant, Math.floorMod, Math.round
- 位运算中,int的右操作数要完成模32(4字节)的运算,如1<<35等同于 1<<3,即8
- 位运算和&& ||的提前短路不同,位运算不会提前短路
- Java 的移位运算符有>>>,但没有<<<,>>>与>>不同的是,使用0填充高位而不是使用1
- Java 字符串就是 Unicode 字符序列,x.substring[),String.join(),s.equals(t),比较字符串相等不能使用==,这只是比较地址是否相等而没有比较内容,但是内容相同的完全可以放在 2 个不同的地址上这时候用==就失效
- str.length() == 0,str.equals("") if (str == null)
- s.length()返回的是 UTF-16编码表示的给定字符串所需要的代码单元数量
- index = s.offsetByCodePoint(0, i),s.codePointAt(index),Character.isSupplementaryCodepoint(index) 判断是否是成对字节的码点
- int[] codePoints = str.codePoints().toArray(); String str = new String(codePoints, 0, codePoints.length); 得到int型的码点数组,然后使用 String 构建函数转换为字符串表示
- 所有的 String 都属于 CharSequence 类型
- 构建字符串使用 StringBuilder() 类的 .append() 方法,最后 builder.toString() 得到字符串。StringBuilder 的前身是 StringBuffer,StringBuffer 的效率稍有点低,但是允许以多线程的方式执行添加或删除字符的操作
- 读取输入使用 Scanner:Scanner in = new Scanner(System.in); String name = in.nextLine(); String firstName = in.next(); 输入密码使用 Console:Console cons = System.console(); String name = cons.readLine("User name: "); char[] passwd = cons.readPassword("Password: ");
- 日期与时间应使用java.time包的方法
- 读取文件,就使用 File 对象构造一个 Scanner 对象,Scanner in = new Scanner(Paths.get("myfile.txt", "UTF-8"));
- 要写入文件,就需要构造一个 PrintWriter 对象,PrintWriter out = new PrintWriter("myfile.txt", "UTF-8");
- while, do while, for, switch break, -Xlint:fallthrough, @SuppressWarnings("fallthrough"), continue
- BigInteger(实现了任意精度的整数运算), BigDecimal(实现了任意精度的浮点数运算),BigInteger.valueOf(), .add(), .multiply(), Java 不提供运算符重载功能(但确实为 String 的连接重载了+运算符)
- BigInteger add subtract multiply divide mod,BigDecimal add subtract multiply divide mode RoundingMode.HALF_UP(四舍五入)
- int[] a; int[] a = new int[100]; int[] a = new int[n]; 数组初始化后长度就不能变化,匿名数组new int[] {17, 19, 23, 29, 31, 37}; int[] a = {17, 19, 23, 29, 31, 37}; 数组长度可以为 0,new int[0],此时与数组为null是不同的
- Arrays.copyOf() 数组值拷贝,Arrays.sort(),Arrays.binarySearch(type[] a, type v)
- 快速打印二维数组 System.out.println(Arrays.deepToString(x));