1.java的术语
jdk jre se ee me
过时术语j2(以后都叫java) sdk(jdk)
2. 安装jdk在windows环境下建议安装在不带空格和中文的路径下。
命令行中运行java文件,要想保存错误日志,可以使用符号 > >& 2> 例如: javac Welcome.java2>error.txt
3.java的main方法必须是static的(java虚拟机规范没有规定,但是jdk强制必须这样),main方法正常执行的话java应用程序退出代码为0,如果想以其他代码退出,执行System.exit(0);
4. java中的所有数值类型占据的字节数与具体平台无关,所以java是可以跨平台的。
java中没有任何无符号类型。
Double.NEGATIVE_INFINITY; Double.POSITIVE_INFINITY; Double.isInfinite(v); Double.NaN; Double.isNaN(v);
浮点数不适用于禁止出现误差的金融计算中,二进制中无法准确的表示1/10。这时就应该使用bigDecimal、bigInteger。
对于double来说,由于计算机的寄存器位数不同,有的可能产生的中间计算结果的也不同,默认java虚拟机允许将中间结果采用扩展的精度,但是对于stricfp标记的方法必须采用严格的浮点计算。如果是类标记为strictfp,那么类中的所有方法都要采用严格的浮点计算。
5.java采用16位的unicode字符集。2的16次方等于65536,遗憾的是unicode字符发展到现在已经超过了65536个,所以16位的char类型已经不足以描述所有的unicode字符了。
java为了解决此问题,从5.0开始,使用代码点和代码单元来解决此问题。
代码点:编码表中的字符对应的代码值,unicode标准中采用16进制书写。
分17个代码级别:
第一个级别为基本的多语言级别(U+0000--U+FFFF)65536个(0-65536)。
第二个级别为16个附加级别(U+10000--U+10FFFF),65536*16个(65536---65536*17)
代码单元: 基本多语言级别中,每个字符用16位表示,被称为代码单元。而辅助字符需要连续的两个代码单元来进行编码。
对于每一个代码单元,可以清楚地判断他是基本多语言级别(也就是一个字符,一个代码点),还是辅助字符的第一部分或者第二部分。
java中,char使用utf-16来编码一个代码单元。强烈建议不要在程序中使用char类型,除非确实需要对utf-16代码单元进行操作。
char类型是使用utf-16来编码的代码点的一个代码单元,基本语言级别使用一个代码单元就能表示,而辅助字符却需要连续的两个代码单元才能表示。
6.整型和布尔型之间不能相互转换。
变量名需要以字母开头的,由字母和数字构成的序列。
字母包括a-z、A-Z _ (下划线)或在某种语言中代表字母的任何unicode字符。
Character.isJavaIdentifierStart和isJavaIdentifierPart可以用来判断是否是java中的字母,是否可以用作变量的开头或部分。
7.无符号右移>>>用0填充高位,带符号右移>>用符号位填充高位。没有<<<操作。
对移位右移运算参数需要进行求模操作,然后再移位。对于int进行模32操作,对于long进行模64操作。
引入Math类 impot static java.lang.Math.
但是如果为了确保所有平台上结果都一样的话,就是说如果为了保持一致的课预测的结果的话,需要使用StrictMath类。
8.substring的第二个参数表示不想复制的第一个位置(貌似java方法都是如果)
substring还有一个工作优点:容易计算子串的长度。substring(a,b),那么子串长度是 b-a .
String是不可变字符串(final),java设计者认为字符串共享带来的高效率远远胜于提取、拼接字符串带来的低效率。
比较两个字符串是否相等使用equal而非==,因为只有字符串常量是共享的,而substring得到的结果并不是共享的。
1.new出来的String是重新分配内存,字符串不共享,new出来的多个之间也不共享。
2.通过字符串函数操作拼接或者截取到的字符串跟静态字符串变量也是不共享的。
3.通过加号得到的字符串有两种情况。
A "he"+"llo"是静态字符串,是共享的(原因是编译时就确定的静态字符串)
B String a = "He"; a+"llo"不是静态字符串,是不共享的
String每次拼接或截取等操作都会产生一个新的String,效率很低,这时可以使用StringBuffer和StringBuilder,或者速度优于于前者,因为前者是同步的线程安全的,后者是非线程安全的,所以单线程是使用后者。