1. 注释
1)单行注释:从//开始到本行结尾
2)长篇注释:/*开始,*/结束
3)文档注释:/**开始,*/结束,可以用来自动生成文档
2)长篇注释:/*开始,*/结束
3)文档注释:/**开始,*/结束,可以用来自动生成文档
2. 数据类型
1)整数
int(4) short(2) byte(1) long(8)[以L结尾]
int(4) short(2) byte(1) long(8)[以L结尾]
2)浮点
float(4)[有效位7,以F结尾] double(8)[有效位15]
三个特殊的浮点数值:
正无穷大(Double.POSITIVE_INFINITY)
负无穷大(Double.NEGATIVE_INFINITY)
Double.NaN(0/0或者负数的平方根结果为NaN),Double.isNaN(double num)判断是否是NaN
float(4)[有效位7,以F结尾] double(8)[有效位15]
三个特殊的浮点数值:
正无穷大(Double.POSITIVE_INFINITY)
负无穷大(Double.NEGATIVE_INFINITY)
Double.NaN(0/0或者负数的平方根结果为NaN),Double.isNaN(double num)判断是否是NaN
3)字符
char(2) 单引号'A',Unicode编码单元\u0000~\uffff,\u2122表示注册符号等
Character类中有很多字符是否是标示符等的判定方法
char(2) 单引号'A',Unicode编码单元\u0000~\uffff,\u2122表示注册符号等
Character类中有很多字符是否是标示符等的判定方法
4)布尔
boolean(1) 两个值:true和false
boolean(1) 两个值:true和false
3. 变量
1)不要使用未被初始化的变量,最好显示进行初始化
2)使用final声明常量(const是Java保留的关键字,但目前没有被使用)
2)使用final声明常量(const是Java保留的关键字,但目前没有被使用)
4. 运算符
1)Math类中包含了各种各样的数学函数,在函数前加Math.或者import static java.lang.Math.*(静态导入)
2)可预测结果比运行速度更重压的话,使用StrictMath类(fdlibm实现的算法)
3)int和long转换成float或者long转成double都会有精度损失
2)可预测结果比运行速度更重压的话,使用StrictMath类(fdlibm实现的算法)
3)int和long转换成float或者long转成double都会有精度损失
5. 代码点和代码单元
1)代码点就是一个Unicode字符。代码单元就是代码点的集合
2)辅助字符需要一对代码单元表示,辅助字符一般用于汉字或者日文等字符
3)遍历字符串,依次查看每一个代码点:
2)辅助字符需要一对代码单元表示,辅助字符一般用于汉字或者日文等字符
3)遍历字符串,依次查看每一个代码点:
int cp = sentence.codePointAt(i);
if(Character.isSupplementaryCodePoint(cp))
i+=2;
else
i++;
4)回退操作i--;
int cp = sentence.codePointAt(i);
if(Character.isSupplementaryCodePoint(cp))
i--;
6. StringBuffer vs. StringBuilder
1)StringBuffer线程安全
2)StringBuilder非线程安全,单线程中使用比StringBuffer快
2)StringBuilder非线程安全,单线程中使用比StringBuffer快
7. 控制台输入输出
1)Scanner in = new Scanner(System.in);
System.out.println("What is your name?");
String name = in.nextLine();
System.out.println("How old are you?");
int age = in.nextInt();
in.next(); //读一个单词
2)Console cons = System.console();
String userName = cons.readLine("User Name: ");
char[] password = cons.readPassword("Password: "); // 密码处理之后马上用填充值覆盖数组元素——安全
3)格式化输出
System.out.printf("%,.2f", 10000.0/3.0); ==> 3,333.33
System.out.printf("%,.2f", 10000.0/3.0); ==> 3,333.33
8. 文件的输入输出
1)Scanner in = new Scanner(new File("myfile.txt")); // 构造一个从给定文件读取数据的Scanner
2)Scanner in = new Scanner(String data); // 构造一个从给定字符串读取数据的Scanner
3)PrintWriter out = new PrintWriter("myfile.txt"));
2)Scanner in = new Scanner(String data); // 构造一个从给定字符串读取数据的Scanner
3)PrintWriter out = new PrintWriter("myfile.txt"));
9. 控制流程
1)flag: ... break flag;
10. 大数值
1)BigInteger
2)BigDecimal
2)BigDecimal
11. 数组
1)简单打印System.out.println(Arrays.toString(array));
2)数组拷贝Arrays.copyOf/System.arraycopy(from, fromIndex, to, toIndex, count);
3)数组排序Arrays.sort(array);
4)int r = (int)(Math.random() * n) [0, n-1]随机整数
5)for(double[] row : array)
for(double value: row)
do something with value
2)数组拷贝Arrays.copyOf/System.arraycopy(from, fromIndex, to, toIndex, count);
3)数组排序Arrays.sort(array);
4)int r = (int)(Math.random() * n) [0, n-1]随机整数
5)for(double[] row : array)
for(double value: row)
do something with value
6)二维数组快速打印System.out.println(Arrays.deepToString(array));
7)不规则数组
int[][] odds = new int[NMAX + 1][]
for(int n = 0; n <= NMAX; n++)
odds[n] = new int[n+1];
7)不规则数组
int[][] odds = new int[NMAX + 1][]
for(int n = 0; n <= NMAX; n++)
odds[n] = new int[n+1];