1. 每个变量都有一个类型(type)。
  2. 变量必须以字母开头,以字母和数字组成,不能有空格,不能用保留字作变量名,大小写是敏感的,变量长度一般没有限制。
  3. 可以有int i j;的写法,但是不提倡,逐行书写可以提高可读性,有习惯把变量名写为类型名的变形。
  4. 变量必须初始化,可以定义和初始化同时进行如int vacationDays = 12.
  5. 可在程序中任意地方声明变量,尽可能在靠近变量第一次使用的地方声明变量。(JAVA中不区分变量的声明与定义)。
  6. JAVA中用final指示常量,即表示该变量只能被赋值一次,一般常量名全大写。
  7. JAVA中要在一个类的不同方法中使用同一常量,则要在main之外用static final设置一个类常量。
  8. +-*/% /的时候,操作数是整数时用整数除法or表示浮点除法,整数被0除会产生一个异常,浮点数被0除会得到无穷大或NaN;%称求余或取模。
  9. Math类,求一个数的平方根可用sqrt方法,求幂运算可用pow方法,pow中两个参数以及返回值都是double型。
  10. 常用的三角函数;指数函数以及自然对数和以10为底的对数;e和π的近似值。
  11. 数值的合法转换:



double float long int
复制代码
  1. 强制类型转换 cast
    double x = 9.997;
    int nx = (int) x;
    这样是截断小数点数字。
    若要得到最相近的整数则要调用Math.round方法
    double x = 9.997;
    int nx = (int) Math.round(x);
  2. 强制类型转换有丢失信息甚至被截断为一个完全不同的值的风险。
  3. 二元运算符+= etc ,若是x是int,x += 3.5是合法的,会把x设置成(int)(x+3.5)
  4. ++n n++ 都会使n加一,前缀先加再使用,后缀先使用再加;不建议再表达式之中使用++ --,不易阅读且会有bug的风险。
  5. == != < > <= >= && || !
    && || 会有判断第一个之后不用判断第二个的情况(短路)
  6. 三目运算符 ? :
    condition ? expression1 : expression2
    x<y ? x : y
  7. 位运算符 ?????
  8. 优先级 P44
  9. 枚举类型。
  10. 字符串 预定义类String 每个用双引号括起来的字符串都是String的一个实例
    子串 可用substring从一个较大的字符串中提取出一个子串
    eg:
    String greeting = "Hello";
    String s = greeting.subsring(0 , 3);
    substring中的第二个参数表示第一个不取的位置,用substring可以很方便的得到取出的子串的长度
    如s.substring(a , b)的长度为b-a
  11. 用+连接两个字符串 (简单的拼接,中间没有空格)
    字符串与非字符串的值进行拼接时,后者被转换成字符串。
  12. JAVA中的Sring类对象是不可变字符串,要改变字符串可以用substring和+连用。 JAVA中的思想是共享提升的效率远大于提取拼接所降低的效率。
  13. equals 检测字符串是否相等。 equals允许字符串变量和字符串自变量进行比较。
    "Hello".equals(greeting)
    若要忽略两字符串的大小写,则用equalsIgnoreCase
    千万别用==检测两字符串是否相等
  14. 空字符串和Null串是不一样的。
  15. 代码点/字符编码(找blog看)。
  16. 读取输入需要先构造一个Scanner对象且与System.in关联。
    Scanner in = new Scanner(System.in)
    Scanner类有各种方法实现输入操作。
    用Console实现从控制台读取一个密码。
  17. System.out.printfln System.out.print System.out.printf
  18. 文件的输入与输出。
  19. 控制流程即判断,循环,switch。(JAVA中没有goto,但有break)
  20. 块(block)即复合语句,是由一堆大括号括起来的若干条简单的Java语句,决定了变量的作用域,一个块可以嵌套在另一个块之中。(不能再嵌套的块中声明同名变量,这与C++不同)
  21. 条件语句 if (condition) statement
    期望在条件成真时执行多条语句,即用到块语句(block statement),即用{}。
    if (condition1) statement else condition2
    else也自动和最近的else配对。
    if ... else if...交替出现的使用。
    习惯把{}单独写一行以对齐。(个人习惯)
  22. while (condition) statement
    do statement while(condition)
    while可能一次不做 do while必做一次
  23. P67两端代码未手敲。
  24. for循环(确定循环) 是支持迭代的通用结构,利用每次迭代之后更新的计数器或变量来控制迭代次数。
    for循环第一部分用来对变量进行初始化,第二部分为每次迭代之后要检测的循环条件,第三部分指示如何更新计数器。
    不成文的规定即三个部分应该对同一变量进行操作。
    在for语句内部定义的变量的作用域仅为该for语句的循环体,不同for语句可定义同名的变量。
    for循环与while循环可相互改写。
  25. P71未手敲。
  26. 多重选择语句switch语句(与C完全一样)。
    特别注意的即为switch case语句为直通式(fallthrough)行为,即遇到break才跳出,于是不常使用switch语句。若无对应的case则执行default子句。
    若要用switch语句,可在编译代码时加上-Xlint:fallthrough以达到若每个case之后少一个break,编译器就会给出一个警告。
    case标签可以是char、byte、short、int的变量表达式,也可是枚举常量和字符串字面量。
  27. 中断控制流程语句break
    JAVA把goto作为保留字,但不打算在语言中使用它,而增加了带标签的break语句来实现这种程序设计风格。
    不带标签的break即与switch case中的break一样表示跳出当前循环。
    带标签的break,break放在要跳出的循环体名称之前,可跳出多重循环。
    只能跳出语句块不能跳入语句块。
    一个需要区分的是continue语句,表示跳出当前这次循环而回到循环开头继续这个循环。
  28. 当整型和浮点型的精度无法满足要求时,可用java.math包中的两类:BigInteger和BigDecimal来分别处理任意长度的整数和浮点数。
    用valueOf方法可把普通的数值转换成大数值:
    BigInteger a = BigInteger.valueOf(100)
    大数值不能用+ *处理,而只能用大数值类红的add和multiply方法
    BigInteger c = a.add(b)//c = a + b
    BigInteger d = c.multiply(b.add(Biginteger.valueOf(2)))//d = c * (b + 2)
  29. P77代码未手敲。
  30. 数组是一种数据结构,用以存放同一类型值的集合。
    Java中习惯用int[] a这种形式来声明一个数组。
    使用new运算来创建数组 int [] a = new int[100]
    数组一旦创建就不可改变其大小,只能改变其元素。如果要经常在运行过程中扩展数组的大小,要用到另一种数据结构——数组列表(array list)。
    数组从0开始计数。
    用for循环初始化数组,初始化为0,boolean数组初始化为false,对象数组的元素初始化为null,可用for循环将其也初始化为0
    for ( i=0 ; i<10 ; i ++)
    names[i] = " ";
    可用array.length来获得数组中的元素个数
  31. for each循环
    增强的for循环,不必为下标值而分心,会遍历每个元素。
  32. 创建数组对象且同时赋予初始值的简化书写形式
    int[] smallPrimes = { 2, 3, 5, 7, 11, 13 };
    枚举法定义数组时数组的大小即为初始值的个数。
    Java中允许数组的长度为0.长度为0不是null。
    new int [n] 创造一个长度为n的数组。
  33. Java中允许把一个数组的一个变量拷贝给另一个数组的一个变量
    int[] luckyNumbers = smallPrimes;
    luckyNumbers[5] = 12;
    若要把一个数组的所有值拷贝到一个数组上去,则要用Array类的copyOf方法
    int[] copiedLuckyNumbers = Array.copyOf(luckyNumbers, luckyNumbers.length);
    常用此方法来增加数组的大小:
    luckyNumbers = Array.copyOf(luckyNumbers, 2 * luckyNumbers.length)
    若拷贝的数组长度长于原始数组,则多余的赋0,布尔值则多余的赋false,若短,则只拷贝前面的数据元素。
  34. 数组排序的程序。
    创建两个数组,数组赋值,得到一个0到n-1的随机数,抽取,确保不会重复抽,输出结果。
    P83未手打。
  35. 多维数组
    要访问一个二维数组的所有元素,需要用嵌套的for循环来完成。
    P87未手打。
  36. 不规则数组
    实际上内存上没有多维数组的说法,只是数组的数组而已,故可以定义不规则的数组,即每行有着不同的长度。P89未手打。