Java 自学笔记 Oct-26
首先说明学Java之前我一直是用C++的…其次说明这些笔记只标注我觉得需要注意的…
自学的教材用的是Java核心技术(卷1)
1.Java不存在unsigned类型。
2.Java用final来表示常量,如果希望在其他类中访问,请声明为public static final类常量。
3.通常浮点运算时会扩展精度(视机器而定),而在最后输出时截断,如果需要严格的浮点运算(过程中截断),请将方法声明为strictfp类型的,如public static strictfp void main(可能产生数值溢出)。
4.>>>用0填充高位,>>用符号位填充高位,没有<<<运算符。
5.1<<3和1<<35是等价的,1L<<3和1L<<67是等价的。原因在于int类型左移的操作数会对32取模,long类型左移的操作数会对64取模。
6.Math库导入的时候利用静态导入:
import static java.lang.Math.*;
其中包括的函数有sin,cos,tan,atan,atan2,exp,log,pow,sqrt等等。以及定义了两个常量Math.PI和Math.E
如果不在意运行速度而更在意运行精度的话,请使用StrictMath类。
7.隐式转换的优先级为double,float,long,int
8.对浮点数进行舍入计算可以使用Math.round()函数,但是请注意返回值的类型为long。
9.截断后如果超出该类型的表示范围可能会进行取模操作,如对300.00转换为byte类型结果可能是44。
10.尽可能避免boolean类型和其它类型的强制转换,如果真的需要,请使用(xxx?1:0)这样的方式进行转换(xxx表示boolean类型的变量)。
11.Java不再使用类似于C++中的逗号运算符。但是for循环的条件中依然可以使用逗号来分隔条件。
12.枚举类型的变量除了可以可以赋所枚举类型的值外,还可以赋值为null,表示未赋值。
例如:
enum Size { SMALL,MEDIUM,LARGE,EXTRA_LARGE };
Size s1 = Size.MEDIUM;
Size s2 = null;
13.String类的字符串不能直接修改某一位字符,但可以通过其他方式实现,如把"Hello"改成"Help!"
String str = "Hello";
str = str.substring(0,3) + "p!";
而substring操作的第二个参数不再是类似于C++中的截取长度,而是第一个不需要拷贝的字符的下标。
14.检测字符串是否相等请使用equals()方法(或者无视大小写的equalsIgnoreCase()方法)。调用==操作仅仅比较的是是否出自同一引用,实际上只有常量字符串是共享的,而substring或者拼接操作都会使==返回错误的结果。
类似于C语言中的strcmp函数,Java中有compareTo方法。调用方法如下:
if(a.compareTo(b) == 0)
15.对于String类型,length返回的是代码单元的数量。如果需要查代码点的数量,请使用codePointCount。
例如:
int codePointAmount = str.codePointCount(0,str.length());
而利用charAt(n)可以访问第n个代码单元。
如果需要访问第n个代码点,使用下面的代码:
int index = str.offsetByCodePoints(0,n);
int codePoint = str.codePointAt(index);
isSupplementaryCodePoint()可以判断一个代码点是否为辅助字符的第二部分。(注:原文中写的是codePointAt方法,疑似有误),若返回值为true则不是辅助字符的第二部分。
(至页码59.)
浙公网安备 33010602011771号