Java核心技术笔记-基本程序设计结构

基本

  • 文件名必须和公共类名相同
  • 所有函数都属于某各类的方法
  • main方法必须申明为public且必须有一个外壳类
  • /**/注释不能嵌套
  • /* /可以自动生成文档

数据类型

  • 4种整型:byte(1), short(2), int(4), long(8)
    • int范围大约为正负21亿
    • long数值有个后缀L或l
    • 0b/0B表示二进制数,数字中间加_不影响数值
    • 没有unsigned形式
  • 2种浮点型:float(4), double(8)
    • float有效位数6~7位,有后缀F或f
    • double有效位数15位,可以加后缀D或d
    • 通常用double,没有后缀默认为double
    • 不允许有误差需要用BigDecimal类
  • 1种Unicode字符类型:char(2)
    • 强烈建议不用使用
  • 1中boolean类型
    • 整型和布尔型不能相互转换

变量

  • 字母开头、区分大小写、不要用$
  • 关键字final表示常量,只能被赋值一次,通常全大写
  • 关键字static final表示类常量,类常量可以被一个类中的多个方法使用

运算符

  • 算数运算符+-*/%
  • 幂运算用Math.pow(x, a)
  • 负数取余用floorMod
  • 类型转换注意数据丢失问题
  • 不要用boolean转换,某些情况下可以用b?1:0
  • 形如x+=1.5结果会强制转换成x的类型
  • 枚举类型enum

字符串

  • 分割 str.substring(start, end+1)
  • 拼接 s1+s2
  • 含间隔符拼接 String.join(‘-‘, s1, s2, …)
  • 字符串本身不可修改,变量相当于C中的char指针
  • 判断相等用s.equals(t),千万别用==判断
  • 调用字符串方法前,要检查是否==null
  • StringBuilder可以解决大量字符串拼接效率低的问题

输入输出

  • 控制台输出输入
    • 读一行nextLine(),读一个词next()
    • 读密码用Console类的readPassword,是char数组
    • 格式化输出用System.out.printf, 类似C中的printf
    • 只格式化字符串不输出用String.format()
    • 格式化支持索引(可复用),从1开始,如%1$表示第一个参数
    • 格式化中的<表示复用前一个参数
  • 文件读写
    • 读文件:Scanner in = new Scanner(Paths.get(“file.txt”), “UTF-8”)
    • 写文件:PrintWriter out = new PrintWriter(“file.txt”, “UTF-8”)

控制流程

  • 不能在嵌套的两个块中声明同名的变量
  • if…else if…
  • while (condition) …
  • do … while (condition)
  • for(int i=0; i<10; i++) … 中的i只在循环内有效
  • 检测浮点数是否相等时要小心
  • 少用switch case,case标签可以是枚举常量和字符串字面量(7)
  • 可以给break加标签,可以实现类似goto的功能

大数值

  • java.math中的BigInteger实现任意精度整数运算
  • BigDecimal实现任意精度的浮点运算
  • +-*/%分别对应add, subtract, multiply, divide, mod
  • 大实数计算商需要给出舍入方式
  • compareTo比较,valueOf取值

数组

  • int[] a = new int[100]
  • int[] a = {1, 2, 3, 4}
  • int[] a = new int[] {1, 2, 3, 4}
  • 数字数组初始化为0,boolean数组初始化为false,对象数组初始化为null
  • 遍历每个元素:for (variable: collection) …
  • 深度拷贝:Array.copyOf(arr, arr.length) 第二个参数是新数组的长度
  • main方法会接收一个String[] args数组参数,这个参数来自命令行